[Bf-blender-cvs] [50ecf443918] temp_cryptomatte: Merge branch 'master' of git.blender.org:blender into master_temp-cryptomatte
Stefan Werner
noreply at git.blender.org
Fri Nov 3 21:10:14 CET 2017
Commit: 50ecf44391811ca19da719bc259915edf84d0395
Author: Stefan Werner
Date: Fri Nov 3 20:25:37 2017 +0100
Branches: temp_cryptomatte
https://developer.blender.org/rB50ecf44391811ca19da719bc259915edf84d0395
Merge branch 'master' of git.blender.org:blender into master_temp-cryptomatte
===================================================================
===================================================================
diff --cc intern/cycles/blender/addon/ui.py
index 9c2e2090b40,67f1029acb9..b477acb9d5e
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@@ -433,47 -428,14 +428,53 @@@ class CYCLES_RENDER_PT_performance(Cycl
row.active = not cscene.debug_use_spatial_splits
row.prop(cscene, "debug_bvh_time_steps")
+class CyclesRender_AOV_add(bpy.types.Operator):
+ """Add an AOV pass"""
+ bl_idname="scenerenderlayer.aov_add"
+ bl_label="Add AOV"
+
+ def execute(self, context):
+ scene = context.scene
+ rd = scene.render
+ rl = rd.layers.active
+ crl = rl.cycles
+
+ crl.aovs.add()
+
+ rl.update_render_passes()
+ return {'FINISHED'}
+
+class CyclesRender_AOV_delete(bpy.types.Operator):
+ """Delete an AOV pass"""
+ bl_idname="scenerenderlayer.aov_delete"
+ bl_label="Delete AOV"
+
+ def execute(self, context):
+ scene = context.scene
+ rd = scene.render
+ rl = rd.layers.active
+ crl = rl.cycles
+
+ crl.aovs.remove(crl.active_aov)
+
+ rl.update_render_passes()
+ return {'FINISHED'}
+
+class CyclesAOVList(bpy.types.UIList):
+ def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
+ row = layout.row()
+ row.label("", icon='RENDER_RESULT')
+ split = row.split(percentage=0.65, align=True)
+ split.prop(item, "name", text="")
+ split.prop(item, "type", text="")
+ col = layout.column()
+ col.label(text="Viewport Resolution:")
+ split = col.split()
+ split.prop(rd, "preview_pixel_size", text="")
+ split.prop(cscene, "preview_start_resolution")
+
- class CyclesRender_PT_layer_options(CyclesButtonsPanel, Panel):
+ class CYCLES_RENDER_PT_layer_options(CyclesButtonsPanel, Panel):
bl_label = "Layer"
bl_context = "render_layer"
@@@ -582,27 -544,8 +583,27 @@@ class CYCLES_RENDER_PT_layer_passes(Cyc
col.prop(crl, "pass_debug_bvh_intersections")
col.prop(crl, "pass_debug_ray_bounces")
+ crl = rl.cycles
+ layout.label("Cryptomatte:")
+ row = layout.row(align=True)
+ row.prop(crl, "use_pass_crypto_object", text="Object", toggle=True)
+ row.prop(crl, "use_pass_crypto_material", text="Material", toggle=True)
+ row.prop(crl, "use_pass_crypto_asset", text="Asset", toggle=True)
+ row = layout.row(align=True)
+ row.active = use_cpu(context)
+ row.prop(crl, "pass_crypto_accurate", text="Accurate Mode")
+ row = layout.row(align=True)
+ row.prop(crl, "pass_crypto_depth")
+
+ layout.label("AOVs:")
+ row = layout.row()
+ row.template_list("CyclesAOVList", "", crl, "aovs", crl, "active_aov")
+ sub = row.column(align=True)
+ sub.operator("scenerenderlayer.aov_add", icon='ZOOMIN', text="")
+ sub.operator("scenerenderlayer.aov_delete", icon='ZOOMOUT', text="")
+
- class CyclesRender_PT_views(CyclesButtonsPanel, Panel):
+ class CYCLES_RENDER_PT_views(CyclesButtonsPanel, Panel):
bl_label = "Views"
bl_context = "render_layer"
bl_options = {'DEFAULT_CLOSED'}
diff --cc intern/cycles/blender/blender_session.cpp
index a9709587ee7,d9301125641..b5e623f3105
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@@ -398,13 -400,27 +400,14 @@@ void BlenderSession::render(
BL::RenderLayer b_rlay = *b_single_rlay;
- /* add passes */
- array<Pass> passes = sync->sync_render_passes(b_rlay, *b_layer_iter, session_params);
- buffer_params.passes = passes;
+ sync->sync_film(b_rlay, *b_layer_iter, session_params);
+ buffer_params.passes = scene->film->passes;
PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles");
- bool use_denoising = !session_params.progressive_refine && get_boolean(crl, "use_denoising");
++
+ bool use_denoising = get_boolean(crl, "use_denoising");
- buffer_params.denoising_data_pass = use_denoising;
session->tile_manager.schedule_denoising = use_denoising;
session->params.use_denoising = use_denoising;
- scene->film->denoising_data_pass = buffer_params.denoising_data_pass;
- scene->film->denoising_flags = 0;
- if(!get_boolean(crl, "denoising_diffuse_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_DIR;
- if(!get_boolean(crl, "denoising_diffuse_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_IND;
- if(!get_boolean(crl, "denoising_glossy_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_DIR;
- if(!get_boolean(crl, "denoising_glossy_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_IND;
- if(!get_boolean(crl, "denoising_transmission_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_DIR;
- if(!get_boolean(crl, "denoising_transmission_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_IND;
- if(!get_boolean(crl, "denoising_subsurface_direct")) scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_DIR;
- if(!get_boolean(crl, "denoising_subsurface_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_IND;
- scene->film->denoising_clean_pass = (scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
- buffer_params.denoising_clean_pass = scene->film->denoising_clean_pass;
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 --cc intern/cycles/blender/blender_sync.cpp
index ef0f324b7dd,b070bf89d44..539772cfa57
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@@ -552,130 -547,64 +547,130 @@@ int BlenderSync::get_denoising_pass(BL:
return -1;
}
-array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
- BL::SceneRenderLayer& b_srlay,
- const SessionParams &session_params)
+void BlenderSync::sync_film(BL::RenderLayer& b_rlay,
+ BL::SceneRenderLayer& b_srlay,
+ const SessionParams &session_params)
{
- array<Pass> passes;
- Pass::add(PASS_COMBINED, passes);
+ PassSettings passes;
+ PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles");
- if(!session_params.device.advanced_shading) {
- return passes;
- }
+ if(session_params.device.advanced_shading) {
+ /* loop over passes */
+ BL::RenderLayer::passes_iterator b_pass_iter;
- /* 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 = get_pass_type(b_pass);
- 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 = get_pass_type(b_pass);
+ if(pass_type == PASS_MOTION && scene->integrator->motion_blur)
+ continue;
+ if(pass_type != PASS_NONE)
+ passes.add(pass_type);
+ }
- if(pass_type == PASS_MOTION && scene->integrator->motion_blur)
- continue;
- if(pass_type != PASS_NONE)
- Pass::add(pass_type, passes);
- }
+ /* make Crypto passes appear before user defined AOVs
+ * that way, their indices are known */
+
+ int crypto_depth = std::min(16, get_int(crp, "pass_crypto_depth")) / 2;
+ scene->film->use_cryptomatte = crypto_depth;
+
+ if(get_boolean(crp, "use_pass_crypto_object")) {
+ for(int i = 0; i < crypto_depth; ++i) {
+ string passname = string_printf("uCryptoObject%02d", i);
+ AOV aov = {ustring(passname), 9999, AOV_CRYPTOMATTE};
+ passes.add(aov);
+ passname = "AOV " + passname;
+ b_engine.add_pass(passname.c_str(), 4, "RGBA", b_srlay.name().c_str());
+ }
+ scene->film->use_cryptomatte |= CRYPT_OBJECT;
+ }
+
+ if(get_boolean(crp, "use_pass_crypto_material")) {
+ for(int i = 0; i < crypto_depth; ++i) {
+ string passname = string_printf("uCryptoMaterial%02d", i);
+ AOV aov = {ustring(passname), 9999, AOV_CRYPTOMATTE};
+ passes.add(aov);
+ passname = "AOV " + passname;
+ b_engine.add_pass(passname.c_str(), 4, "RGBA", b_srlay.name().c_str());
+ }
+ scene->film->use_cryptomatte |= CRYPT_MATERIAL;
+ }
- PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles");
- if(get_boolean(crp, "denoising_store_passes") &&
- get_boolean(crp, "use_denoising")) {
- 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", 3, "RGB", b_srlay.name().c_str());
- b_engine.add_pass("Denoising Image Variance", 3, "RGB", b_srlay.name().c_str());
- }
+ if(get_boolean(crp, "use_pass_crypto_asset")) {
+ for(int i = 0; i < crypto_depth; ++i) {
+ string passname = string_printf("uCryptoAsset%02d", i);
+ AOV aov = {ustring(passname), 9999, AOV_CRYPTOMATTE};
+ passes.add(aov);
+ passname = "AOV " + passname;
+ b_engine.add_pass(passname.c_str(), 4, "RGBA", b_srlay.name().c_str());
+ }
+ scene->film->use_cryptomatte |= CRYPT_ASSET;
+ }
+ if(get_boolean(crp, "pass_crypto_accurate")) {
+ scene->film->use_cryptomatte |= CRYPT_ACCURATE;
+ }
+
+ RNA_BEGIN(&crp, b_aov, "aovs") {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list