shader中的z、stencil、alpha测试

三个测试都用于判断像素是否需要丢弃,但执行顺序却会极大影响效率,按一般顺序,像素经过PixelShader通过光照等计算后,得到颜色值,之后会进入这三个test。首先进行alpha test,不符合条件的(一般是透明度小于参考值)像素值丢弃,然后进入stenci test,不能通过测试的像素丢弃,最后进入z test,同样是丢弃不能通过测试的像素(一般是深度值较大的被遮挡像素)。如果仔细推敲便可发现,如果像素值是被stencil或z test丢弃掉了,那么pixel shader中的光照等计算就是做无用功,所以一个被遮挡的像素直接丢弃就好了,那么一开始就应该做stencil和z test。但这里忽略了个问题,深度值由光栅化得到,但pixel shader可以修改深度值或丢弃像素的,所以,默认深度是被遮挡的,经过pixel shader修改后可能就没有被遮挡了,同样如果一开始做了z test而pixel shader中或alpha test中又把像素丢弃了,那么z test中的深度值就不该写入。基于上面的过程,硬件设备厂商拿出了各自的优化方法,在一些条件下将z test放到pixelshader之前做,比如没有alpha test、关闭z write、pixel shader没有修改深度、pixelshader没有调用clip等函数丢弃像素等,这种做法称为 early z,stecil也类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值