找回密码
 立即注册
查看: 403|回复: 0

Unity URP Stencil Test

[复制链接]
发表于 2022-2-16 13:58 | 显示全部楼层 |阅读模式


最终效果

给需要进行 Stencil Test 的地方设置好 Stencil pref 的材质,材质面板及 Shader 如下



Stencil ID 是作为测试的基准的 int 型,范围是 0 ~ 255

Shader "Custom/Stencil"
{
    Properties
    {
        [IntRange]_StencilID("Stencil ID", Range(0, 255)) = 0
    }
    SubShader
    {
        Tags
        {
            "RenderType" = "Opaque"
            "RenderPipeline" = "UniversalPipeline"
            "Queue" = "Geometry"   
        }
        
        Pass
        {
            Blend Zero One
            Zwrite Off
            
            Stencil
            {
                Ref [_StencilID]
                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 后分别显示四个不同的物体。
彩蛋



照妖镜效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 22:00 , Processed in 0.090539 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表