[Bf-blender-cvs] [1049ea8476] soc-2016-cycles_denoising: Cycles/Render API: Get rid of Render Pass flags and port Denoising passes to the new system

Lukas Stockner noreply at git.blender.org
Fri Jan 20 05:46:44 CET 2017


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. @@




More information about the Bf-blender-cvs mailing list