[Bf-blender-cvs] [b920d57] soc-2016-cycles_denoising: Cycles: Allow to use the NLM-weighted first-order regression filtering

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


Commit: b920d57e512028a98ed60dae6352f09c325ad56c
Author: Lukas Stockner
Date:   Mon Nov 14 12:23:57 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rBb920d57e512028a98ed60dae6352f09c325ad56c

Cycles: Allow to use the NLM-weighted first-order regression filtering

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

M	intern/cycles/device/device_cpu.cpp

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

diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 3057d66..00fef00 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -431,6 +431,7 @@ public:
 	void denoise_run(KernelGlobals *kg, int sample, float *filter_buffer, int4 filter_area, int4 rect, int offset, int stride, float *buffers)
 	{
 		bool old_filter = getenv("OLD_FILTER");
+		bool only_nlm_filter = getenv("ONLY_NLM_FILTER");
 		bool nlm_filter = getenv("NLM_FILTER");
 
 		FilterStorage *storage = new FilterStorage[filter_area.z*filter_area.w];
@@ -469,7 +470,7 @@ public:
 #undef WRITE_DEBUG
 #endif
 		}
-		else if(nlm_filter) {
+		else if(only_nlm_filter) {
 			float *img[3] = {filter_buffer + 16*pass_stride, filter_buffer + 18*pass_stride, filter_buffer + 20*pass_stride};
 			float *var[3] = {filter_buffer + 17*pass_stride, filter_buffer + 19*pass_stride, filter_buffer + 21*pass_stride};
 			float *out[3] = {filter_buffer +  0*pass_stride, filter_buffer +  1*pass_stride, filter_buffer +  2*pass_stride};
@@ -490,6 +491,18 @@ public:
 				}
 			}
 		}
+		else if(nlm_filter) {
+			for(int y = 0; y < filter_area.w; y++) {
+				for(int x = 0; x < filter_area.z; x++) {
+					filter_construct_transform_kernel()(kg, sample, filter_buffer, x + filter_area.x, y + filter_area.y, storage + y*filter_area.z + x, &rect.x);
+				}
+			}
+			for(int y = 0; y < filter_area.w; y++) {
+				for(int x = 0; x < filter_area.z; x++) {
+					filter_final_pass_nlm_kernel()(kg, sample, filter_buffer, x + filter_area.x, y + filter_area.y, offset, stride, buffers, storage + y*filter_area.z + x, &filter_area.x, &rect.x);
+				}
+			}
+		}
 		else {
 			for(int y = 0; y < filter_area.w; y++) {
 				for(int x = 0; x < filter_area.z; x++) {




More information about the Bf-blender-cvs mailing list