[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