Commit: 1049ea8476dc3644989caa078f3d64bf67c1efee
Author: Lukas Stockner
Date:   Wed Jan 18 23:53:24 2017 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rB1049ea8476dc3644989caa078f3d64bf67c1efee

Cycles/Render API: Get rid of Render Pass flags and port Denoising passes to 
the new system

This also means that the temporary uint64_t passflag hack is removed now.

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

M       intern/cycles/blender/addon/properties.py
M       intern/cycles/blender/addon/ui.py
M       intern/cycles/blender/blender_python.cpp
M       intern/cycles/blender/blender_session.cpp
M       intern/cycles/blender/blender_sync.cpp
M       intern/cycles/blender/blender_sync.h
M       intern/cycles/blender/blender_util.h
M       intern/cycles/render/buffers.cpp
M       intern/cycles/render/buffers.h
M       intern/cycles/render/denoising.cpp
M       intern/cycles/render/film.h
M       source/blender/blenkernel/BKE_blender_version.h
M       source/blender/blenkernel/intern/image.c
M       source/blender/blenkernel/intern/scene.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/versioning_270.c
M       source/blender/blenloader/intern/writefile.c
M       source/blender/compositor/CMakeLists.txt
M       source/blender/compositor/intern/COM_NodeGraph.cpp
M       source/blender/compositor/nodes/COM_ImageNode.cpp
M       source/blender/compositor/nodes/COM_RenderLayersNode.cpp
M       source/blender/compositor/nodes/COM_RenderLayersNode.h
M       source/blender/compositor/operations/COM_RenderLayersProg.cpp
M       source/blender/compositor/operations/COM_RenderLayersProg.h
M       source/blender/editors/space_image/image_buttons.c
M       source/blender/editors/space_image/image_ops.c
M       source/blender/editors/space_node/drawnode.c
M       source/blender/editors/space_node/node_edit.c
M       source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
M       source/blender/makesdna/DNA_node_types.h
M       source/blender/makesdna/DNA_scene_types.h
M       source/blender/makesrna/intern/CMakeLists.txt
M       source/blender/makesrna/intern/rna_nodetree.c
M       source/blender/makesrna/intern/rna_render.c
M       source/blender/makesrna/intern/rna_scene.c
M       source/blender/nodes/CMakeLists.txt
M       source/blender/nodes/NOD_composite.h
M       source/blender/nodes/composite/node_composite_tree.c
M       source/blender/nodes/composite/nodes/node_composite_image.c
M       source/blender/render/CMakeLists.txt
M       source/blender/render/extern/include/RE_engine.h
M       source/blender/render/extern/include/RE_pipeline.h
M       source/blender/render/intern/include/render_result.h
M       source/blender/render/intern/source/envmap.c
M       source/blender/render/intern/source/external_engine.c
M       source/blender/render/intern/source/pipeline.c
M       source/blender/render/intern/source/render_result.c
M       source/blender/render/intern/source/rendercore.c
M       source/blender/render/intern/source/zbuf.c
M       source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/intern/cycles/blender/addon/properties.py 
b/intern/cycles/blender/addon/properties.py
index 3616b13e75..ad1ccb476e 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -1136,6 +1136,34 @@ class CyclesCurveRenderSettings(bpy.types.PropertyGroup):
     def unregister(cls):
         del bpy.types.Scene.cycles_curves
 
+class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
+    @classmethod
+    def register(cls):
+        bpy.types.SceneRenderLayer.cycles = PointerProperty(
+                name="Cycles SceneRenderLayer Settings",
+                description="Cycles SceneRenderLayer Settings",
+                type=cls,
+                )
+        cls.pass_debug_bvh_traversal_steps = BoolProperty(
+                name="Debug BVH Traversal Steps",
+                description="Store Debug BVH Traversal Steps pass",
+                default=False,
+                )
+        cls.pass_debug_bvh_traversed_instances = BoolProperty(
+                name="Debug BVH Traversed Instances",
+                description="Store Debug BVH Traversed Instances pass",
+                default=False,
+                )
+        cls.pass_debug_ray_bounces = BoolProperty(
+                name="Debug Ray Bounces",
+                description="Store Debug Ray Bounces pass",
+                default=False,
+                )
+
+    @classmethod
+    def unregister(cls):
+        del bpy.types.SceneRenderLayer.cycles
+
 
 class CyclesCurveSettings(bpy.types.PropertyGroup):
     @classmethod
@@ -1294,6 +1322,7 @@ def register():
     bpy.utils.register_class(CyclesCurveSettings)
     bpy.utils.register_class(CyclesDeviceSettings)
     bpy.utils.register_class(CyclesPreferences)
+    bpy.utils.register_class(CyclesRenderLayerSettings)
 
 
 def unregister():
@@ -1309,3 +1338,4 @@ def unregister():
     bpy.utils.unregister_class(CyclesCurveSettings)
     bpy.utils.unregister_class(CyclesDeviceSettings)
     bpy.utils.unregister_class(CyclesPreferences)
+    bpy.utils.unregister_class(CyclesRenderLayerSettings)
diff --git a/intern/cycles/blender/addon/ui.py 
b/intern/cycles/blender/addon/ui.py
index b1c23609f6..d6463441ad 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -455,11 +455,14 @@ class CyclesRender_PT_layer_passes(CyclesButtonsPanel, 
Panel):
     bl_options = {'DEFAULT_CLOSED'}
 
     def draw(self, context):
+        import _cycles
+
         layout = self.layout
 
         scene = context.scene
         rd = scene.render
         rl = rd.layers.active
+        crl = rl.cycles
 
         split = layout.split()
 
@@ -506,8 +509,11 @@ class CyclesRender_PT_layer_passes(CyclesButtonsPanel, 
Panel):
         col.prop(rl, "use_pass_emit", text="Emission")
         col.prop(rl, "use_pass_environment")
 
-        if hasattr(rd, "debug_pass_type"):
-            layout.prop(rd, "debug_pass_type")
+        if _cycles.with_cycles_debug:
+          col = layout.column()
+          col.prop(crl, "pass_debug_bvh_traversal_steps")
+          col.prop(crl, "pass_debug_bvh_traversed_instances")
+          col.prop(crl, "pass_debug_ray_bounces")
 
 
 class CyclesRender_PT_views(CyclesButtonsPanel, Panel):
diff --git a/intern/cycles/blender/blender_python.cpp 
b/intern/cycles/blender/blender_python.cpp
index 0d90e3aa8a..27a84a255d 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -853,6 +853,14 @@ void *CCL_python_module_init()
        PyModule_AddStringConstant(mod, "osl_version_string", "unknown");
 #endif
 
+#ifdef WITH_CYCLES_DEBUG
+       PyModule_AddObject(mod, "with_cycles_debug", Py_True);
+       Py_INCREF(Py_True);
+#else
+       PyModule_AddObject(mod, "with_cycles_debug", Py_False);
+       Py_INCREF(Py_False);
+#endif
+
 #ifdef WITH_NETWORK
        PyModule_AddObject(mod, "with_network", Py_True);
        Py_INCREF(Py_True);
diff --git a/intern/cycles/blender/blender_session.cpp 
b/intern/cycles/blender/blender_session.cpp
index 4f87a54adf..3c3ad659f3 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -325,14 +325,6 @@ static void end_render_result(BL::RenderEngine& b_engine,
        b_engine.end_result(b_rr, (int)cancel, (int) highlight, 
(int)do_merge_results);
 }
 
-static void add_pass(BL::RenderEngine& b_engine,
-                     int passtype, int channels,
-                     const char *layername,
-                     const char *viewname)
-{
-       b_engine.add_pass(passtype, channels, layername, viewname);
-}
-
 void BlenderSession::do_write_update_render_tile(RenderTile& rtile, bool 
do_update_only, bool highlight)
 {
        BufferParams& params = rtile.buffers->params;
@@ -430,22 +422,11 @@ void BlenderSession::render()
 
                /* add passes */
                array<Pass> passes;
-               Pass::add(PASS_COMBINED, passes);
-
                if(session_params.device.advanced_shading) {
-
-                       /* loop over passes */
-                       BL::RenderLayer::passes_iterator b_pass_iter;
-
-                       for(b_rlay.passes.begin(b_pass_iter); b_pass_iter != 
b_rlay.passes.end(); ++b_pass_iter) {
-                               BL::RenderPass b_pass(*b_pass_iter);
-                               PassType pass_type = 
BlenderSync::get_pass_type(b_pass);
-
-                               if(pass_type == PASS_MOTION && 
scene->integrator->motion_blur)
-                                       continue;
-                               if(pass_type != PASS_NONE)
-                                       Pass::add(pass_type, passes);
-                       }
+                       passes = sync->sync_render_passes(b_rlay, 
*b_layer_iter);
+               }
+               else {
+                       Pass::add(PASS_COMBINED, passes);
                }
 
                buffer_params.passes = passes;
@@ -476,26 +457,6 @@ void BlenderSession::render()
                scene->film->tag_update(scene);
                scene->integrator->tag_update(scene);
 
-               if(b_layer_iter->keep_denoise_data()) {
-                       add_pass(b_engine, SCE_PASS_DENOISE_NORMAL, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_NORMAL_VAR, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_ALBEDO, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_ALBEDO_VAR, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_DEPTH, 1, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_DEPTH_VAR, 1, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_SHADOW_A, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_SHADOW_B, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_NOISY, 3, 
b_rlay_name.c_str(), NULL);
-                       add_pass(b_engine, SCE_PASS_DENOISE_NOISY_VAR, 3, 
b_rlay_name.c_str(), NULL);
-                       if(buffer_params.cross_denoising) {
-                               add_pass(b_engine, SCE_PASS_DENOISE_NOISY_B, 3, 
b_rlay_name.c_str(), NULL);
-                               add_pass(b_engine, 
SCE_PASS_DENOISE_NOISY_B_VAR, 3, b_rlay_name.c_str(), NULL);
-                       }
-                       if(buffer_params.selective_denoising) {
-                               add_pass(b_engine, SCE_PASS_DENOISE_CLEAN, 3, 
b_rlay_name.c_str(), NULL);
-                       }
-               }
-
                int view_index = 0;
                for(b_rr.views.begin(b_view_iter); b_view_iter != 
b_rr.views.end(); ++b_view_iter, ++view_index) {
                        b_rview_name = b_view_iter->name();
@@ -744,20 +705,21 @@ void 
BlenderSession::do_write_update_render_result(BL::RenderResult& b_rr,
                for(b_rlay.passes.begin(b_iter); b_iter != b_rlay.passes.end(); 
++b_iter) {
                        BL::RenderPass b_pass(*b_iter);
 
-                       int extended_type = b_pass.extended_type();
+                       bool success;
                        int components = b_pass.channels();
 
-                       /* copy pixels */
-                       if(extended_type) {
-                               if(!buffers->get_denoising_rect(extended_type, 
exposure, sample, components, rect, &pixels[0]))
-                                       memset(&pixels[0], 0, 
pixels.size()*sizeof(float));
+                       /* find matching pass type */
+                       DenoisingPassType denoising_pass = 
BlenderSync::get_denoising_pass_type(b_pass);
+                       if(denoising_pass != DENOISING_PASS_NONE) {
+                               success = 
buffers->get_denoising_rect(denoising_pass, exposure, sample, components, rect, 
&pixels[0]);
                        }
                        else {
-                               /* find matching pass type */
                                PassType pass_type = 
BlenderSync::get_pass_type(b_pass);
+                               success = buffers->get_pass_rect(pass_type, 
exposure, sample, components, rect, &pixels[0]);
+                       }
 
-                               if(!buffers->get_pass_rect(pass_type, exposure, 
sample, components, rect, &pixels[0]))
-                                       memset(&pixels[0], 0, 
pixels.size()*sizeof(float));
+                       if(!success) {
+                               memset(&pixels[0], 0, 
pixels.size()*sizeof(float));
                        }
 
                        b_pass.rect(&pixels[0]);
@@ -765,7 +727,7 @@ void 
BlenderSession::do_write_update_render_result(BL::RenderResult& b_rr,
        }
        else {
                /* copy combined pass */
-               BL::RenderPass 
b_combined_pass(b_rlay.passes.find_by_type(BL::RenderPass::type_COMBINED, 
b_rview_name.c_str()));
+               BL::RenderPass 
b_combined_pass(b_rlay.passes.find_by_name("Combined", b_rview_name.c_str()));
                if(buffers->get_pass_rect(PASS_COMBINED, exposure, sample, 4, 
rect, &pixels[0]))
                        b_combined_pass.rect(&pixels[0]);
        }
@@ -1422,11 +1384,11 @@ bool can_denoise_render_result(BL::RenderResult& b_rr)
        BL::RenderResult::layers_iterator b_layer_iter;
        BL::RenderLayer::passes_iterator b_pass_iter;
        for(b_rr.layers.begin(b_layer_iter); b_layer_iter != b_rr.layers.end(); 
++b_layer_iter) {
-               int extended_types = 0;
+               int denoising_passes = DENOISING_PASS_NONE;
                for(b_layer_iter->passes.begin(b_pass_iter); b_pass_iter != 
b_layer_iter->passes.end(); ++b_pass_iter) {
-                       extended_types |= b_pass_iter->extended_type();
+                       denoising_passes |= 
BlenderSync::get_denoising_pass_type(*b_pass_iter);
                }
-               if((~extended_types & EX_TYPE_DENOISE_REQUIRED) == 0) {
+               if((~denoising_passes & DENOISING_PASS_REQUIRED) == 0) {
                        return true;
                }
        }
diff --git a/intern/cycles/blender/blender_sync.cpp 
b/intern/cycles/blender/blender_sync.cpp
index 0eea64120b..e44bf6a5b0 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -471,6 +471,135 @@ void BlenderSync::sync_images()
        }
 }
 
+/* Passes */
+PassType BlenderSync::get_pass_type(BL::RenderPass& b_pass)
+{
+       string name = b_pass.passname();
+#define MAP_PASS(passname, passtype) if(name == passname) return passtype;
+       /* NOTE: Keep in sync with defined names from DNA_scene_types.h */
+       MAP_PASS("Combined", PASS_COMBINED);
+       MAP_PASS("Depth", PASS_DEPTH);
+       MAP_PASS("Mist", PASS_MIST);
+       MAP_PASS("Normal", PASS_NORMAL);
+       MAP_PASS("IndexOB", PASS_OBJECT_ID);
+       MAP_PASS("UV", PASS_UV);
+       MAP_PASS("Vector", PASS_MOTI

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to