什么是绘图调用(Draw Calls)
在Unity中,绘图调用(draw calls)是向图形API发送的指令,告诉它应该绘制什么以及如何绘制。每个绘图调用都包含图形API绘制到屏幕上所需的所有信息,例如纹理、着色器和缓冲区等。绘图调用可能很消耗资源,但通常绘图调用的准备过程比绘图调用本身更消耗资源。
准备绘图调用
为了准备绘图调用,CPU需要设置资源并更改GPU的内部设置。这些设置统称为渲染状态(render state)。渲染状态的更改(如切换到不同的材质)是图形API执行的最消耗资源的操作。
优化渲染状态更改
因为渲染状态的更改很消耗资源,所以优化它们非常重要。优化渲染状态更改的主要方法是减少它们的数量。这可以通过以下两种方式实现:
减少总绘图调用数:当你减少绘图调用的数量时,你也减少了它们之间渲染状态的更改次数。
组织绘图调用:以减少渲染状态的更改次数。如果图形API可以使用相同的渲染状态来执行多个绘图调用,它可以将绘图调用组合在一起,并减少渲染状态的更改次数。
优化绘图调用的好处
优化绘图调用和渲染状态更改对应用程序有很多好处。主要包括:
提高帧速率:优化可以提高应用程序的帧速率,使其更加流畅。
减少能源消耗:优化可以减少应用程序所需的电力,对于电池供电的设备,这可以延长电池续航时间。
减少热量产生:优化可以减少设备运行应用程序时产生的热量。
提高可维护性:在开发过程中早期优化绘图调用和渲染状态更改,并在优化水平上保持它们,可以使你在场景中添加更多的游戏对象(GameObjects)而不会产生大量的性能开销,从而提高未来开发的可维护性。
几种优化方法
虽然这段文字没有详细列出具体的优化方法,但通常包括以下几种:
合并绘图调用:将多个小的绘图调用合并成一个大的绘图调用。
使用静态批处理:将多个静态对象组合成一个大的网格,并一次性绘制它们。
使用动态批处理:将具有相同材质的动态对象组合在一起进行绘制。
优化纹理和材质:使用更小的纹理和更简单的材质可以减少渲染状态的更改次数。
使用LOD(Levels of Detail):根据距离和重要性使用不同详细程度的模型。
使用遮挡剔除:不绘制被其他对象遮挡的部分。