美文网首页UnityShader
【Unity Shader入门精要学习】Draw Call

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

作者: 小王子称号发放NPC | 来源:发表于2019-08-16 17:05 被阅读0次

一、什么是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、资源上

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

相关文章

网友评论

    本文标题:【Unity Shader入门精要学习】Draw Call

    本文链接:https://www.haomeiwen.com/subject/jmfrdctx.html