[Bf-blender-cvs] [35d3adc350] soc-2016-cycles_denoising: Cycles Denoising: Fix multilayer handling when denoising after rendering

Lukas Stockner noreply at git.blender.org
Wed Feb 1 05:19:18 CET 2017


Commit: 35d3adc350f7b388d60fa673fb77170cffb6d745
Author: Lukas Stockner
Date:   Sun Jan 29 04:16:39 2017 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB35d3adc350f7b388d60fa673fb77170cffb6d745

Cycles Denoising: Fix multilayer handling when denoising after rendering

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_sync.cpp

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 67fd505059..5eb71857f9 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -1343,34 +1343,34 @@ void BlenderSession::denoise(BL::RenderResult& b_rr)
 
 	BL::RenderResult::layers_iterator b_layer_iter;
 	for(b_rr.layers.begin(b_layer_iter); b_layer_iter != b_rr.layers.end(); ++b_layer_iter) {
-		/* Search corresponding scene layer to get the half window. */
+		b_rlay_name = b_layer_iter->name();
+
+		/* Search corresponding scene layer to get the denoising properties. */
 		BL::RenderSettings r = b_scene.render();
 		BL::RenderSettings::layers_iterator b_s_layer_iter;
-		int half_window = -1;
-		float filter_strength = 0.0f;
-		float weight_adjust = 0.0f;
-		bool filter_gradient;
+		BL::SceneRenderLayer b_s_layer = r.layers.active();
 		for(r.layers.begin(b_s_layer_iter); b_s_layer_iter != r.layers.end(); ++b_s_layer_iter) {
 			if(b_s_layer_iter->name() == b_layer_iter->name()) {
-				half_window = b_s_layer_iter->half_window();
-				filter_strength = b_s_layer_iter->filter_strength();
-				weight_adjust = b_s_layer_iter->filter_weighting_adjust();
-				filter_gradient = b_s_layer_iter->filter_gradients();
+				b_s_layer = *b_s_layer_iter;
 				break;
 			}
 		}
-		assert(half_window != -1);
 
-		session->params.half_window = half_window;
 		session->params.samples = get_int(cscene, "samples");
 		if(get_boolean(cscene, "use_square_samples")) {
 			session->params.samples *= session->params.samples;
 		}
-		session->params.filter_strength = (filter_strength == 0.0f)? 1e-3f : copysignf(powf(10.0f, -fabsf(filter_strength)*2.0f), filter_strength);
-		session->params.filter_weight_adjust = powf(2.0f, weight_adjust - 1.0f);
-		session->params.filter_gradient = filter_gradient;
 
 		session->buffers = BlenderSync::get_render_buffer(session->device, *b_layer_iter, b_rr, session->params.samples);
+		if(!session->buffers) {
+			continue;
+		}
+
+		session->params.half_window = b_s_layer.half_window();
+		float filter_strength = b_s_layer.filter_strength();
+		session->params.filter_strength = (filter_strength == 0.0f)? 1e-3f : copysignf(powf(10.0f, -fabsf(filter_strength)*2.0f), filter_strength);
+		session->params.filter_weight_adjust = powf(2.0f, b_s_layer.filter_weighting_adjust() - 1.0f);
+		session->params.filter_gradient = b_s_layer.filter_gradients();
 
 		session->start_denoise();
 		session->wait();
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index ca5ac9976e..a232f7d304 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -879,7 +879,10 @@ RenderBuffers* BlenderSync::get_render_buffer(Device *device,
 				params.cross_denoising = true;
 		}
 	}
-	params.denoising_passes = ((~denoising_passes & DENOISING_PASS_REQUIRED) == 0);
+	if(~denoising_passes & DENOISING_PASS_REQUIRED) {
+		return NULL;
+	}
+	params.denoising_passes = true;
 	assert(!params.cross_denoising || (denoising_passes & DENOISING_PASS_NOISY_B_VAR));
 
 	RenderBuffers *buffer = new RenderBuffers(device);




More information about the Bf-blender-cvs mailing list