3.1 模板测试与深度测试(Stencil Test & Z Test)

一、模板测试(Stencil Test)

模板测试可以实现的一些效果图

1.是什么3.1 模板测试与深度测试(Stencil Test & Z Test)_第1张图片

①从渲染管线出发:模板测试是在逐片源操作阶段,透明测试之后,深度测试之前的位置。

3.1 模板测试与深度测试(Stencil Test & Z Test)_第2张图片

②从书面概念上理解

说到模板测试,就要先说道模板缓冲区。模板缓冲区与颜色缓冲区和深度缓冲区类似,模板缓冲区可以为屏幕上的每个像素点保存一个无符号证书值(通常的话是个8位整数)。这个值的具体一一视程序的具体应用而定。在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值。这个比较的过程被称为模板测试。模板测试发生在透明测试之后,深度测试之前。如果模板测试通过,则相应的像素点更新,否则不更新。

3.1 模板测试与深度测试(Stencil Test & Z Test)_第3张图片

③从逻辑上理解:通过一些逻辑判断,针对当前像素进行取舍,如下图。stencilBufferValue是模板缓存中的值,其它由我们定义

3.1 模板测试与深度测试(Stencil Test & Z Test)_第4张图片

2.语法表示

3.1 模板测试与深度测试(Stencil Test & Z Test)_第5张图片

  • Ref referenceValue //参考值
  • ReadMask readMask //读取掩码,取值范围也是0~255的整数,默认255,二进制11111111,即读取的时候不对referenceValue和stencilBufferValue产生效果,读取的还是原始值
  • WriteMask writeMask //输出掩码,当写入模板缓冲时进行掩码操作(按位与【&】),writeMask取值范围是0~255的整数,默认值也是255,即当修改stencilBufferValue值时写入的仍是原始值
  • Comp comparisionFunction //比较方式,关键字见下图
  • Pass stencilOperation //条件满足后的处理
  • Fail stencilOperation //条件不满足后的处理
  • ZFail stencilOperation //深度测试失败后的处理

3.1 模板测试与深度测试(Stencil Test & Z Test)_第6张图片

ComparisionFunction

3.1 模板测试与深度测试(Stencil Test & Z Test)_第7张图片

StencilBufferValue(Pass,Fail,ZFail)

3.模板测试流程

3.1 模板测试与深度测试(Stencil Test & Z Test)_第8张图片

4.模板测试总结

  • 使用模板缓冲区最重要的两个值:当前模板缓冲之(stencilBufferValue)和模板参考值(referenceValue)
  • 模板测试主要就是对这两个值使用特定的比较操作:Never,Always,Less,LEqual,Greater,Equal等等
  • 模板测试之后要对模板缓冲区的值(stencilBufferValue)进行更新操作,更新操作包括:Keep,Zero,Replace,IncrSat,DecrSat,Invert等等
  • 模板测试之后可以根据结果对模板缓冲区做不同的更新操作,比如模板测试成功操作Pass,模板测试失败操作Fail,深度测试失败操作ZFail,还有针对正面和背面精确更新操作PassBack,PassFront,FailBack等等

5.模板测试扩展

  • 描边
  • 多边形填充
  • 反射区域控制
  • shadow volume阴影渲染
  • 等等

3.1 模板测试与深度测试(Stencil Test & Z Test)_第9张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第10张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第11张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第12张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第13张图片

视频代码 Stencil-Test

StencilMask

3.1 模板测试与深度测试(Stencil Test & Z Test)_第14张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第15张图片

ToonLitStencilMasked

3.1 模板测试与深度测试(Stencil Test & Z Test)_第16张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第17张图片

3.1 模板测试与深度测试(Stencil Test & Z Test)_第18张图片

你可能感兴趣的:(游戏开发,游戏)