Unity3D :绘制调用批处理

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

绘制调用批处理

绘制调用批处理是一种绘制调用优化方法,它组合网格,以便 Unity 可以在更少的绘制调用中渲染它们。Unity 提供了两种内置的绘制调用批处理方法:

  • 静态批处理:对于静态游戏对象,Unity 会将它们组合在一起并渲染在一起。
  • 动态批处理:对于足够小的网格,这会在 CPU 上转换它们的顶点,将相似的顶点组合在一起,并在一次绘制调用中渲染它们。

与手动合并网格相比,Unity 的内置绘制调用批处理具有多个优势;最值得注意的是,Unity 仍然可以单独剔除网格。但是,它也有一些缺点;静态批处理会产生内存和存储开销,动态批处理会产生一些 CPU 开销。

要求和兼容性

本部分包含有关 Unity 内置绘制调用批处理方法的渲染管线兼容性的信息。

渲染管线兼容性

功能内置渲染管线通用渲染管线 (URP)高清渲染管线 (HDRP)自定义可编程渲染管线 (SRP)
静态批处理
动态批处理

使用绘制调用批处理

以下用法信息与静态和动态批处理相关。有关特定于每个绘制调用批处理方法的信息(例如如何启用和使用每个方法),请参阅静态批处理和动态批处理。

绘制调用批处理支持网格渲染器、轨迹渲染器、线渲染器、粒子系统和精灵渲染器。不支持其他类型的渲染组件,包括蒙皮网格渲染器布料。Unity 仅将渲染器与其他相同类型的渲染器一起批处理;例如,带有网格渲染器的网格渲染器。

Unity 批处理绘制使用相同材质的游戏对象的调用。这意味着要从绘制调用批处理中获得最佳结果,请在尽可能多的游戏对象之间共享材料。如果有两个材质资源除了它们的纹理之外是相同的,则可以将这些纹理组合成一个更大的纹理。此过程称为纹理图化。有关更多信息,请参阅有关纹理图集的维基百科文章。当纹理位于同一图集中时,您可以改用单个材质资源。

在内置渲染管线中,您可以使用材质属性块更改材质属性,而不会中断绘制调用批处理。CPU 仍然需要进行一些渲染状态更改,但使用 a 比使用多个材质更快。如果您的项目使用可编程渲染管线,请不要使用 ,因为它们会删除材质的 SRP 批处理器兼容性。MaterialPropertyBlockMaterialPropertyBlock

透明着色器通常需要 Unity 按从后到前的顺序渲染网格。要批量处理透明网格体,Unity 首先从后到前对它们进行排序,然后尝试对其进行批处理。由于 Unity 必须从后到前渲染网格,因此它通常无法像不透明网格那样批量处理尽可能多的透明网格。

Unity 无法将动态批处理应用于在其变换组件中包含镜像的游戏对象。例如,如果一个游戏对象的比例为 1,而另一个游戏对象的缩放比例为 –1,Unity 无法将它们批处理在一起。

如果无法使用绘制调用批处理,则手动组合彼此靠近的网格可能是一个不错的选择。有关组合网格的更多信息,请参阅组合网格。

警告:从 C# 脚本访问共享材质属性时,请确保使用 Renderer.sharedMaterial 而不是 Renderer.material。 创建材质的副本,并将该副本分配回渲染器。这会阻止 Unity 对该渲染器的绘制调用进行批处理。Renderer.material

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D :创建支持 GPU 实例化的着色器 (mvrlink.com)

下一篇:Unity3D :静态批处理 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号