Unity中Shader模板测试使用到的二进制

文章目录

  • 前言(接上一篇文章)
  • 一、模板测试公式
    • 1、简化版(在ReadMask默认值的情况下)
    • 2、完整版
  • 二、二进制的值
    • 1、0 和 1组成
    • 2、符号
    • 3、二进制的与运算
    • 4、二进制和十进制转化
  • 三、在Shader中的实际操作


前言(接上一篇文章)

Unity中Shader模板测试使用到的二进制


一、模板测试公式

1、简化版(在ReadMask默认值的情况下)

Ref Comp StencilBufferValue

Ref:Shader中自定义的值
StencilBufferValue:模板缓冲区中的值
比较的结果,只有通过和不通过两种结果

2、完整版

(Ref & ReadMask) Comp (StencilBufferVallue & ReadMask)

前半部分:Shader中自定义的值 和 ReadMask 中的值进行 与运算
后半部分:模板缓冲区中的值 和 ReadMask 中的值进行 与运算
比较的结果,只有通过和不通过两种结果

二、二进制的值

1、0 和 1组成

2、符号

最左边的这一位一般用来表示这个数是正数 还是 负数,这样的话这个数就是有符号整数。

如果最左边这一位不用来表示正负数,而是和后面的连在一起表示整数,那么就不能区分这个数是正还是负,就只能是正数,这就是无符号整数。

3、二进制的与运算

Unity中Shader模板测试使用到的二进制_第1张图片

4、二进制和十进制转化

https://tool.oschina.net/hexconvert

三、在Shader中的实际操作

例:(给ReadMask赋值为 3,则在Ref值为 1,5···时显示出的效果是我们想要的效果)

Stencil
{
Ref [_Ref]
//以下两个属性一般不做修改
ReadMask 3//[_StencilReadMask]
//WriteMask [_StencilWriteMask]
Comp [_StencilComp]
Pass [_StencilOp]
//Fail [_Fail]
//ZFail [_ZFail]
}

模板缓冲区中的值(1) 01
ReadMask的值(3) 11
01 & 11 = 01

Ref的值(5): 101
ReadMask :011
101 & 011 = 001

当Comp使用Equal时,左右两边的值相等

Ref为1(001 & 011 = 001)
Unity中Shader模板测试使用到的二进制_第2张图片
Ref为5 (101 & 011 = 001)
Unity中Shader模板测试使用到的二进制_第3张图片

你可能感兴趣的:(Unity,unity,游戏引擎)