Version: 2021.3
LanguageEnglish
  • C#

UsageHints.MaskContainer

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

Marks a VisualElement that hosts non-rectangular descendants using the "overflow: hidden;" style. Non-rectangular masks are implemented with the stencil. If applicable, the renderer breaks the batch to preemptively set the stencil state, before and after drawing the descendants, so that the descendants won't have to set them at the next masking level. When using this flag, consecutive stencil push/pop operations are cheap and don't require modifying the stencil reference. As a result, the batch doesn't need to be broken for each push/pop operation. Consecutive push/push or pop/pop operations are still expensive. Avoid cases that involve many subtrees, where each subtree uses 2 or more levels of masking, to avoid consecutive push/push or pop/pop operations.

This option reduces stencil state changes and capitalizes on consecutive mask push/pop operations for efficiency.

Apply this option to a VisualElement with multiple nested masks among its descendants. For example, a child element has the overflow: hidden; style with rounded corners or SVG background.

The following illustration shows the number of batches in a single-level masking, a nested masking, and a nested masking with MaskContainer. The yellow color indicates the masking elements. The orange color indicates the masking element with MaskContainer applied. The numbers indicate the number of batches.


A: Single-level masking (1 batch)
B: Nested masking (5 batches)
C: Nested masking with MaskContainer (2 batches)

Note: Don't use GroupTransform in scenarios with many subtrees, where each subtree uses two or more levels of masking. This helps minimize consecutive push/push or pop/pop operations.