SceneRenderLayer > SceneLayer: Convert Z-Mask
Note: Cycles still need to implement the per-object holdout (similar to how we do shadow catcher).
This commit is contained in:
parent
e22ca0fb86
commit
d276e45ee6
|
@ -398,7 +398,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer)
|
|||
if((!layer && first_layer) || (layer && b_rlay->name() == layer)) {
|
||||
render_layer.name = b_rlay->name();
|
||||
|
||||
render_layer.holdout_layer = get_layer(b_rlay->layers_zmask());
|
||||
render_layer.holdout_layer = 0;
|
||||
render_layer.exclude_layer = 0;
|
||||
|
||||
render_layer.scene_layer = scene_layers & ~render_layer.exclude_layer;
|
||||
|
|
|
@ -200,7 +200,7 @@ private:
|
|||
string name;
|
||||
uint scene_layer;
|
||||
uint layer;
|
||||
uint holdout_layer;
|
||||
uint holdout_layer; /* This can be safely removed from Cycles. */
|
||||
uint exclude_layer; /* This can be safely removed from Cycles. */
|
||||
BL::Material material_override; /* This can be safely removed from Cycles. */
|
||||
bool use_background_shader;
|
||||
|
|
|
@ -111,6 +111,8 @@ void BKE_layer_sync_object_unlink(const struct Scene *scene, struct SceneCollect
|
|||
void BKE_override_scene_layer_datablock_add(struct SceneLayer *scene_layer, int id_type, const char *data_path, const struct ID *id);
|
||||
void BKE_override_scene_layer_int_add(struct SceneLayer *scene_layer, int id_type, const char *data_path, const int value);
|
||||
|
||||
void BKE_override_layer_collection_boolean_add(struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value);
|
||||
|
||||
/* engine settings */
|
||||
typedef void (*EngineSettingsCB)(struct RenderEngine *engine, struct IDProperty *props);
|
||||
|
||||
|
|
|
@ -1075,6 +1075,15 @@ void BKE_override_scene_layer_int_add(SceneLayer *scene_layer, int id_type, cons
|
|||
TODO_LAYER_OVERRIDE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new boolean override
|
||||
*/
|
||||
void BKE_override_layer_collection_boolean_add(struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value)
|
||||
{
|
||||
UNUSED_VARS(layer_collection, id_type, data_path, value);
|
||||
TODO_LAYER_OVERRIDE;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
/* Engine Settings */
|
||||
|
||||
|
|
|
@ -330,9 +330,14 @@ void do_versions_after_linking_280(Main *main)
|
|||
|
||||
/* Add new collection bases. */
|
||||
for (int layer = 0; layer < 20; layer++) {
|
||||
if ((scene->lay & (1 << layer)) &&
|
||||
(srl->lay & (1 << layer)) &&
|
||||
((srl->lay_exclude & (1 << layer)) == 0))
|
||||
if ((
|
||||
(scene->lay & (1 << layer)) &&
|
||||
(srl->lay & (1 << layer)) &&
|
||||
((srl->lay_exclude & (1 << layer)) == 0)) ||
|
||||
(
|
||||
(srl->lay_zmask & (1 << layer)) &&
|
||||
((scene->lay | srl->lay_exclude) & (1 << layer)))
|
||||
)
|
||||
{
|
||||
if (collections[DO_VERSION_COLLECTION_VISIBLE].created & (1 << layer)) {
|
||||
|
||||
|
@ -340,6 +345,14 @@ void do_versions_after_linking_280(Main *main)
|
|||
layer_collection_parent = BKE_collection_link(scene_layer,
|
||||
collections[DO_VERSION_COLLECTION_VISIBLE].collections[layer]);
|
||||
|
||||
if (srl->lay_zmask & (1 << layer)) {
|
||||
BKE_override_layer_collection_boolean_add(
|
||||
layer_collection_parent,
|
||||
ID_OB,
|
||||
"cycles.is_holdout",
|
||||
true);
|
||||
}
|
||||
|
||||
LayerCollection *layer_collection_child;
|
||||
layer_collection_child = layer_collection_parent->layer_collections.first;
|
||||
|
||||
|
@ -350,6 +363,7 @@ void do_versions_after_linking_280(Main *main)
|
|||
if (collections[j].flag_render & COLLECTION_DISABLED) {
|
||||
BKE_collection_disable(scene_layer, layer_collection_child);
|
||||
}
|
||||
|
||||
layer_collection_child = layer_collection_child->next;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -177,7 +177,7 @@ typedef struct SceneRenderLayer {
|
|||
struct Material *mat_override DNA_DEPRECATED; /* Converted to SceneLayer 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_zmask DNA_DEPRECATED; /* Converted to LayerCollection cycles holdout override. */
|
||||
unsigned int lay_exclude DNA_DEPRECATED;
|
||||
int layflag;
|
||||
|
||||
|
|
|
@ -3293,13 +3293,6 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
|
|||
/* this seems to be too much trouble with depsgraph updates/etc. currently (20140423) */
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
|
||||
prop = RNA_def_property(srna, "layers_zmask", PROP_BOOLEAN, PROP_LAYER);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1);
|
||||
RNA_def_property_array(prop, 20);
|
||||
RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers for solid faces");
|
||||
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);
|
||||
|
||||
if (scene) {
|
||||
prop = RNA_def_property(srna, "pass_alpha_threshold", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_ui_text(prop, "Alpha Threshold",
|
||||
|
|
|
@ -108,7 +108,7 @@ typedef struct RenderLayer {
|
|||
|
||||
/* copy of RenderData */
|
||||
char name[RE_MAXNAME];
|
||||
unsigned int lay, lay_zmask;
|
||||
unsigned int lay;
|
||||
int layflag, passflag, pass_xor;
|
||||
|
||||
/* MULTIVIEW_TODO: acolrect and scolrect are not supported by multiview at the moment.
|
||||
|
|
|
@ -314,7 +314,6 @@ 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->layflag = srl->layflag;
|
||||
rl->passflag = srl->passflag; /* for debugging: srl->passflag | SCE_PASS_RAYHITS; */
|
||||
rl->pass_xor = srl->pass_xor;
|
||||
|
|
|
@ -2066,7 +2066,7 @@ void zbuffer_solid(RenderPart *pa, RenderLayer *rl, void(*fillfunc)(RenderPart *
|
|||
ObjectRen *obr;
|
||||
float obwinmat[4][4], winmat[4][4], bounds[4];
|
||||
float ho1[4], ho2[4], ho3[4], ho4[4]={0};
|
||||
unsigned int lay= rl->lay, lay_zmask= rl->lay_zmask;
|
||||
unsigned int lay= rl->lay, lay_zmask= 0;
|
||||
int i, v, zvlnr, zsample, samples, c1, c2, c3, c4=0;
|
||||
short nofill=0, env=0, wire=0, zmaskpass=0;
|
||||
const bool all_z = (rl->layflag & SCE_LAY_ALL_Z) && !(rl->layflag & SCE_LAY_ZMASK);
|
||||
|
|
Loading…
Reference in New Issue