TA入门笔记(十五)

参考
may佬《技术美术百人计划》
冯乐乐《Unity Shader入门精要》
Unity Shader - 模板简单测试 - 实现镂空/遮罩、描边

图形3.1 深度与模板测试

模板测试

定义

渲染管线
  • 模板测试是逐片元操作中的一部分

  • 片元经过逐片元操作的各种测试之后被输出到帧缓冲区,最后输出到屏幕上

  • 逐片元操作阶段高度可配置,不可编程

在这里插入图片描述

  • Pixel Ownership Test:控制对当前屏幕的使用权限,如在unity中只对game窗口和scene窗口中的像素有权限,其他的窗口部分会被剔除掉
  • Scissor Test:裁剪测试,自己定义在窗口中渲染哪些部分,默认是全部渲染
  • Alpha Test:透明度测试,设定透明度阈值,大于该阈值的片元通过测试,只能实现不透明效果和全透明效果
  • Stencil Test:模板测试
  • Depth Test:深度测试
  • Blending :透明度混合,在这里来实现半透明效果
逻辑

通过一定条件来判断对该片元或片元属性执行抛弃操作还是保留操作
在这里插入图片描述

概念
  • 模板缓冲区为屏幕上的每个像素点保存一个无符号整数值(通常8位),这个值的具体意义视程序的具体应用而定
  • 在渲染的过程中,将这个值(stencilBufferValue)与一个预先设定的参考值(referenceValue)相比较,根据比较的结果来决定是否更新相应的像素点的颜色值,通过则更新,否则不更新
  • 模板测试发生在透明度测试(alpha test)之后,深度测试(depth test)之前
    在这里插入图片描述

语法表示

模板结构

在这里插入图片描述

ComparisonFunction 比较操作
函数 作用
Greater 相当于“>”,即当左边>右边,模板测试通过,渲染像素
GEqual 相当于“>=”,即当左边>=右边,模板测试通过,渲染像素
Less 相当于“<”,即当左边<右边,模板测试通过,渲染像素
LEqual 相当于“<=”,即当左边<=右边,模板测试通过,渲染像素
Equal 相当于“=”,即当左边=右边,模板测试通过,渲染像素
NotEqual 相当于“!=”,即当左边!=右边,模板测试通过,渲染像素
Always 不管公式两边为何值,模板测试总是通过,渲染像素
Never 不管公式两边为何值,模板测试总是不通过,像素被抛弃
StencilOperation 更新值
函数 作用
Keep 保留当前缓冲里的内容,即stencilBufferValue不变
Zero 将0写入缓冲,即stencilBufferValue变为0
Replace 将参考值写入缓冲,即将referenceValue赋值给stencilBufferValue
IncrSat stencilBufferValue加1,超过255时保留为255
DecrSat stencilBufferValue减1,小于0时保留为0
Invert stencilBufferValue按位取反
IncrWrap stencilBufferValue加1,超过255时变成0(然后继续自增)
DecrWrap stencilBufferValue减1,小于0时变成255(然后继续自减)

总结

  • 使用模板缓冲区最重要的两个值:当前模板缓冲值(stencilBufferValue)和模板参考值(referenceValue)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值