Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-11-20 12:42:34 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-12-31 18:44:27 +0300
commitade35bac9355679f0966249b7d65992ef024eb04 (patch)
treecdf0d9aedb6d2c9d53c8000aae2b02e8b551d587 /intern/cycles/blender/blender_camera.cpp
parentc81e6ffdf942a7e8ac58ef3a48ca1bcab78f01fd (diff)
Cycles: Implement rolling shutter effect
This is an attempt to emulate real CMOS cameras which reads sensor by scanlines and hence different scanlines are sampled at a different moment in time, which causes so called rolling shutter effect. This effect will, for example, make vertical straight lines being curved when doing horizontal camera pan. This is controlled by the Shutter Type option in the Motion Blur panel. Additionally, since scanline sampling is not instantaneous it's possible to have motion blur on top of rolling shutter. This is controlled by the Rolling Shutter Time slider which controls balance between pure rolling shutter effect and pure motion blur effect. Reviewers: brecht, juicyfruit, dingto, keir Differential Revision: https://developer.blender.org/D1624
Diffstat (limited to 'intern/cycles/blender/blender_camera.cpp')
-rw-r--r--intern/cycles/blender/blender_camera.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index cde3840b796..5f2e0762964 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -39,6 +39,9 @@ struct BlenderCamera {
Camera::MotionPosition motion_position;
float shutter_curve[RAMP_TABLE_SIZE];
+ Camera::RollingShutterType rolling_shutter_type;
+ float rolling_shutter_duration;
+
float aperturesize;
uint apertureblades;
float aperturerotation;
@@ -86,6 +89,8 @@ static void blender_camera_init(BlenderCamera *bcam, BL::RenderSettings b_render
bcam->sensor_fit = BlenderCamera::AUTO;
bcam->shuttertime = 1.0f;
bcam->motion_position = Camera::MOTION_POSITION_CENTER;
+ bcam->rolling_shutter_type = Camera::ROLLING_SHUTTER_NONE;
+ bcam->rolling_shutter_duration = 0.1f;
bcam->border.right = 1.0f;
bcam->border.top = 1.0f;
bcam->pano_viewplane.right = 1.0f;
@@ -418,6 +423,9 @@ static void blender_camera_sync(Camera *cam, BlenderCamera *bcam, int width, int
cam->fov_post = cam->fov;
cam->motion_position = bcam->motion_position;
+ cam->rolling_shutter_type = bcam->rolling_shutter_type;
+ cam->rolling_shutter_duration = bcam->rolling_shutter_duration;
+
memcpy(cam->shutter_curve, bcam->shutter_curve, sizeof(cam->shutter_curve));
/* border */
@@ -460,6 +468,19 @@ void BlenderSync::sync_camera(BL::RenderSettings b_render, BL::Object b_override
break;
}
+ switch(RNA_enum_get(&cscene, "rolling_shutter_type")) {
+ case 0:
+ bcam.rolling_shutter_type = Camera::ROLLING_SHUTTER_NONE;
+ break;
+ case 1:
+ bcam.rolling_shutter_type = Camera::ROLLING_SHUTTER_TOP;
+ break;
+ default:
+ bcam.rolling_shutter_type = Camera::ROLLING_SHUTTER_NONE;
+ break;
+ }
+ bcam.rolling_shutter_duration = RNA_float_get(&cscene, "rolling_shutter_duration");
+
/* border */
if(b_render.use_border()) {
bcam.border.left = b_render.border_min_x();