From f8fc77ec8481fbbe253ec73d701beab278fdeaf3 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 18 Nov 2017 06:06:27 +0100 Subject: [PATCH] Cycles: add object level holdout property, to replace Z mask layer. --- intern/cycles/blender/addon/properties.py | 9 +++++++++ intern/cycles/blender/addon/ui.py | 4 +++- intern/cycles/blender/blender_object.cpp | 5 +++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 3ce8852abc2..43f04bdff7a 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1081,6 +1081,15 @@ class CyclesObjectSettings(bpy.types.PropertyGroup): default=False, ) + cls.is_holdout = BoolProperty( + name="Holdout", + description="Render objects as a holdout or matte, creating a " + "hole in the image with zero alpha, to fill out in " + "compositing with real footange or another render", + default=False, + ) + + @classmethod def unregister(cls): del bpy.types.Object.cycles diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 79ed01191d8..b3b50fd6181 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -841,7 +841,9 @@ class CYCLES_OBJECT_PT_cycles_settings(CyclesButtonsPanel, Panel): if ob.type != 'LAMP': flow.prop(visibility, "shadow") - layout.prop(cob, "is_shadow_catcher") + row = layout.row() + row.prop(cob, "is_shadow_catcher") + row.prop(cob, "is_holdout") col = layout.column() col.label(text="Performance:") diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index d9210585044..0c29c606df8 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -314,7 +314,9 @@ Object *BlenderSync::sync_object(BL::Depsgraph::duplis_iterator& b_dupli_iter, } /* Visibility flags for both parent and child. */ - bool use_holdout = (layer_flag & view_layer.holdout_layer) != 0; + PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles"); + bool use_holdout = (layer_flag & view_layer.holdout_layer) != 0 || + get_boolean(cobject, "is_holdout"); uint visibility = object_ray_visibility(b_ob) & PATH_RAY_ALL_VISIBILITY; if(b_parent.ptr.data != b_ob.ptr.data) { @@ -393,7 +395,6 @@ Object *BlenderSync::sync_object(BL::Depsgraph::duplis_iterator& b_dupli_iter, object_updated = true; } - PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles"); bool is_shadow_catcher = get_boolean(cobject, "is_shadow_catcher"); if(is_shadow_catcher != object->is_shadow_catcher) { object->is_shadow_catcher = is_shadow_catcher;