From 6e53fdc18fa0a2003bd8c39d968fe379b5d1d082 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Thu, 21 Feb 2019 13:31:52 +0100 Subject: [PATCH 1/2] Cycles OpenCL: Motion Blur Compile Directives 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 | 2 +- intern/cycles/render/session.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index a05c982b367..62db5d705e0 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -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)) { diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index ac69251c908..69969987352 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -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; From f1304c973f5eef5169e09d30c0dba82cc7e4c4a1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 21 Feb 2019 16:46:42 +0100 Subject: [PATCH 2/2] Fix T61810: Cycles OpenCL denoising broken after recent changes. --- intern/cycles/device/opencl/opencl_split.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp index 8c8c93b75a2..be408e92520 100644 --- a/intern/cycles/device/opencl/opencl_split.cpp +++ b/intern/cycles/device/opencl/opencl_split.cpp @@ -591,6 +591,7 @@ bool OpenCLDevice::load_kernels(const DeviceRequestedFeatures& requested_feature denoising_program = OpenCLProgram(this, "denoising", "filter.cl", ""); denoising_program.add_kernel(ustring("filter_divide_shadow")); denoising_program.add_kernel(ustring("filter_get_feature")); + denoising_program.add_kernel(ustring("filter_write_feature")); denoising_program.add_kernel(ustring("filter_detect_outliers")); denoising_program.add_kernel(ustring("filter_combine_halves")); denoising_program.add_kernel(ustring("filter_construct_transform"));