百人计划 3.1 深度和模板测试

模板测试的一些基本原理和能够做什么

主要讲解模板测试也就是RTR中所讲的Stencil buffer技术了。
模板测试,说道模板测试就要说道模板缓冲区。模板缓冲区与颜色缓冲区和深度缓冲区类似,会分配一个内存空间对fragment进行测试。
请添加图片描述
MinionsArt使用模板测试实现的一些效果

请添加图片描述
对MinionsArt的效果进行分析:MinionsArt的作品分为三层,一层原图,一层改变的图,还有一层进行mask的图层。
应用模板测试的经典独立游戏:笼中窥梦

模板测试的内容

在介绍模板测试的内容之前,先复习一遍渲染管线。
我们从渲染管线出发,对渲染管线进行简单复习。
渲染管线的简单总结:应用数据阶段–>几何变换–>光栅化阶段–>逐片元操作
其中模板测试是位于光栅化的fragment shader之后的逐片元操作阶段中。
逐片元操作流程
请添加图片描述
首先逐片元操作的输入是经过光栅化后的fragment,他的输出是存储到framebuffer中准备渲染到屏幕上的像素。
输入fragment后,
第一步:Pixel Ownership Test。这一步是分配屏幕像素的使用权限。是设置屏幕上的哪一部分来显示计算结果,这就是为什么Unity中只在game/scene场中显示结果。
第二步:裁剪测试。是规定了你所使用的窗口后,你又要对window内的某一部分进行裁剪。比如对上边的这张图片,你可以控制只在这个窗口的坐上或者右下进行渲染。
第三步:透明度测试。透明度测试是设置了一个阈值,这个阈值控制了透明度的限制规则。比如说alpha的通道为0.5,那么alpha的值小于0.5的fragment就无法通过测试。基于这个简单的比较,他只能实现全透明或者全不透明效果,半透明效果需要在透明度混合中实现(以下是Unity入门简要中简单的透明度测试应用)
第四步:模板测试,从伪代码逻辑上来理解模板测试。

if(referenceValue & readMask comparisonFunction stencilBufferValue&readMask)
通过像素
else
舍去像素
//referenceValue是当前模板缓冲中的一个参考值,他会和readMask进行一个与操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值