blender/intern/cycles/render/camera.h
Dalai Felinto d7fbe03a8a 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.
2012-05-04 16:20:51 +00:00

109 lines
2.2 KiB
C++

/*
* Copyright 2011, Blender Foundation.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __CAMERA_H__
#define __CAMERA_H__
#include "kernel_types.h"
#include "util_transform.h"
#include "util_types.h"
CCL_NAMESPACE_BEGIN
class Device;
class DeviceScene;
class Scene;
/* Camera
*
* The camera parameters are quite standard, tested to be both compatible with
* Renderman, and Blender after remapping. */
class Camera {
public:
/* motion blur */
float shuttertime;
/* depth of field */
float focaldistance;
float aperturesize;
uint blades;
float bladesrotation;
/* type */
CameraType type;
float fov;
/* panorama */
PanoramaType panorama_type;
float fisheye_fov;
float fisheye_lens;
/* sensor */
float sensorwidth;
float sensorheight;
/* clipping */
float nearclip;
float farclip;
/* screen */
int width, height;
float left, right, bottom, top;
/* transformation */
Transform matrix;
/* motion */
MotionTransform motion;
bool use_motion;
/* computed camera parameters */
Transform screentoworld;
Transform rastertoworld;
Transform ndctoworld;
Transform rastertocamera;
Transform cameratoworld;
Transform worldtoraster;
float3 dx;
float3 dy;
/* update */
bool need_update;
bool need_device_update;
/* functions */
Camera();
~Camera();
void update();
void device_update(Device *device, DeviceScene *dscene, Scene *scene);
void device_free(Device *device, DeviceScene *dscene);
bool modified(const Camera& cam);
void tag_update();
};
CCL_NAMESPACE_END
#endif /* __CAMERA_H__ */