diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2012-05-04 20:20:51 +0400 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2012-05-04 20:20:51 +0400 |
commit | d7fbe03a8a128408c86687ef34273adddccdb347 (patch) | |
tree | 26d5768781582b1ed0164c20098449c7700051d9 /intern/cycles/render/camera.cpp | |
parent | b6edcc4b33e782b4a91a61d1c46136c52a4172c9 (diff) |
Fisheye Camera for Cycles
For sample images see:
http://www.dalaifelinto.com/?p=399 (equisolid)
http://www.dalaifelinto.com/?p=389 (equidistant)
The 'use_panorama' option is now part of a new Camera type: 'Panorama'.
Created two other panorama cameras:
- Equisolid: most of lens in the market simulate this lens - e.g. Nikon, Canon, ...)
this works as a real lens up to an extent. The final result takes the
sensor dimensions into account also.
.:. to simulate a Nikon DX2S with a 10.5mm lens do:
sensor: 23.7 x 15.7
fisheye lens: 10.5
fisheye fov: 180
render dimensions: 4288 x 2848
- Equidistant: this is not a real lens model. Although the old equidistant lens simulate
this lens. The result is always as a circular fisheye that takes the whole sensor
(in other words, it doesn't take the sensor into consideration).
This is perfect for fulldomes ;)
For the UI we have 10 to 360 as soft values and 10 to 3600 as hard values (because we can).
Reference material:
http://www.hdrlabs.com/tutorials/downloads_files/HDRI%20for%20CGI.pdf
http://www.bobatkins.com/photography/technical/field_of_view.html
Note, this is not a real simulation of the light path through the lens.
The ideal solution would be this:
https://graphics.stanford.edu/wikis/cs348b-11/Assignment3
http://www.graphics.stanford.edu/papers/camera/
Thanks Brecht for the fix, suggestions and code review.
Kudos for the dome community for keeping me stimulated on the topic since 2009 ;)
Patch partly implemented during lab time at VisGraf, IMPA - Rio de Janeiro.
Diffstat (limited to 'intern/cycles/render/camera.cpp')
-rw-r--r-- | intern/cycles/render/camera.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp index f0b77871130..95405519cc0 100644 --- a/intern/cycles/render/camera.cpp +++ b/intern/cycles/render/camera.cpp @@ -39,8 +39,14 @@ Camera::Camera() use_motion = false; type = CAMERA_PERSPECTIVE; + panorama_type = PANORAMA_EQUIRECTANGULAR; + fisheye_fov = M_PI_F; + fisheye_lens = 10.5f; fov = M_PI_F/4.0f; + sensorwidth = 0.036; + sensorheight = 0.024; + nearclip = 1e-5f; farclip = 1e5f; @@ -181,6 +187,15 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene) /* type */ kcam->type = type; + /* panorama */ + kcam->panorama_type = panorama_type; + kcam->fisheye_fov = fisheye_fov; + kcam->fisheye_lens = fisheye_lens; + + /* sensor size */ + kcam->sensorwidth = sensorwidth; + kcam->sensorheight = sensorheight; + /* store differentials */ kcam->dx = float3_to_float4(dx); kcam->dy = float3_to_float4(dy); @@ -208,6 +223,8 @@ bool Camera::modified(const Camera& cam) (fov == cam.fov) && (nearclip == cam.nearclip) && (farclip == cam.farclip) && + (sensorwidth == cam.sensorwidth) && + (sensorheight == cam.sensorheight) && // modified for progressive render // (width == cam.width) && // (height == cam.height) && @@ -217,7 +234,10 @@ bool Camera::modified(const Camera& cam) (top == cam.top) && (matrix == cam.matrix) && (motion == cam.motion) && - (use_motion == cam.use_motion)); + (use_motion == cam.use_motion) && + (panorama_type == cam.panorama_type) && + (fisheye_fov == cam.fisheye_fov) && + (fisheye_lens == cam.fisheye_lens)); } void Camera::tag_update() |