跳转至

Stencil Shader

自己做的游戏有一个切换世界的功能,打算用模版缓冲来实现。由于每次做了之后容易忘,决定把Shader实现的思路记录下来方便以后直接使用

标准模版

由三部分组成 + ref:写入模版缓冲区的值 + comp:模版测试比较的方式 + pass:通过后执行的操作

ref

材质写入模版缓冲区的参考,范围为0~255

comp

模版测试比较的方式 + Comp Alawys:永远通过 + Comp Greater:大于模版缓冲区的值通过 + Comp Equal:等于模版缓冲区的通过 + Comp Less:小于模版缓冲区的值通过 + Comp GEqual: + Comp LEqual: + Comp NotEqual:

pass

模版测试通过后的行为 + Pass Replace: 成功的模版缓冲区域用ref值替代 + Pass Keep:保持ref值不变 + Pass Zero: 该区域ref设为0 + Pass IncrSat: + Pass DecrSat: + Pass Invert: + Pass IncrWrap:

一个例子

Stencil{
    ref 1 //缓冲区写入1
    comp always //比较永远成功
    pass replace //成功后替换为1

}

其他帮助指令

  • Color Mask 0 一个指令,可以强制忽略掉RGBA通道的信息。将遮罩变成透明的物体,这非常简单
  • Zwrite Off 关闭深度写入,这样就可以保证遮罩始终有效。