文章目录
- 前言(接上一篇文章)
- 一、模板测试公式
- 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、二进制的与运算
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)
Ref为5 (101 & 011 = 001)