Commit: e855dede3881106194cb8fdfdaced0dde0b4ac01
Author: Lukas Stockner
Date:   Fri May 27 15:24:45 2016 +0200
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rBe855dede3881106194cb8fdfdaced0dde0b4ac01

Cycles Denoising: Implement the denoising data render passes in Cycles

The parameters aren't set anywhere yet since that requires them to be added to 
the RenderLayer first.

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

M       intern/cycles/kernel/kernel_types.h
M       intern/cycles/render/buffers.cpp
M       intern/cycles/render/buffers.h
M       intern/cycles/render/film.cpp
M       intern/cycles/render/film.h

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

diff --git a/intern/cycles/kernel/kernel_types.h 
b/intern/cycles/kernel/kernel_types.h
index 02e69c7..613a3db 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -1021,6 +1021,11 @@ typedef struct KernelFilm {
        float mist_inv_depth;
        float mist_falloff;
 
+       int pass_denoising;
+       int pass_no_denoising;
+       int pass_pad4;
+       int pass_pad5;
+
 #ifdef __KERNEL_DEBUG__
        int pass_bvh_traversal_steps;
        int pass_bvh_traversed_instances;
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp
index 558f5e5..5ad1e18 100644
--- a/intern/cycles/render/buffers.cpp
+++ b/intern/cycles/render/buffers.cpp
@@ -42,6 +42,9 @@ BufferParams::BufferParams()
        full_width = 0;
        full_height = 0;
 
+       denoising_passes = false;
+       selective_denoising = false;
+
        Pass::add(PASS_COMBINED, passes);
 }
 
@@ -68,7 +71,13 @@ int BufferParams::get_passes_size()
 
        foreach(Pass& pass, passes)
                size += pass.components;
-       
+
+       if(denoising_passes) {
+               /* Feature passes: 7 Channels (3 Color, 3 Normal, 1 Depth) + 7 
Variance
+                * Color passes: 3 Noisy (RGB) + 3 Variance [+ 3 Skip (RGB)] */
+               size += selective_denoising? 23: 20;
+       }
+
        return align_up(size, 4);
 }
 
diff --git a/intern/cycles/render/buffers.h b/intern/cycles/render/buffers.h
index dca2d1d..0188712 100644
--- a/intern/cycles/render/buffers.h
+++ b/intern/cycles/render/buffers.h
@@ -51,6 +51,9 @@ public:
 
        /* passes */
        vector<Pass> passes;
+       bool denoising_passes;
+       /* If only some light path types should be denoised, an additional pass 
is needed. */
+       bool selective_denoising;
 
        /* functions */
        BufferParams();
diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index 95cb10a..e8dc220 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -267,6 +267,8 @@ Film::Film()
 {
        exposure = 0.8f;
        Pass::add(PASS_COMBINED, passes);
+       denoising_passes = false;
+       selective_denoising = false;
        pass_alpha_threshold = 0.5f;
 
        filter_type = FILTER_BOX;
@@ -423,6 +425,15 @@ void Film::device_update(Device *device, DeviceScene 
*dscene, Scene *scene)
                kfilm->pass_stride += pass.components;
        }
 
+       if(denoising_passes) {
+               kfilm->pass_denoising = kfilm->pass_stride;
+               kfilm->pass_stride += 20;
+               if(selective_denoising) {
+                       kfilm->pass_no_denoising = kfilm->pass_stride;
+                       kfilm->pass_stride += 3;
+               }
+       }
+
        kfilm->pass_stride = align_up(kfilm->pass_stride, 4);
        kfilm->pass_alpha_threshold = pass_alpha_threshold;
 
@@ -457,7 +468,9 @@ bool Film::modified(const Film& film)
                && filter_width == film.filter_width
                && mist_start == film.mist_start
                && mist_depth == film.mist_depth
-               && mist_falloff == film.mist_falloff);
+               && mist_falloff == film.mist_falloff
+               && denoising_passes == film.denoising_passes
+               && selective_denoising == film.selective_denoising);
 }
 
 void Film::tag_passes_update(Scene *scene, const vector<Pass>& passes_)
diff --git a/intern/cycles/render/film.h b/intern/cycles/render/film.h
index 966e00a..5871499 100644
--- a/intern/cycles/render/film.h
+++ b/intern/cycles/render/film.h
@@ -53,6 +53,8 @@ class Film {
 public:
        float exposure;
        vector<Pass> passes;
+       bool denoising_passes;
+       bool selective_denoising;
        float pass_alpha_threshold;
 
        FilterType filter_type;

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

Reply via email to