[Bf-blender-cvs] [a9ef88b] soc-2016-cycles_denoising: Cycles: Rename collaborative denoising option

Lukas Stockner noreply at git.blender.org
Tue Nov 22 04:25:31 CET 2016


Commit: a9ef88b1d88674dcb6412f94cec4b9cc3342f399
Author: Lukas Stockner
Date:   Thu Nov 17 14:00:56 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rBa9ef88b1d88674dcb6412f94cec4b9cc3342f399

Cycles: Rename collaborative denoising option

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

M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/device/device_cpu.cpp
M	intern/cycles/device/device_cuda.cpp
M	intern/cycles/kernel/kernel_filter.h
M	intern/cycles/kernel/kernel_filter_pre.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/render/integrator.cpp
M	intern/cycles/render/integrator.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 06607aa..a0b387d 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -578,7 +578,7 @@ class CyclesRender_PT_denoising(CyclesButtonsPanel, Panel):
         sub.prop(rl, "half_window")
         sub.prop(rl, "filter_strength", slider=True)
         sub.prop(rl, "filter_weighting_adjust", slider=True)
-        sub.prop(rl, "filter_collaborative")
+        sub.prop(rl, "filter_gradients")
         sub.prop(rl, "filter_use_nlm_weights")
 
         sub = col.column(align=True)
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index d629e55..7867c0e 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -467,7 +467,8 @@ void BlenderSession::render()
 		scene->integrator->filter_strength = powf(2.0f, b_layer_iter->filter_strength());
 		scene->integrator->weighting_adjust = powf(2.0f, b_layer_iter->filter_weighting_adjust());
 		scene->integrator->use_nlm_weights = b_layer_iter->filter_use_nlm_weights();
-		scene->integrator->use_collaborative_filtering = b_layer_iter->filter_collaborative();
+		if(scene->integrator->use_nlm_weights) scene->integrator->weighting_adjust /= 2.0f;
+		scene->integrator->use_gradients = b_layer_iter->filter_gradients();
 
 		scene->film->pass_alpha_threshold = b_layer_iter->pass_alpha_threshold();
 		scene->film->tag_passes_update(scene, passes);
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 821879d..7fb97bf 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -434,7 +434,7 @@ public:
 	{
 		bool old_filter = getenv("OLD_FILTER");
 		bool only_nlm_filter = getenv("ONLY_NLM_FILTER");
-		bool use_collaborative_filtering = kg->__data.integrator.use_collaborative_filtering;
+		bool use_gradients = kg->__data.integrator.use_gradients;
 		bool nlm_weights = kg->__data.integrator.use_nlm_weights;
 
 		FilterStorage *storage = new FilterStorage[filter_area.z*filter_area.w];
@@ -536,7 +536,7 @@ public:
 #endif
 		}
 
-		if(use_collaborative_filtering) {
+		if(use_gradients) {
 			for(int y = 0; y < filter_area.w; y++) {
 				for(int x = 0; x < filter_area.z; x++) {
 					filter_divide_combined_kernel()(kg, x + filter_area.x, y + filter_area.y, sample, buffers, offset, stride);
diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index 1f2cfdc..cfcd037 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -1178,7 +1178,7 @@ public:
 			cuda_assert(cuCtxSynchronize());
 		}
 
-		if(kernel_globals.integrator.use_collaborative_filtering) {
+		if(kernel_globals.integrator.use_gradients) {
 			void *divide_args[] = {&d_buffers,
 			                       &sample,
 			                       &rtile.offset,
diff --git a/intern/cycles/kernel/kernel_filter.h b/intern/cycles/kernel/kernel_filter.h
index b8f6c42..edafafa 100644
--- a/intern/cycles/kernel/kernel_filter.h
+++ b/intern/cycles/kernel/kernel_filter.h
@@ -387,11 +387,11 @@ ccl_device void kernel_filter_final_pass_wlr(KernelGlobals *kg, int sample, floa
 		for(int col = 0; col < row; col++)
 			XtX[row*matrix_size+col] = 0.0f;
 
-	/* When using collaborative filtering, we need to solve for the intercept and gradients.
+	/* When using gradients for filtering, we need to solve for the intercept and gradients.
 	 * Otherwise, just the intercept is enough. */
-	int solution_size = kernel_data.integrator.use_collaborative_filtering? matrix_size : 1;
+	int solution_size = kernel_data.integrator.use_gradients? matrix_size : 1;
 	float XtWXinv[(DENOISE_FEATURES+1)*(DENOISE_FEATURES+1)];
-	if(kernel_data.integrator.use_collaborative_filtering)
+	if(kernel_data.integrator.use_gradients)
 		math_matrix_zero(XtWXinv, matrix_size);
 	else
 		math_vector_zero(XtWXinv, matrix_size);
@@ -420,7 +420,7 @@ ccl_device void kernel_filter_final_pass_wlr(KernelGlobals *kg, int sample, floa
 		}
 	} END_FOR_PIXEL_WINDOW
 
-	if(kernel_data.integrator.use_collaborative_filtering) {
+	if(kernel_data.integrator.use_gradients) {
 		FOR_PIXEL_WINDOW {
 			float3 color = filter_get_pixel_color(pixel_buffer, pass_stride);
 			float variance = filter_get_pixel_variance(pixel_buffer, pass_stride);
@@ -537,11 +537,11 @@ ccl_device void kernel_filter_final_pass_nlm(KernelGlobals *kg, int sample, floa
 		for(int col = 0; col < row; col++)
 			XtX[row*matrix_size+col] = 0.0f;
 
-	/* When using collaborative filtering, we need to solve for the intercept and gradients.
+	/* When using gradients for filtering, we need to solve for the intercept and gradients.
 	 * Otherwise, just the intercept is enough. */
-	int solution_size = kernel_data.integrator.use_collaborative_filtering? matrix_size : 1;
+	int solution_size = kernel_data.integrator.use_gradients? matrix_size : 1;
 	float XtWXinv[(DENOISE_FEATURES+1)*(DENOISE_FEATURES+1)];
-	if(kernel_data.integrator.use_collaborative_filtering)
+	if(kernel_data.integrator.use_gradients)
 		math_matrix_zero(XtWXinv, matrix_size);
 	else
 		math_vector_zero(XtWXinv, matrix_size);
@@ -580,7 +580,7 @@ ccl_device void kernel_filter_final_pass_nlm(KernelGlobals *kg, int sample, floa
 		}
 	} END_FOR_PIXEL_WINDOW
 
-	if(kernel_data.integrator.use_collaborative_filtering) {
+	if(kernel_data.integrator.use_gradients) {
 		FOR_PIXEL_WINDOW {
 			float weight;
 			if(cache_idx < WEIGHT_CACHE_SIZE) {
@@ -1310,11 +1310,11 @@ ccl_device void kernel_filter_final_pass_wlr(KernelGlobals *kg, int sample, floa
 		for(int col = 0; col < row; col++)
 			XtX[row*matrix_size+col] = 0.0f;
 
-	/* When using collaborative filtering, we need to solve for the intercept and gradients.
+	/* When using gradients for filtering, we need to solve for the intercept and gradients.
 	 * Otherwise, just the intercept is enough. */
-	int solution_size = kernel_data.integrator.use_collaborative_filtering? matrix_size : 1;
+	int solution_size = kernel_data.integrator.use_gradients? matrix_size : 1;
 	float XtWXinv[(DENOISE_FEATURES+1)*(DENOISE_FEATURES+1)];
-	if(kernel_data.integrator.use_collaborative_filtering)
+	if(kernel_data.integrator.use_gradients)
 		math_matrix_zero(XtWXinv, matrix_size);
 	else
 		math_vector_zero(XtWXinv, matrix_size);
@@ -1343,7 +1343,7 @@ ccl_device void kernel_filter_final_pass_wlr(KernelGlobals *kg, int sample, floa
 		}
 	} END_FOR_PIXEL_WINDOW
 
-	if(kernel_data.integrator.use_collaborative_filtering) {
+	if(kernel_data.integrator.use_gradients) {
 		FOR_PIXEL_WINDOW {
 			float3 color = filter_get_pixel_color(pixel_buffer, pass_stride);
 			float variance = filter_get_pixel_variance(pixel_buffer, pass_stride);
@@ -1460,9 +1460,9 @@ ccl_device void kernel_filter_final_pass_nlm(KernelGlobals *kg, int sample, floa
 		for(int col = 0; col < row; col++)
 			XtX[row*matrix_size+col] = 0.0f;
 
-	int solution_size = kernel_data.integrator.use_collaborative_filtering? matrix_size : 1;
+	int solution_size = kernel_data.integrator.use_gradients? matrix_size : 1;
 	float XtWXinv[(DENOISE_FEATURES+1)*(DENOISE_FEATURES+1)];
-	if(kernel_data.integrator.use_collaborative_filtering)
+	if(kernel_data.integrator.use_gradients)
 		math_matrix_zero(XtWXinv, matrix_size);
 	else
 		math_vector_zero(XtWXinv, matrix_size);
@@ -1489,9 +1489,9 @@ ccl_device void kernel_filter_final_pass_nlm(KernelGlobals *kg, int sample, floa
 		}
 	} END_FOR_PIXEL_WINDOW
 
-	if(kernel_data.integrator.use_collaborative_filtering) {
+	if(kernel_data.integrator.use_gradients) {
 		FOR_PIXEL_WINDOW {
-			/* TODO: Atomics to be able to collaborate across tiles. */
+			/* TODO: Atomics to be able to use gradients across tiles. */
 			if(py >= filter_area.y && py < filter_area.y+filter_area.w && px >= filter_area.x && px < filter_area.x+filter_area.z) {
 				float weight = weight_cache[cache_idx];
 				if(weight == 0.0f) continue;
diff --git a/intern/cycles/kernel/kernel_filter_pre.h b/intern/cycles/kernel/kernel_filter_pre.h
index d9edd58..2b272a9 100644
--- a/intern/cycles/kernel/kernel_filter_pre.h
+++ b/intern/cycles/kernel/kernel_filter_pre.h
@@ -32,7 +32,7 @@ ccl_device void kernel_filter_divide_shadow(KernelGlobals *kg, int sample, float
 	int tile = ytile*3+xtile;
 	float *center_buffer = buffers[tile] + (offset[tile] + y*stride[tile] + x)*kernel_data.film.pass_stride;
 
-	if(kernel_data.integrator.use_collaborative_filtering && tile == 4) {
+	if(kernel_data.integrator.use_gradients && tile == 4) {
 		center_buffer[0] = center_buffer[1] = center_buffer[2] = center_buffer[3] = 0.0f;
 	}
 	center_buffer += kernel_data.film.pass_denoising;
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 4ffa03d..51f9f7e 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -1163,7 +1163,7 @@ typedef struct KernelIntegrator {
 	int half_window;
 	float filter_strength;
 	float weighting_adjust;
-	int use_collaborative_filtering;
+	int use_gradients;
 	int use_nlm_weights;
 } KernelIntegrator;
 static_assert_align(KernelIntegrator, 16);
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp
index f1e84e6..cf82667 100644
--- a/intern/cycles/render/integrator.cpp
+++ b/intern/cycles/render/integrator.cpp
@@ -81,7 +81,7 @@ NODE_DEFINE(Integrator)
 	SOCKET_FLOAT(filter_strength, "Filter Strength", 0.0f);
 	SOCKET_FLOAT(weighting_adjust, "Weighting Adjust", 1.0f);
 	SOCKET_BOOLEAN(use_nlm_weights, "Use NLM weights", true);
-	SOCKET_BOOLEAN(use_collaborative_filtering, "Use Collaborative Filtering", true);
+	SOCKET_BOOLEAN(use_gradients, "Use Gradients for filtering", true);
 
 	return type;
 }
@@ -212,7 +212,7 @@ void Integrator::device_update(Device *device, DeviceScene *dscene, Scene *scene
 	kintegrator->half_window = half_window;
 	kintegrator->filter_strength = filter_strength;
 	kintegrator->weighting_adjust = weighting_adjust;
-	kintegrator->use_collaborative_filtering = use_collaborative_filtering;
+	kintegrator->use_gradients = use_gradients;
 	kintegrator->use_nlm_weights = use_nlm_weights;
 
 	need_update = false;
diff --git a/intern/cycles/rende

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list