unity shader中的模板测试

模板测试想象成「剪纸模板」

小时候玩过剪纸吗?比如拿一张镂空的纸板盖在画布上,只有镂空的部分能涂颜色,其他区域被挡住。模板测试就是这个原理——它决定哪些像素能"露出来"被绘制,哪些要被"盖住"。


核心工具:模板缓冲区(Stencil Buffer)

  1. 这是一个隐藏的"草稿纸",每个像素对应一个数字(比如0、1、2…)
  2. 你可以在 Shader 中写规则:“只有草稿纸上写着某个数字的地方,才允许画像素”
  3. 这个数字可以被修改,实现动态遮罩效果

模板测试的关键参数(就像设置规则)

在 Shader 中你会看到类似这样的代码:

Stencil {
    Ref 1          // 参考值:我要用数字1当标准
    Comp Equal     // 比较规则:只画草稿纸上也是1的地方
    Pass Keep      // 如果通过测试:保持草稿纸原来的数字不变
    Fail Replace   // 如果没通过:把草稿纸改成参考值1
}

实际应用场景(超直观)

  1. UI圆形头像遮罩

    • 先画一个圆形区域,把模板缓冲区对应位置写成1
    • 再画头像图片,只允许模板值为1的地方显示,其他区域被裁切
  2. 角色被遮挡时显示轮廓

    • 正常绘制角色,模板值写1
    • 当角色被墙挡住时,检测模板值非1的区域画红色轮廓
  3. 镜子效果

    • 先画镜子区域,模板值写1
    • 再在镜像位置绘制角色,但只显示在模板值为1的区域

常见坑点提醒

  • 忘记清空模板缓冲区:可能导致上一帧的数据影响当前帧(就像没擦黑板)
  • 多物体混合使用:不同物体用不同的模板值时,要规划好数字分配(比如A用1-10,B用11-20)
  • 渲染顺序很重要:先画模板区域,再画被遮罩的内容(就像先放镂空纸板再喷漆)

一句话总结

模板测试 = 数字化的动态遮罩,通过给像素"贴标签"(数字),控制哪里能画哪里不能画,是制作高级特效的必备技能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值