Unity Shader学习笔记——Draw Call

文章讲述了drawcall在图形渲染中的作用,指出过多drawcall会因CPU准备渲染工作而导致性能下降。通过批处理技术,尤其是静态和动态批处理,可以有效减少drawcall,提高游戏或应用的帧率。静态批处理适用于不变的物体,而动态批处理则针对移动物体进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  流程讲完了在细说一下drawcall,上面已经说到了drawcall就是CPU调用图像编程接口,命令GPU进行渲染的操作,drawcall中造成性能问题的元凶是CPU。

        CPU和GPU是如何并行工作的?   

        通过命令缓冲区,由CPU向其中添加命令,而GPU从中读取命令,两者是互相独立的。

        为什么Draw Call多了会影响帧率? 

        因为每次调用 drawcall之前,CPU需要向GPU发送很多内容,包括数据、状态、命令。在这一阶段中CPU需要完成很多工作,例如检查渲染状态,当CPU完成了这些准备工作,GPU就可以开始本次本次渲染,GPU渲染能力很强,渲染200个和2000个三角网格通常没什么区别,因此渲染速度往往快于CPU提交命令的速度。如果drawcall数量太多,CPU就会把大量时间花费在提交drawcall上,造成CPU过载。

        如何减少Draw Call?

        使用批处理。提交大量很小的drawcall会造成CPU把大量时间花费在准备drawcall上,那么优化就是把很多细小的drawcall合并成一个大的drawcall,这就是批处理的思想。

        批处理又分为两种,动态批处理和静态批处理。

        静态批处理就是将静态的不会动的物体进行批处理。例如大地,石头等,对于这些静态的物体我们只需要合并一次,并且他们拥有相同的纹理;如果是不同纹理的话,可以打包成图集;或者是光源上减少反射光,减少阴影面积。

        动态批处理,指的是Unity的动态,Unity自身对相似的资源进行动态批处理,有非常严苛的要求,要改很多资源。且这些物体是不断移动的,因此每一帧都需要重新进行合并在发送给GPU。所以批处理更适合静态的物体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值