diff options
Diffstat (limited to 'intern/cycles/render/camera.h')
-rw-r--r-- | intern/cycles/render/camera.h | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/intern/cycles/render/camera.h b/intern/cycles/render/camera.h index 1bedb051112..684b4458dfc 100644 --- a/intern/cycles/render/camera.h +++ b/intern/cycles/render/camera.h @@ -32,12 +32,53 @@ class Scene; /* Camera * * The camera parameters are quite standard, tested to be both compatible with - * Renderman, and Blender after remapping. */ + * Renderman, and Blender after remapping. + */ class Camera { public: + /* Specifies an offset for the shutter's time interval. */ + enum MotionPosition { + /* Shutter opens at the current frame. */ + MOTION_POSITION_START = 0, + /* Shutter is fully open at the current frame. */ + MOTION_POSITION_CENTER = 1, + /* Shutter closes at the current frame. */ + MOTION_POSITION_END = 2, + + MOTION_NUM_POSITIONS, + }; + + /* Specifies rolling shutter effect. */ + enum RollingShutterType { + /* No rolling shutter effect. */ + ROLLING_SHUTTER_NONE = 0, + /* Sensor is being scanned vertically from top to bottom. */ + ROLLING_SHUTTER_TOP = 1, + + ROLLING_SHUTTER_NUM_TYPES, + }; + + /* Stereo Type */ + enum StereoEye { + STEREO_NONE, + STEREO_LEFT, + STEREO_RIGHT, + }; + /* motion blur */ float shuttertime; + MotionPosition motion_position; + float shutter_curve[RAMP_TABLE_SIZE]; + size_t shutter_table_offset; + + /* ** Rolling shutter effect. ** */ + /* Defines rolling shutter effect type. */ + RollingShutterType rolling_shutter_type; + /* Specifies exposure time of scanlines when using + * rolling shutter effect. + */ + float rolling_shutter_duration; /* depth of field */ float focaldistance; @@ -58,6 +99,12 @@ public: float longitude_min; float longitude_max; + /* panorama stereo */ + StereoEye stereo_eye; + bool use_spherical_stereo; + float interocular_distance; + float convergence_distance; + /* anamorphic lens bokeh */ float aperture_ratio; @@ -73,6 +120,8 @@ public: int width, height; int resolution; BoundBox2D viewplane; + /* width and height change during preview, so we need these for calculating dice rates. */ + int full_width, full_height; /* border */ BoundBox2D border; @@ -104,6 +153,9 @@ public: float3 dx; float3 dy; + float3 full_dx; + float3 full_dy; + /* update */ bool need_update; bool need_device_update; @@ -120,7 +172,7 @@ public: void device_update(Device *device, DeviceScene *dscene, Scene *scene); void device_update_volume(Device *device, DeviceScene *dscene, Scene *scene); - void device_free(Device *device, DeviceScene *dscene); + void device_free(Device *device, DeviceScene *dscene, Scene *scene); bool modified(const Camera& cam); bool motion_modified(const Camera& cam); @@ -129,6 +181,9 @@ public: /* Public utility functions. */ BoundBox viewplane_bounds_get(); + /* Calculates the width of a pixel at point in world space. */ + float world_to_raster_size(float3 P); + private: /* Private utility functions. */ float3 transform_raster_to_world(float raster_x, float raster_y); |