GPencil: Add option to disable masks in view layer

This patch adds an option in the Layers > Relations panel called "Disable Masks in Render".
When checked, no masks on this layer are included in the render.

Example:
| {F10087680} | {F10087681} |

See T88202 for why this is needed.

Reviewed By: antoniov

Maniphest Tasks: T88202

Differential Revision: https://developer.blender.org/D11234
This commit is contained in:
Falk David 2021-05-26 16:46:00 +02:00
parent a6f3bb36df
commit e459a25e6c
Notes: blender-bot 2023-02-14 02:13:08 +01:00
Referenced by issue #88202, Grease pencil : masked layers bring their mask dependencies in in their own view layer
5 changed files with 25 additions and 2 deletions

View File

@ -856,7 +856,11 @@ class GreasePencilLayerRelationsPanel:
col = layout.row(align=True)
col.prop_search(gpl, "viewlayer_render", scene, "view_layers", text="View Layer")
col = layout.row(align=True)
# Only enable this property when a view layer is selected.
col.enabled = bool(gpl.viewlayer_render)
col.prop(gpl, "disable_masks_viewlayer")
class GreasePencilLayerDisplayPanel:

View File

@ -2624,6 +2624,11 @@ static bool gpencil_is_layer_mask(ViewLayer *view_layer, bGPdata *gpd, bGPDlayer
continue;
}
/* Skip if masks are disabled for this view layer. */
if (gpl->flag & GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER) {
continue;
}
LISTBASE_FOREACH (bGPDlayer_Mask *, mask, &gpl->mask_layers) {
if (STREQ(gpl_mask->info, mask->name)) {
return true;

View File

@ -274,7 +274,13 @@ GPENCIL_tLayer *gpencil_layer_cache_add(GPENCIL_PrivateData *pd,
const bool override_vertcol = (pd->v3d_color_type != -1);
const bool is_vert_col_mode = (pd->v3d_color_type == V3D_SHADING_VERTEX_COLOR) ||
GPENCIL_VERTEX_MODE(gpd) || pd->is_render;
bool is_masked = (gpl->flag & GP_LAYER_USE_MASK) && !BLI_listbase_is_empty(&gpl->mask_layers);
const bool is_viewlayer_render = pd->is_render && (gpl->viewlayername[0] != '\0') &&
STREQ(pd->view_layer->name, gpl->viewlayername);
const bool disable_masks_render = is_viewlayer_render &&
(gpl->flag & GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER);
bool is_masked = disable_masks_render ? false :
(gpl->flag & GP_LAYER_USE_MASK) &&
!BLI_listbase_is_empty(&gpl->mask_layers);
float vert_col_opacity = (override_vertcol) ?
(is_vert_col_mode ? pd->vertex_paint_opacity : 0.0f) :

View File

@ -560,6 +560,8 @@ typedef enum eGPDlayer_Flag {
GP_LAYER_USE_MASK = (1 << 13), /*TODO: DEPRECATED */
/* Ruler Layer */
GP_LAYER_IS_RULER = (1 << 14),
/* Disable masks in viewlayer render */
GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER = (1 << 15),
} eGPDlayer_Flag;
/** #bGPDlayer.onion_flag */

View File

@ -2114,6 +2114,12 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
"ViewLayer",
"Only include Layer in this View Layer render output (leave blank to include always)");
prop = RNA_def_property(srna, "disable_masks_viewlayer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_DISABLE_MASKS_IN_VIEWLAYER);
RNA_def_property_ui_text(
prop, "Disable Masks in Render", "Exclude the mask layers when rendering the viewlayer");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
/* blend mode */
prop = RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "blend_mode");