模板测试想象成「剪纸模板」
小时候玩过剪纸吗?比如拿一张镂空的纸板盖在画布上,只有镂空的部分能涂颜色,其他区域被挡住。模板测试就是这个原理——它决定哪些像素能"露出来"被绘制,哪些要被"盖住"。
核心工具:模板缓冲区(Stencil Buffer)
- 这是一个隐藏的"草稿纸",每个像素对应一个数字(比如0、1、2…)
- 你可以在 Shader 中写规则:“只有草稿纸上写着某个数字的地方,才允许画像素”
- 这个数字可以被修改,实现动态遮罩效果
模板测试的关键参数(就像设置规则)
在 Shader 中你会看到类似这样的代码:
Stencil {
Ref 1 // 参考值:我要用数字1当标准
Comp Equal // 比较规则:只画草稿纸上也是1的地方
Pass Keep // 如果通过测试:保持草稿纸原来的数字不变
Fail Replace // 如果没通过:把草稿纸改成参考值1
}
实际应用场景(超直观)
-
UI圆形头像遮罩
- 先画一个圆形区域,把模板缓冲区对应位置写成1
- 再画头像图片,只允许模板值为1的地方显示,其他区域被裁切
-
角色被遮挡时显示轮廓
- 正常绘制角色,模板值写1
- 当角色被墙挡住时,检测模板值非1的区域画红色轮廓
-
镜子效果
- 先画镜子区域,模板值写1
- 再在镜像位置绘制角色,但只显示在模板值为1的区域
常见坑点提醒
- 忘记清空模板缓冲区:可能导致上一帧的数据影响当前帧(就像没擦黑板)
- 多物体混合使用:不同物体用不同的模板值时,要规划好数字分配(比如A用1-10,B用11-20)
- 渲染顺序很重要:先画模板区域,再画被遮罩的内容(就像先放镂空纸板再喷漆)
一句话总结
模板测试 = 数字化的动态遮罩,通过给像素"贴标签"(数字),控制哪里能画哪里不能画,是制作高级特效的必备技能!