什么是模板测试,可以实现什么效果?
●用模板测试来实现限制渲染区域
●使立方体的不同区域显示不同的画面
图片来自:TA入门笔记(十五)
模板测试的知识点
●顺序
透明度测试->模板测试->深度测试
●简单原理
图片来自:LearnOpenGL——模板测试
以文章开头第一张图为例,透明片元的作用是更新模板缓冲区的值,使模板缓冲区的值为1
后边人物(类比上图中的立方体片元,地板片元)的模板值被设置成了1并且使用了“等于”的判断条件(当模板值等于深度缓冲值时通过测试,渲染时保留片元)
那么在模板测试时,由透明片元决定更新哪一部分的模板缓冲区的值为1,使这一部分区域模板值为1的片元得以渲染出来
考虑物体之间的渲染顺序问题
如果场景中用于更新模板缓冲的透明片元在物体之后渲染,物体所有的片元都会因为无法通过模板测试而无法被渲染。所以在实现中需要调整物体的渲染队列,使该透明片元先于物体进行渲染。
●简单实现细节
在Shader中完整的Stencil语法
Stencil
{
Ref referenceValue //当前材质的模板值
ReadMask readMask
WriteMask writeMask
Comp comparisonFunction //模板缓冲区的值与当前材质模板值的判断条件
Pass stencilOperation //当模板测试通过时如何处理模板缓冲区的值
Fail stencilOperation
ZFail stencilOperation
}
实际上为了实现简单的效果我们只需要用到其中的三个
Stencil
{
Ref //设置当前材质的模板值,默认值是0
Comp //默认值是always,模板测试总是通过,渲染像素
Pass //默认值是Keep,不更改深度缓冲的值
}
首先,模板缓冲区的默认值是0
在默认情况下,不对Stencil进行手动设置时,所有的片元均由Comp always通过了模板测试,由Pass Keep均不对模板缓冲区进行更改
为了实现限制渲染区域的效果
文章来源:https://www.toymoban.com/news/detail-616850.html
●模仿效果
文章来源地址https://www.toymoban.com/news/detail-616850.html
到了这里,关于【Unity——模板测试Stencil】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!