GPU 实例化

简介

使用 GPU 实例化可使用少量绘制调用一次绘制(或渲染)同一网格的多个副本。它对于绘制诸如建筑物、树木和草地之类的在场景中重复出现的对象非常有用。

GPU 实例化在每次绘制调用时仅渲染相同的网格,但每个实例可以具有不同的参数(例如,颜色或比例)以增加变化并减少外观上的重复。

GPU 实例化可以降低每个场景使用的绘制调用数量。可以显著提高项目的渲染性能。

为材质添加实例化

要对材质启用 GPU 实例化 (GPU Instancing),请在 Project 窗口中选择材质,然后在 Inspector 中勾选 Enable Instancing 复选框。

材质检视面板 (Inspector) 窗口中显示的 Enable Instancing 复选框

仅当材质着色器支持 GPU 实例化时,Unity 才会显示此复选框。这包括标准 (Standard)、标准镜面反射 (StandardSpecular) 和所有表面着色器。请参阅有关标准着色器的文档以了解更多信息。

下面的截屏显示了具有多个游戏对象的相同场景;在顶部图像中,启用了 GPU 实例化,在底部图像中没有启用。请注意 FPS、Batches 和 Saved by batching 中的差异。

已启用 GPU 实例化:一个简单的场景包含了多个启用了 GPU 实例化的相同的游戏对象

无 GPU 实例化:一个简单的场景,包含多个未启用 GPU 实例化的相同游戏对象。

批处理优先级

进行批处理时,Unity 将优先处理静态批处理,然后再处理实例化。如果您将其中一个游戏对象标记为静态批处理,并且 Unity 成功对其进行批处理,则 Unity 会禁用该游戏对象的实例化,即使其渲染器使用实例化着色器也是如此。发生这种情况时,Inspector 窗口将显示一条警告消息,建议您禁用静态批处理。要禁用静态批处理,请打开 Player 设置(Edit > Project Settings,然后选择 Player 类别),打开所需平台的 Other Settings,然后在 Rendering 部分下面禁用 Static Batching 设置。

Unity 将优先处理实例化,然后再处理动态批处理。如果 Unity 可以实例化网格,则会对该网格禁用动态批处理。

本文参考:https://docs.unity3d.com/cn/2019.4/Manual/GPUInstancing.html