diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-09-14 15:58:55 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-09-14 15:59:39 +0300 |
commit | ab6a3dd6c150d0842d39e6a09b44b806ae2c53c1 (patch) | |
tree | da7e1b0a0bba12d6a57180f8a19da53da8efe216 /intern | |
parent | 66d4006f51b56feff7db9846d40e78b18c519e67 (diff) |
Fix T49341: Bad motion blur behavior in Cycles when using Speed effect in Sequencer
Cycles was thinking it always rendering integer frame, which is not correct.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index f305e8e17cc..f7f77dfb4cb 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -698,6 +698,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render, Camera prevcam = *(scene->camera); int frame_center = b_scene.frame_current(); + float subframe_center = b_scene.frame_subframe(); float frame_center_delta = 0.0f; if(scene->need_motion() != Scene::MOTION_PASS && @@ -711,7 +712,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render, assert(scene->camera->motion_position == Camera::MOTION_POSITION_START); frame_center_delta = shuttertime * 0.5f; } - float time = frame_center + frame_center_delta; + float time = frame_center + subframe_center + frame_center_delta; int frame = (int)floorf(time); float subframe = time - frame; python_thread_state_restore(python_thread_state); @@ -734,7 +735,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render, float shuttertime = scene->motion_shutter_time(); /* compute frame and subframe time */ - float time = frame_center + frame_center_delta + relative_time * shuttertime * 0.5f; + float time = frame_center + subframe_center + frame_center_delta + relative_time * shuttertime * 0.5f; int frame = (int)floorf(time); float subframe = time - frame; @@ -759,7 +760,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render, * function assumes it is being executed from python and will * try to save the thread state */ python_thread_state_restore(python_thread_state); - b_engine.frame_set(frame_center, 0.0f); + b_engine.frame_set(frame_center, subframe_center); python_thread_state_save(python_thread_state); /* tag camera for motion update */ |