Unity中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)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_51603875/article/details/133138658
今日推荐