[Bf-blender-cvs] [2549e26] soc-2016-cycles_denoising: Cycles: Sync new filter settings when using denoising after rendering

Lukas Stockner noreply at git.blender.org
Sat Nov 26 04:21:34 CET 2016


Commit: 2549e26f859fc67e6e43c99e35caa095b94ca898
Author: Lukas Stockner
Date:   Thu Nov 24 13:42:25 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB2549e26f859fc67e6e43c99e35caa095b94ca898

Cycles: Sync new filter settings when using denoising after rendering

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/render/session.cpp
M	intern/cycles/render/session.h

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index fa33a9d..f0ef61b 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -1397,10 +1397,15 @@ void BlenderSession::denoise(BL::RenderResult& b_rr)
 		BL::RenderSettings::layers_iterator b_s_layer_iter;
 		int half_window = -1;
 		float filter_strength = 0.0f;
+		float weight_adjust = 0.0f;
+		bool filter_nlm, filter_gradient;
 		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_nlm = b_s_layer_iter->filter_use_nlm_weights();
+				filter_gradient = b_s_layer_iter->filter_gradients();
 				break;
 			}
 		}
@@ -1409,6 +1414,10 @@ void BlenderSession::denoise(BL::RenderResult& b_rr)
 		session->params.half_window = half_window;
 		session->params.samples = get_int(cscene, "samples");
 		session->params.filter_strength = powf(2.0f, filter_strength);
+		session->params.filter_weight_adjust = powf(2.0f, weight_adjust);
+		session->params.filter_gradient = filter_gradient;
+		session->params.filter_nlm = filter_nlm;
+		if(filter_nlm) session->params.filter_weight_adjust /= 2.0f;
 
 		session->buffers = BlenderSync::get_render_buffer(session->device, *b_layer_iter, b_rr, session->params.samples);
 
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 568405b..84c8434 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -807,6 +807,9 @@ void Session::run_denoise()
 		kernel_data.film.prev_frames = params.prev_frames;
 		if(scene == NULL) {
 			kernel_data.integrator.filter_strength = params.filter_strength;
+			kernel_data.integrator.weighting_adjust = params.filter_weight_adjust;
+			kernel_data.integrator.use_gradients = params.filter_gradient;
+			kernel_data.integrator.use_nlm_weights = params.filter_nlm;
 		}
 		device->const_copy_to("__data", &kernel_data, sizeof(kernel_data));
 
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index edebb65..2f0597a 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -65,6 +65,9 @@ public:
 	bool only_denoise;
 	int half_window;
 	float filter_strength;
+	float filter_weight_adjust;
+	bool filter_nlm;
+	bool filter_gradient;
 	int prev_frames;
 
 	double cancel_timeout;
@@ -97,6 +100,9 @@ public:
 		only_denoise = false;
 		half_window = 8;
 		filter_strength = 1.0f;
+		filter_weight_adjust = 1.0f;
+		filter_nlm = false;
+		filter_gradient = false;
 		prev_frames = 0;
 
 		cancel_timeout = 0.1;
@@ -125,6 +131,9 @@ public:
 		&& only_denoise == params.only_denoise
 		&& half_window == params.half_window
 		&& filter_strength == params.filter_strength
+		&& filter_weight_adjust == params.filter_weight_adjust
+		&& filter_nlm == params.filter_nlm
+		&& filter_gradient == params.filter_gradient
 		&& prev_frames == params.prev_frames
 		&& display_buffer_linear == params.display_buffer_linear
 		&& cancel_timeout == params.cancel_timeout




More information about the Bf-blender-cvs mailing list