Cycles: render layer "Exclude Layers" added.

Scene layers (all object that influence the render, directly or indirectly) are
shared between all render layers. However sometimes it's useful to leave out some
object influence for a particular render layer. That's what this option allows you
to do.
This commit is contained in:
Brecht Van Lommel 2012-04-17 12:49:39 +00:00
parent 4f158eee25
commit cd78d3cdce
6 changed files with 23 additions and 10 deletions

View File

@ -178,10 +178,7 @@ class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
col = split.column()
col.prop(scene, "layers", text="Scene")
col.label(text="Material:")
col.prop(rl, "material_override", text="")
col.prop(rl, "use_sky", "Use Environment")
col.prop(rl, "layers_exclude", text="Exclude")
col = split.column()
col.prop(rl, "layers", text="Layer")
@ -190,6 +187,15 @@ class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
split = layout.split()
col = split.column()
col.label(text="Material:")
col.prop(rl, "material_override", text="")
col = split.column()
col.prop(rl, "use_sky", "Use Environment")
split = layout.split()
col = split.column()
col.label(text="Passes:")
col.prop(rl, "use_pass_combined")

View File

@ -222,7 +222,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer)
for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) {
if((!layer && first_layer) || (layer && b_rlay->name() == layer)) {
render_layer.name = b_rlay->name();
render_layer.scene_layer = get_layer(b_scene.layers());
render_layer.scene_layer = get_layer(b_scene.layers()) & ~get_layer(b_rlay->layers_exclude());
render_layer.layer = get_layer(b_rlay->layers());
render_layer.holdout_layer = get_layer(b_rlay->layers_zmask());
render_layer.layer |= render_layer.holdout_layer;

View File

@ -176,12 +176,11 @@ typedef struct SceneRenderLayer {
struct Material *mat_override;
struct Group *light_override;
unsigned int lay; /* scene->lay itself has priority over this */
unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */
unsigned int lay; /* scene->lay itself has priority over this */
unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */
unsigned int lay_exclude; /* not used by internal, exclude */
int layflag;
int pad;
int passflag; /* pass_xor has to be after passflag */
int pass_xor;
} SceneRenderLayer;

View File

@ -1905,6 +1905,13 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
if (scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
prop = RNA_def_property(srna, "layers_exclude", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "lay_exclude", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Exclude Layers", "Exclude scene layers from having any influence");
if (scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* layer options */
prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE);

View File

@ -82,7 +82,7 @@ typedef struct RenderLayer {
/* copy of RenderData */
char name[RE_MAXNAME];
unsigned int lay, lay_zmask;
unsigned int lay, lay_zmask, lay_exclude;
int layflag, passflag, pass_xor;
struct Material *mat_override;

View File

@ -458,6 +458,7 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
BLI_strncpy(rl->name, srl->name, sizeof(rl->name));
rl->lay= srl->lay;
rl->lay_zmask= srl->lay_zmask;
rl->lay_exclude= srl->lay_exclude;
rl->layflag= srl->layflag;
rl->passflag= srl->passflag; // for debugging: srl->passflag|SCE_PASS_RAYHITS;
rl->pass_xor= srl->pass_xor;