Commit: e3817e5ec179f24b18d58ac60fe0b0969887544e
Author: Lukas Stockner
Date:   Mon Oct 29 15:45:58 2018 +0100
Branches: master
https://developer.blender.org/rBe3817e5ec179f24b18d58ac60fe0b0969887544e

Cycles: Support generating Denoising passes without actually denoising

Needed for the animation denoiser since the denoising filter is done separately 
there.

Reviewers: brecht, sergey

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D3833

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

M       intern/cycles/blender/addon/engine.py
M       intern/cycles/blender/addon/ui.py
M       intern/cycles/blender/blender_session.cpp
M       intern/cycles/blender/blender_sync.cpp
M       intern/cycles/render/session.cpp
M       intern/cycles/render/session.h

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

diff --git a/intern/cycles/blender/addon/engine.py 
b/intern/cycles/blender/addon/engine.py
index 2cdeb97a32d..55638415e66 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -265,7 +265,7 @@ def register_passes(engine, scene, srl):
         for i in range(0, srl.cycles.pass_crypto_depth, 2):
             engine.register_pass(scene, srl, "CryptoAsset" + 
'{:02d}'.format(i), 4, "RGBA", 'COLOR')
 
-    if crl.use_denoising:
+    if crl.use_denoising or crl.denoising_store_passes:
         engine.register_pass(scene, srl, "Noisy Image", 3, "RGBA", 'COLOR')
         if crl.denoising_store_passes:
             engine.register_pass(scene, srl, "Denoising Normal",          3, 
"XYZ", 'VECTOR')
diff --git a/intern/cycles/blender/addon/ui.py 
b/intern/cycles/blender/addon/ui.py
index 6f11d3c313d..0fdefe5d442 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -517,6 +517,8 @@ class CYCLES_RENDER_PT_layer_passes(CyclesButtonsPanel, 
Panel):
         col.prop(rl, "use_pass_shadow")
         col.prop(rl, "use_pass_ambient_occlusion")
         col.separator()
+        col.prop(crl, "denoising_store_passes", text="Denoising Data")
+        col.separator()
         col.prop(rl, "pass_alpha_threshold")
 
         col = split.column()
@@ -549,12 +551,6 @@ class CYCLES_RENDER_PT_layer_passes(CyclesButtonsPanel, 
Panel):
         col.prop(rl, "use_pass_emit", text="Emission")
         col.prop(rl, "use_pass_environment")
 
-        if context.scene.cycles.feature_set == 'EXPERIMENTAL':
-            col.separator()
-            sub = col.column()
-            sub.active = crl.use_denoising
-            sub.prop(crl, "denoising_store_passes", text="Denoising")
-
         col = layout.column()
         col.prop(crl, "pass_debug_render_time")
         if _cycles.with_cycles_debug:
@@ -641,9 +637,8 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
         rl = rd.layers.active
         crl = rl.cycles
 
-        layout.active = crl.use_denoising
-
         split = layout.split()
+        split.active = crl.use_denoising
 
         col = split.column()
         sub = col.column(align=True)
@@ -658,24 +653,28 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, 
Panel):
         layout.separator()
 
         row = layout.row()
+        row.active = crl.use_denoising or crl.denoising_store_passes
         row.label(text="Diffuse:")
         sub = row.row(align=True)
         sub.prop(crl, "denoising_diffuse_direct", text="Direct", toggle=True)
         sub.prop(crl, "denoising_diffuse_indirect", text="Indirect", 
toggle=True)
 
         row = layout.row()
+        row.active = crl.use_denoising or crl.denoising_store_passes
         row.label(text="Glossy:")
         sub = row.row(align=True)
         sub.prop(crl, "denoising_glossy_direct", text="Direct", toggle=True)
         sub.prop(crl, "denoising_glossy_indirect", text="Indirect", 
toggle=True)
 
         row = layout.row()
+        row.active = crl.use_denoising or crl.denoising_store_passes
         row.label(text="Transmission:")
         sub = row.row(align=True)
         sub.prop(crl, "denoising_transmission_direct", text="Direct", 
toggle=True)
         sub.prop(crl, "denoising_transmission_indirect", text="Indirect", 
toggle=True)
 
         row = layout.row()
+        row.active = crl.use_denoising or crl.denoising_store_passes
         row.label(text="Subsurface:")
         sub = row.row(align=True)
         sub.prop(crl, "denoising_subsurface_direct", text="Direct", 
toggle=True)
diff --git a/intern/cycles/blender/blender_session.cpp 
b/intern/cycles/blender/blender_session.cpp
index e9e14a9b6c9..e05351eea40 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -410,12 +410,14 @@ void BlenderSession::render()
 
                PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles");
                bool use_denoising = get_boolean(crl, "use_denoising");
+               bool denoising_passes = use_denoising || get_boolean(crl, 
"denoising_store_passes");
 
                session->tile_manager.schedule_denoising = use_denoising;
-               buffer_params.denoising_data_pass = use_denoising;
+               buffer_params.denoising_data_pass = denoising_passes;
                buffer_params.denoising_clean_pass = 
(scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
 
                session->params.use_denoising = use_denoising;
+               session->params.denoising_passes = denoising_passes;
                session->params.denoising_radius = get_int(crl, 
"denoising_radius");
                session->params.denoising_strength = get_float(crl, 
"denoising_strength");
                session->params.denoising_feature_strength = get_float(crl, 
"denoising_feature_strength");
diff --git a/intern/cycles/blender/blender_sync.cpp 
b/intern/cycles/blender/blender_sync.cpp
index 076734d105f..70bb6de8b1d 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -578,10 +578,11 @@ vector<Pass> 
BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
                        Pass::add(pass_type, passes);
        }
 
-       scene->film->denoising_flags = 0;
        PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles");
-       if(get_boolean(crp, "use_denoising"))
-       {
+       bool use_denoising = get_boolean(crp, "use_denoising");
+       bool store_denoising_passes = get_boolean(crp, 
"denoising_store_passes");
+       scene->film->denoising_flags = 0;
+       if(use_denoising || store_denoising_passes) {
 #define MAP_OPTION(name, flag) if(!get_boolean(crp, name)) 
scene->film->denoising_flags |= flag;
                MAP_OPTION("denoising_diffuse_direct",        
DENOISING_CLEAN_DIFFUSE_DIR);
                MAP_OPTION("denoising_diffuse_indirect",      
DENOISING_CLEAN_DIFFUSE_IND);
@@ -592,22 +593,22 @@ vector<Pass> 
BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
                MAP_OPTION("denoising_subsurface_direct",     
DENOISING_CLEAN_SUBSURFACE_DIR);
                MAP_OPTION("denoising_subsurface_indirect",   
DENOISING_CLEAN_SUBSURFACE_IND);
 #undef MAP_OPTION
-
                b_engine.add_pass("Noisy Image", 4, "RGBA", 
b_srlay.name().c_str());
-               if(get_boolean(crp, "denoising_store_passes")) {
-                       b_engine.add_pass("Denoising Normal",          3, 
"XYZ", b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Normal Variance", 3, 
"XYZ", b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Albedo",          3, 
"RGB", b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Albedo Variance", 3, 
"RGB", b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Depth",           1, "Z",  
 b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Depth Variance",  1, "Z",  
 b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Shadow A",        3, 
"XYV", b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Shadow B",        3, 
"XYV", b_srlay.name().c_str());
-                       b_engine.add_pass("Denoising Image Variance",  3, 
"RGB", b_srlay.name().c_str());
-
-                       if(scene->film->denoising_flags & 
DENOISING_CLEAN_ALL_PASSES) {
-                               b_engine.add_pass("Denoising Clean",   3, 
"RGB", b_srlay.name().c_str());
-                       }
+       }
+
+       if(store_denoising_passes) {
+               b_engine.add_pass("Denoising Normal",          3, "XYZ", 
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Normal Variance", 3, "XYZ", 
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Albedo",          3, "RGB", 
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Albedo Variance", 3, "RGB", 
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Depth",           1, "Z",   
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Depth Variance",  1, "Z",   
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Shadow A",        3, "XYV", 
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Shadow B",        3, "XYV", 
b_srlay.name().c_str());
+               b_engine.add_pass("Denoising Image Variance",  3, "RGB", 
b_srlay.name().c_str());
+
+               if(scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES) {
+                       b_engine.add_pass("Denoising Clean",   3, "RGB", 
b_srlay.name().c_str());
                }
        }
 #ifdef __KERNEL_DEBUG__
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index 8bc175a094d..d6ecafa19b7 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -682,7 +682,7 @@ DeviceRequestedFeatures 
Session::get_requested_device_features()
        BakeManager *bake_manager = scene->bake_manager;
        requested_features.use_baking = bake_manager->get_baking();
        requested_features.use_integrator_branched = (scene->integrator->method 
== Integrator::BRANCHED_PATH);
-       if(params.use_denoising) {
+       if(params.denoising_passes) {
                requested_features.use_denoising = true;
                requested_features.use_shadow_tricks = true;
        }
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index 61f62f8e712..d2ec13ada1f 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -58,6 +58,7 @@ public:
        bool display_buffer_linear;
 
        bool use_denoising;
+       bool denoising_passes;
        int denoising_radius;
        float denoising_strength;
        float denoising_feature_strength;
@@ -89,6 +90,7 @@ public:
                threads = 0;
 
                use_denoising = false;
+               denoising_passes = false;
                denoising_radius = 8;
                denoising_strength = 0.0f;
                denoising_feature_strength = 0.0f;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to