Unity3D :动态批处理

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

动态批处理

动态批处理是一种绘制调用批处理方法,可对移动的游戏对象进行批处理以减少绘制调用。动态批处理在 Unity 在运行时动态生成的网格和几何体(例如粒子系统)之间的工作方式不同。有关网格和动态几何之间的内部差异的信息,请参阅网格的动态批处理和动态生成的几何的动态批处理。

注意:网格的动态批处理旨在优化旧低端设备上的性能。在现代使用者硬件上,动态批处理在 CPU 上所做的工作可能大于绘制调用的开销。这会对性能产生负面影响。有关更多信息,请参阅网格的动态批处理。

要求和兼容性

本节包含有关动态批处理的渲染管线兼容性的信息。

渲染管线兼容性

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

使用动态批处理

Unity 始终对动态几何体(如粒子系统)使用动态批处理

对网格使用动态批处理:

  1. 转到编辑>项目设置>播放器
  2. 在其他设置中,启用动态批处理

如果移动网格满足常见使用信息中所述的条件,Unity 会自动将移动网格批量到同一绘制调用中。

网格的动态批处理

网格的动态批处理的工作原理是将所有顶点转换为世界空间。在 CPU 上,而不是在 GPU 上。这意味着,仅当转换工作的资源密集程度低于绘制调用时,动态批处理才是一种优化。

绘制调用的资源要求取决于许多因素,主要是图形 API。例如,在控制台或 Apple Metal 等现代 API 上,绘制调用开销通常要低得多,并且动态批处理通常不会提高性能。若要确定在应用程序中使用动态批处理是否有益,请在使用和不使用动态批处理的情况下分析应用程序。

Unity 可以对阴影投射器使用动态批处理,即使它们的材质不同,只要 Unity 对阴影通道所需的材质值相同即可。例如,多个板条箱可以使用具有不同纹理的材料。尽管材质资源不同,但这种差异与阴影投射器通道无关,Unity 可以在阴影渲染步骤中为板条箱游戏对象批量着色。

限制

在以下情况下,Unity 要么根本无法使用动态批处理,要么只能在有限的范围内应用动态批处理:

  • Unity 无法将动态批处理应用于包含超过 900 个顶点属性和 225 个顶点的网格。这是因为网格的动态批处理具有每个顶点的开销。例如,如果您的着色器使用顶点位置、顶点法线和单个 UV,则 Unity 最多可以批处理 225 个顶点。但是,如果您的着色器使用顶点位置、顶点法线、UV0、UV1 和顶点切线,则 Unity 只能批处理 180 个顶点。
  • 如果游戏对象使用不同的材质实例,Unity 无法将它们批处理在一起,即使它们本质上是相同的。唯一的例外是阴影投射器渲染。
  • 具有光照贴图的游戏对象具有其他渲染器参数。这意味着,如果要批量光照贴图游戏对象,它们必须指向相同的光照贴图位置。
  • Unity 无法将动态批处理完全应用于使用多通道着色器的游戏对象。
  • 几乎所有 Unity 着色器都支持前向渲染中的多个光源。为了实现这一点,他们为每个光源处理一个额外的渲染通道。Unity 仅对第一个渲染通道进行批处理。它无法批量绘制附加的每像素光源的绘制调用。
  • 旧版延迟渲染路径不支持动态批处理,因为它在两个渲染通道中绘制游戏对象。第一遍是轻量级预传递,第二遍渲染游戏对象。

动态生成的几何形状的动态批处理

以下渲染器动态生成几何图形,例如粒子和线条,您可以使用动态批处理对其进行优化:

  • 内置粒子系统
  • 线渲染器
  • 轨迹渲染器

动态生成的几何体的动态批处理与网格的动态批处理的工作方式不同:

  1. 对于每个渲染器,Unity 将所有可动态批处理的内容构建到一个大型顶点缓冲区中。
  2. 渲染器设置批处理的材质状态。
  3. 然后,Unity 将顶点缓冲区绑定到 GPU。
  4. 对于批处理中的每个渲染器,Unity 会更新顶点缓冲区中的偏移量并提交新的绘制调用。

此方法类似于 Unity 提交静态批处理的绘制调用的方式。

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

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

下一篇:Unity3D :手动组合网格 (mvrlink.com)

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