[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