更多的几何体最佳实践

Tutorial

intermediate

+0XP

15 mins

(29)

Unity Technologies

更多的几何体最佳实践

本教程介绍在确定按何种顺序优化移动应用程序中的几何体时的更多最佳实践。

1. 概述

除了先前教程中给出的建议外,创建模型时还应牢记一些注意事项。以下建议并不特定于任何一种 3D 内容创作工具,它们适用于任何项目。

2. 平滑组

使用平滑组自定义顶点法线定义边缘的硬度和改变模型的外观。当美术设计有意使用少量多边形时,平滑组有助于创建更好的着色。

平滑组会影响模型的 UV 岛(基本上是模型的块)以及进行烘焙时法线贴图的质量,因此要格外小心。

如果是对 3D 模型进行了平滑处理,则必须将其从 3D 软件中导出并导入到 Unity 中。

下图显示了将平滑应用于对象时的样子:

3. 网格拓扑

在使用网格拓扑时,请牢记以下提示:

  • 创建 3D 资源时,请保持拓扑合理、整洁。
  • 整洁的拓扑对于变形或进行了动画处理的角色和对象至关重要。
  • 不要痴迷于实现完美的拓扑。应用纹理和材质后,玩家或终端用户是看不到 3D 模型线框的。

下图显示了使用简单几何体和拓扑的岩石峭壁网格的线框。应用材质后,峭壁看起来好多了。

4. 形状夸大

形状夸大是指将对象的某些部分做得比正常的大,以帮助提高可见性。这种方法是否适合你的游戏,取决于所制作游戏的风格。

移动设备的屏幕很小,有时可能难以捕获某些极小的形状。夸大形状有助于克服这一问题。例如,将角色的手做得大一些,以便在小屏幕上更容易看到它们。

下图显示了一个夸大了手部的角色。手、剑、身体比例都以不同方式进行了强调。这样做是为了提高可见性,同时保持较低的多边形数量:

5. 合并网格

为了减少渲染所需的绘制调用次数,可以使用 Mesh.CombineMeshes() 方法将多个网格合并成一个。如果所有网格共用相同的材质,则将 mergeSubMeshes 参数设置为 true,以便从合并组中的每个网格生成一个子网格。

将多个网格合并为一个较大的网格有助于:

  • 创建更有效的遮挡物。
  • 将基于瓦片的资源转变为一个大型、无缝的实体资源。

要应用该技术,请执行以下操作:

  1. 在 Hierarchy 中创建一个空游戏对象,并让它成为要合并的网格的父对象。
  2. 将一个实现 Mesh.CombineMeshes() 的脚本附加到该父游戏对象上。

根据场景的构成,实现该方法对于优化性能可能很有用。通常,大网格比小网格在视野中停留的时间要长,因此请通过实验获得正确的尺寸。

6. 模型设置

  • 不要导入不进行动画处理的 FBX 网格模型上的动画数据:在导入不包含任何动画数据的 FBX 网格时,请在 Import Settings 的 Rig 选项卡中,将 Animation Type 设置为 None。当将网格放入 Hierarchy 时,该设置将确保 Unity 不会生成未使用的动画器(Animator)组件。
  • 避免读/写网格:如果在运行时修改了模型,Unity 会在内存中保留网格数据的副本,以便在保留原始数据的情况下进行修改。如果未在运行时修改模型,请在 Import Settings 的 Model 选项卡中禁用 Read/Write Enabled 选项,以避免创建副本。
  • 静态/动态批处理:静态批处理是一种常见的优化技术,可减少绘制调用的次数。对于由大量在渲染期间不会移动、旋转或缩放的顶点组成的对象来说,它是理想的选择。动态批处理适用于顶点数较少的对象,并且参与批处理的对象在渲染期间不得移动、旋转或缩放。要启用静态批处理,请在 Inspector 中选中 Static。动态批处理适用于顶点数较少的移动对象。

7. 总结

优化网格拓扑、合并网格、夸大形状和配置模型设置都是可用于提高应用程序性能的技术。在下一个教程中,我们将通过一个 Unity 示例项目介绍 LOD 技术。

Complete this Tutorial