渲染顺序overdraw和alphatest有感

最近又重新看了看渲染顺序 overdraw,适当的调节渲染对列可能会对性能优化有好处。
比如我们的地形渲染比较费,我选择了更改的渲染队列最后画地形,这样就挡住了不少像素填充率,然后gpu内部会执行early-z技术,在顶点着色器与片段着色器之间提前进行深度测试,这样就会少运行不少片段着色器,进而达到优化目的。

不过一般情况应该是不需要手动调节渲染队列的,有可能反而自己手动调节还会造成overdraw上升。
比如我把地形最后渲染,地形的突起的山挡住了人,那么我先画人,再画山,山完全挡住了人,岂不是增加overdraw。好在我们项目没有这个问题,一定距离后人就不显示。

overdraw主要是透明像素层次叠加太多导致的,还有alphatest的物体导致的。

alphatest主要浪费就是费在了开启了alphatest就不能开启early-z,不然会造成我深度写入了结果我在frag片段着色器里又把它剔除了,被剔除的部分因为写入了深度还会起到遮挡后面物体的作用,所以显示效果就会错误。
所以alphatest会在顶点,片段着色器之后才会执行深度测试,假如,我的山完全挡住了这个alphatest的物体,但是这个alphatest的物体还是会完整的走一遍顶点和像素着色器的,走完后再进行深度测试结果发现没有通过深度测试,那么就会完全抛弃,这就是无用渲染。overdraw会增加。

所以尽可能多的使用alpha blend代替alpha test,因为alpha blend会提前执行ZTest测试,被挡住的就不会渲染的。

有我理解错误的地方欢迎指出,我会虚心学习,共同交流,这两天一直晚上再和大佬沟通交流,基础补的不少。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值