Document Depth Test and Stencil features in Standard Material 3D and Spatial shader

Co-authored-by: Qbieshay <cislaghi.ilaria@gmail.com>
This commit is contained in:
Hugo Locurcio
2025-10-16 16:51:07 +02:00
co-authored by Qbieshay
parent b61cd5d935
commit 9377e35451
4 changed files with 104 additions and 1 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

+46
View File
@@ -241,6 +241,16 @@ and works very well with the *Render Priority* property of Material
.. image:: img/spatial_material3.png
Depth Test
~~~~~~~~~~
This can be used to invert the standard depth test. When set to **Inverted**,
the object will only appear when occluded, and will be hidden otherwise.
This has no effect if **No Depth Test** is enabled.
.. image:: img/material_depth_test.webp
Shading
-------
@@ -703,6 +713,8 @@ Billboard Keep Scale
Enables scaling a mesh in billboard mode.
.. _ref_standard_material_3d_grow:
Grow
----
@@ -721,6 +733,10 @@ make it black and unshaded, reverse culling (Cull Front), and add some grow:
vertices, or "smooth shading". If the mesh has disconnected faces with unique
vertices, or "flat shading", the mesh will appear to have gaps when using Grow.
Note that in Godot 4.5 onwards, stencil buffer-based outlines are available
using the **Outline** :ref:`stencil mode <doc_standard_material_3d_stencil>`.
This can be used as an alternative to Grow for outlines.
Transform
---------
@@ -812,6 +828,36 @@ is the same across the entire object's surface.
.. image:: img/standart_material_distance_fade_object_dither_mode.webp
.. _doc_standard_material_3d_stencil:
Stencil
-------
Since Godot 4.5, Godot allows materials to make use of the stencil buffer.
This feature is commonly used to create outlines and X-ray effects,
which can be useful to highlight objects, especially behind walls.
The **Outline** and **X-Ray** modes assign a preconfigured stencil material
in the material's **Next Pass** property. The **Custom** mode can be used for
advanced effects.
.. image:: img/material_stencil.webp
Materials that write to the stencil buffer are always drawn in the transparent pass,
so they are subject to the usual
:ref:`transparency limitations <doc_3d_rendering_limitations_transparency_sorting>`.
.. note::
Like with the :ref:`Grow property <ref_standard_material_3d_grow>`, for the
stencil outline to work as expected, the mesh must have connected faces with
shared vertices, or "smooth shading". If the mesh has disconnected faces with
unique vertices, or "flat shading", the mesh will appear to have gaps when using
a stencil outline.
Stencil outlines render similarly to the Grow property, but won't look identical
in every scenario, especially when intersections with opaque surfaces are involved.
Material Settings
-----------------
@@ -36,6 +36,11 @@ For visual examples of these render modes, see :ref:`Standard Material 3D and OR
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **depth_test_disabled** | Disable depth testing. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **depth_test_default** | Depth test will discard the pixel if it is behind other pixels. |
| | In Forward+ only, the pixel is also discarded if it's at the exact same depth as another pixel. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **depth_test_inverted** | Depth test will discard the pixel if it is in front of other pixels. Useful for stencil effects. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **sss_mode_skin** | Subsurface Scattering mode for skin (optimizes visuals for human skin, e.g. boosted red channel). |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **cull_back** | Cull back-faces (default). |
@@ -91,6 +96,58 @@ For visual examples of these render modes, see :ref:`Standard Material 3D and OR
| **fog_disabled** | Disable receiving depth-based or volumetric fog. Useful for ``blend_add`` materials like particles. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
Stencil modes
-------------
.. note::
Stencil support is experimental, use at your own risk.
We will try to not break compatibility as much as possible,
but if significant flaws are found in the API, it may change
in the next minor version.
Stencil operations are a set of operations that allow writing to
an efficient buffer in an hardware-accelerated manner.
This is generally used to mask in or out parts of the scene.
Some of the most well-known uses are:
- Outlines: Mask out the inner mesh that is being outlined to avoid inner outlines.
- X-Ray: Display a mesh behind other objects.
- Portals: Draw geometry that is normally "impossible" (non-Euclidian) by masking objects.
.. note::
You can only read from the stencil buffer in the transparent pass.
Any attempt to read in the opaque pass will fail, as it's currently not supported behavior.
Note that for compositor effects, the main renderer's stencil buffer can't be copied
to a custom texture.
+-------------------------------+------------------------------------------------------------------------------------------------------+
| Stencil mode | Description |
+===============================+======================================================================================================+
| **read** | Read from the stencil buffer. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **write** | Write reference value to the stencil buffer. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **write_if_depth_fail** | Write reference value to the stencil buffer if the depth test fails. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_always** | Always pass stencil test. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_equal** | Pass stencil test if the reference value is equal to the stencil buffer value. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_not_equal** | Pass stencil test if the reference value is not equal to the stencil buffer value. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_less** | Pass stencil test if the reference value is less than the stencil buffer value. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_less_or_equal** | Pass stencil test if the reference value is less than or equal to the stencil buffer value. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_greater** | Pass stencil test if the reference value is greater than the stencil buffer value. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
| **compare_greater_or_equal** | Pass stencil test if the reference value is greater than or equal to the stencil buffer value. |
+-------------------------------+------------------------------------------------------------------------------------------------------+
Built-ins
---------