[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