Commit: a37e4d4738f94e97a9425b41265d8986b86410ae
Author: Sergey Sharybin
Date:   Wed Sep 14 14:58:55 2016 +0200
Branches: blender-v2.78-release
https://developer.blender.org/rBa37e4d4738f94e97a9425b41265d8986b86410ae

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.

===================================================================

M       intern/cycles/blender/blender_object.cpp

===================================================================

diff --git a/intern/cycles/blender/blender_object.cpp 
b/intern/cycles/blender/blender_object.cpp
index f305e8e..f7f77df 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 */

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to