[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