渲染流程笔记

场景渲染绘制过程中,怎么能够保证效果的同时最小化gpu的工作量,是提高帧率的关键,最基本的做法是裁剪技术,如空间分割,相机距离排序等,偏gpu的如材质排序等,但这些技术间是有冲突的,比如相机距离排序可能就与材质排序,透明与不透明物体渲染冲突,以前的工作中还没有涉及到对整个渲染架构的调整及优化,故这部分虽一直有思考,但并没有完整的去分析如何解决,最近看Game Engine Architecture时看到一个渲染流程,可以较好解决大部分问题,特此记录一下。
先总结下自己想到的一般渲染逻辑中存在的问题:
1、要尽量减少gpu处理的网格,不可见物体的网格是完全没必要提交的gpu的,这部通过裁剪技术偏cpu的裁剪和偏gpu的遮挡查询
2、gpu要尽量减少状态改变,状态改变操作gpu必须等前一状态的工作结束后才能进行,所以频繁的状态切换导致gpu频繁等待,这个问题一般是通过材质排序解决,因为相同材质的物体,渲染状态都是一样的。
3、减少cpu与gpu间的数据交换,主要是贴图,这也是大显存的优势,如果显存不够用的话,就进行数据交换,贴图排序可以减少数据量。
4、像素覆盖,远处物体的像素点会被近处物体遮挡,所以这部分像素点的渲染完全是浪费(特别是有复杂光照计算时,更是浪费gpu计算,也是延迟渲染或光照的优势),通过物体距离相机距离排序可以解决,先绘制离相机近的,再绘制离相机远的,当然这个并不能全部解决,因为物体可能交叠,也可能自覆盖。
5、半透明物体渲染,半透明物体会透过它后面的物体,所以必须由远到近的绘制,这与上一点是冲突的,一般的解决办法是把半透明的物体筛选出来放到最后渲染,同时不透明物体渲染还可以关掉alphablend以提高效率。


那么怎么样的渲染逻辑才能如何能尽可能解决上面问题,Game Engine Architecture给出了一个方法,使用到了gpu z prepass特性,具体做法是:
1、不明物体渲染两遍,第一遍用由近到远的顺序渲染,并关闭pixshader,仅输出z-buffer,这样渲染速度会很快。第二遍按材质排序渲染,由于已经有了z-buffer所以像素覆盖的问题可以避免,pixel shader工作量大大减少,同时材质和远近排序的矛盾也得到解决。
2、渲染半透明物体,由于透明物体必须由远到近渲染,所以无可避免导致,无法材质排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值