[Bf-blender-cvs] [8e1e90d] soc-2016-cycles_denoising: Cycles: Fix selective denoising

Lukas Stockner noreply at git.blender.org
Thu Nov 24 03:18:32 CET 2016


Commit: 8e1e90d8795f7a512d3b2d620801cae620ee17fa
Author: Lukas Stockner
Date:   Tue Nov 22 19:35:45 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB8e1e90d8795f7a512d3b2d620801cae620ee17fa

Cycles: Fix selective denoising

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

M	intern/cycles/kernel/filter/filter.h
M	intern/cycles/kernel/filter/filter_final_pass_impl.h

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

diff --git a/intern/cycles/kernel/filter/filter.h b/intern/cycles/kernel/filter/filter.h
index 1f5d682..ae94526 100644
--- a/intern/cycles/kernel/filter/filter.h
+++ b/intern/cycles/kernel/filter/filter.h
@@ -110,9 +110,17 @@ CCL_NAMESPACE_BEGIN
 
 ccl_device void kernel_filter_divide_combined(KernelGlobals *kg, int x, int y, int sample, float *buffers, int offset, int stride)
 {
-	float4 *combined_buffer = (float4*) (buffers + (offset + y*stride + x)*kernel_data.film.pass_stride);
-	float fac = sample / combined_buffer->w;
-	*combined_buffer = *combined_buffer * fac;
+	float *combined_buffer = buffers + (offset + y*stride + x)*kernel_data.film.pass_stride;
+	float fac = sample / combined_buffer[3];
+	combined_buffer[0] *= fac;
+	combined_buffer[1] *= fac;
+	combined_buffer[2] *= fac;
+	combined_buffer[3] *= fac;
+	if(kernel_data.film.pass_no_denoising) {
+		combined_buffer[0] += combined_buffer[kernel_data.film.pass_no_denoising+0];
+		combined_buffer[1] += combined_buffer[kernel_data.film.pass_no_denoising+1];
+		combined_buffer[2] += combined_buffer[kernel_data.film.pass_no_denoising+2];
+	}
 }
 
 CCL_NAMESPACE_END
\ No newline at end of file
diff --git a/intern/cycles/kernel/filter/filter_final_pass_impl.h b/intern/cycles/kernel/filter/filter_final_pass_impl.h
index 7f6ccbf..19c4633 100644
--- a/intern/cycles/kernel/filter/filter_final_pass_impl.h
+++ b/intern/cycles/kernel/filter/filter_final_pass_impl.h
@@ -214,9 +214,15 @@ ccl_device void FUNCTION_NAME(KernelGlobals *kg, int sample, float ccl_readonly_
 		} END_FOR_PIXEL_WINDOW
 	}
 	else {
-		float3 final_color = sample*solution[0];
+		float3 final_color = solution[0];
 #ifdef OUTPUT_RENDERBUFFER
 		float *combined_buffer = buffers + (offset + y*stride + x)*kernel_data.film.pass_stride;
+		final_color *= sample;
+		if(kernel_data.film.pass_no_denoising) {
+			final_color.x += combined_buffer[kernel_data.film.pass_no_denoising+0];
+			final_color.y += combined_buffer[kernel_data.film.pass_no_denoising+1];
+			final_color.z += combined_buffer[kernel_data.film.pass_no_denoising+2];
+		}
 		combined_buffer[0] = final_color.x;
 		combined_buffer[1] = final_color.y;
 		combined_buffer[2] = final_color.z;




More information about the Bf-blender-cvs mailing list