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;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs