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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠溪泽岸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值