【Unity Shader入门精要学习】Draw Call

一、什么是Draw Call

CPU命令GPU进行渲染操作就是Draw Call,调用一次就是一次Draw Call,如OpenGL中glDrawElements,或是DX中的DrawIndexedPrimitive。而Draw Call影响性能的其实是在CPU,而不是在GPU的渲染状态改变

二、CPU与GPU如何并行工作

CPU与GPU之间有一个命令缓冲区(Command Buffer),是一个命令队列,CPU不断的向其中添加命令,GPU不断的读取命令,其过程是相互独立的,所以CPU和GPU能并行工作。
命令有很多种,Draw Call只是其中一种,还有改变各种渲染状态的命令。

image.png

往往改变渲染状态会更加耗时

三、Draw Call多了会影响性能

每次调用Draw Call之前,CPU都会向GPU发送很多内容,各种数据,状态,命令。而这一阶段CPU需要完成很多工作,比如检查渲染状态,一旦CPU做好了准备工作,GPU就可以进行渲染工作了,而GPU多是并行计算,所以处理时间很快,所以渲染速度的快慢往往取决于CPU的提交速度,所以Draw Call数量太多就会大量占用CPU,造成性能下降。


image.png

四、减少Draw Call

1、批处理(Batching)

将一些小的Draw Call合并成一个大的Draw Call,在CPU的内存中将渲染状态相同的网格合并,而合并操作很耗时,所以批处理适合将静态物体合并,如地形,建筑。如果渲染状态不同则无法合并。

2、资源上

避免使用大量小的网格,在建模时注意合并可以合并的小网格。
避免使用过多材质,尽量共用材质。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容