Unity URP Stencil Test
最终效果
给需要进行 Stencil Test 的地方设置好 Stencil pref 的材质,材质面板及 Shader 如下
Stencil ID 是作为测试的基准的 int 型,范围是 0 ~ 255
Shader "Custom/Stencil"
{
Properties
{
_StencilID("Stencil ID", Range(0, 255)) = 0
}
SubShader
{
Tags
{
"RenderType" = "Opaque"
"RenderPipeline" = "UniversalPipeline"
"Queue" = "Geometry"
}
Pass
{
Blend Zero One
Zwrite Off
Stencil
{
Ref
Comp Always
Pass Replace
Fail Keep
}
}
}
}然后给需要在该 Stencil ID 时显示的物体设置好单独的 Layer
如图,场景中的 Suzanne 被设置为了名称 StencilLayer 4 的 Layer
最后在项目使用的 Renderer asset 中添加 Render feature - Render Objects,并做如下设置
Renderer asset 的 inspector 面板
[*]Renderer 的 Filtering - Opaque Layer Mask: 只勾选正常显示的 Layer;(下面的 Transparent Layer Mask 同理,只是本文用例中没有涉及到透明物体)
[*]新添加的 Render Feature - Render Objects 的 Filters - Layer Mask: 只勾选需要进行 Stencil Testing 的物体所属的 Layer;
[*]勾选新添加的 Render Feature - Render Objects 的 Overrides - Stencil,并修改其参数:
[*]Value 对应的是 Stencil Test 材质的 Stencil ID;
[*]Compare Function 为 Stencil Test 的判断条件,本文中使用 Equal 意为在 Stencil Testing 中,如果 Render Feature 中 Stencil 的 Value 值等于 Stencil Test 材质的 Stencil ID,则在 Stencil Test 材质的范围中显示 Render Feature 中 Layer Mask 的 Layer 所登记的物体。
本文最终效果使用以上方式做了四个 Stencil Test 材质并分别给了四个 Stencil ID,以达成立方体的四个面在 Stencil Test 后分别显示四个不同的物体。
彩蛋
照妖镜效果
页:
[1]