Cycles OpenCL: Motion Blur Compile Directives
authorJeroen Bakker <j.bakker@atmind.nl>
Thu, 21 Feb 2019 12:31:52 +0000 (13:31 +0100)
committerJeroen Bakker <j.bakker@atmind.nl>
Thu, 21 Feb 2019 15:33:29 +0000 (16:33 +0100)
When using preview rendering through a camera or final rendering
the `scene.render.use_motion_blur` was not respected when building
the compile directives.

This patch will when building the compile directives check if
motion blur is enabled at all. This should lead to more efficient
kernels when no motion blur is needed.

Tags: #cycles

Differential Revision: https://developer.blender.org/D4387

intern/cycles/blender/blender_object.cpp
intern/cycles/render/session.cpp

index a05c982..62db5d7 100644 (file)
@@ -419,7 +419,7 @@ Object *BlenderSync::sync_object(BL::Object& b_parent,
 
                        uint motion_steps;
 
-                       if(scene->need_motion() == Scene::MOTION_BLUR) {
+                       if(need_motion == Scene::MOTION_BLUR) {
                                motion_steps = object_motion_steps(b_parent, b_ob);
                                mesh->motion_steps = motion_steps;
                                if(motion_steps && object_use_deform_motion(b_parent, b_ob)) {
index ac69251..6996998 100644 (file)
@@ -666,16 +666,19 @@ DeviceRequestedFeatures Session::get_requested_device_features()
        /* This features are not being tweaked as often as shaders,
         * so could be done selective magic for the viewport as well.
         */
+       bool use_motion = scene->need_motion() == Scene::MotionType::MOTION_BLUR;
        requested_features.use_hair = false;
        requested_features.use_object_motion = false;
-       requested_features.use_camera_motion = scene->camera->use_motion();
+       requested_features.use_camera_motion = use_motion && scene->camera->use_motion();
        foreach(Object *object, scene->objects) {
                Mesh *mesh = object->mesh;
                if(mesh->num_curves()) {
                        requested_features.use_hair = true;
                }
-               requested_features.use_object_motion |= object->use_motion() | mesh->use_motion_blur;
-               requested_features.use_camera_motion |= mesh->use_motion_blur;
+               if (use_motion) {
+                       requested_features.use_object_motion |= object->use_motion() | mesh->use_motion_blur;
+                       requested_features.use_camera_motion |= mesh->use_motion_blur;
+               }
 #ifdef WITH_OPENSUBDIV
                if(mesh->subdivision_type != Mesh::SUBDIVISION_NONE) {
                        requested_features.use_patch_evaluation = true;