Cycles: add object level holdout property, to replace Z mask layer.

This commit is contained in:
Brecht Van Lommel
2017-11-18 06:06:27 +01:00
parent d992240bfa
commit f8fc77ec84
3 changed files with 15 additions and 3 deletions

View File

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

View File

@@ -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:")

View File

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