细节级别

Tutorial

intermediate

+0XP

25 mins

(27)

Unity Technologies

细节级别

在本教程中,你将了解细节级别 (LOD) 有助于在不同距离处突出显示 3D 模型细节同时优化应用程序性能的不同用例。

1. 概述

借助细节级别 (LOD),你可以根据对象到摄像机的距离控制为场景中每个对象渲染的顶点数量。这样做可提高应用程序的性能。

此外,LOD 还能避免上一个教程中讨论的远处对象的微三角形问题。我们建议你为每一个在应用程序运行期间与摄像机的距离会发生改变的 3D 对象提供 LOD。

下图显示了如何使用 LOD 管理降低 3D 模型的复杂性,同时在模型移离摄像机时保留适当的细节级别:

在使用 LOD 时,请牢记以下几点:

  • 当减少三角形数量时,我们需要关注三角形将如何影响对象的轮廓。
  • 在较平坦的区域移除更多的多边形。
  • Mipmap 在功能上相当于纹理的 LOD,应与模型配合使用。我们稍后将在纹理项目中介绍 Mipmap
  • LOD 也可用于降低着色器的复杂性。对于更远处的 3D 对象,可以进行着色器和材质优化。例如,当对象远离摄像机时,可以减少其使用的纹理数量。

2. 何时不使用 LOD

在某些情况下,不适合使用 LOD。例如,在摄像机视图和对象都是静态的或对象已使用较少的多边形的应用程序中,应避免使用 LOD。

LOD 必须保存网格数据以便实时使用,因此会带来内存开销和更大的文件大小。

下图显示了一个未使用 LOD 的场景(因为该场景是静态的)。在这种情况下,可以使用其他优化技巧,例如移除对玩家不可见的多边形:

3. 为什么使用 LOD

当对象移离摄像机时,其细节会变得不那么明显。在 20 米远的地方,很难看出有 200 个三角形的对象与有 2,000 个三角形的对象有什么区别。你肯定不希望使用超出场景实际需要的三角形数量,因此使用 LOD 是一种优化应用程序而不带来显著影响的好方法。

使用 LOD 的其他好处包括:

  • 减少了必须处理的三角形数量,因此可提高性能。
  • LOD 有助于缓解微三角形带来的问题。

观察下图可以发现,即使远处对象具有不同的多边形数,看起来也是一样的:

4. 适当的三角形数量

在使用 LOD 时,请牢记以下几点:

  • 将每个 LOD 级别之间的三角形数量减少 50% 通常是值得的。
  • 不要在 LOD 较低的对象上使用密集三角形区域。它们仅在对象靠近时可见。
  • 查看 LOD 在距摄像机不同距离处的样子。较低的 LOD 意味着近距离观看时分辨率较低,但对于离摄像机较远的对象来说是可以接受的。

下图显示了每个级别的多边形数量下降 50% 时对象的外观:

下图显示了靠近观察 LOD 较低的对象时的样子。它看起来不怎么细致,但在离摄像机较远时,它的外观还是可以接受的:

如果不在 LOD 较低的对象上减少足够的多边形数量,会对应用程序的性能产生负面影响。这是因为 GPU 必须处理超出实际需要的顶点数量。

但是,如果在降低较低 LOD 对象的多边形数量时过于激进,对象的细节会实时地突然出现和突然消失。这可能会破坏用户的体验。

5. LOD 级别数

对象应具有的 LOD 数量没有明确规定。这取决于对象的大小和重要性。例如,动作游戏中的角色或赛车游戏中的汽车可以从使用更多的 LOD 级别获益,而不是像树这样较小的背景对象。

如果使用的 LOD 级别太少,就无法带来太大的性能提升。而且,如果级别之间的多边形缩减量跳动幅度过大,则在切换 LOD 时会显得十分突兀。如果使用的 LOD 级别太多,又会影响应用程序的性能。

此外,随着 LOD 的增多,内存使用量也会增加,因为必须在某个地方存储更多的网格,这会导致文件变大。但最大的成本是你的时间,特别是你以手动方式创建每个级别时。

6. 创建 LOD 网格

使用 3D 软件手动创建 LOD 网格时,可以移除循环边或减少对象上的顶点数。虽然这可以给你更多的控制权,但可能需要更长的时间才能完成。

自动创建 LOD 网格时,可以使用内置修改程序或单独的 LOD 生成软件。内置修改程序有 3ds Max 中的 ProOptimizer、Maya 中的 Generate LOD Meshes 功能等。

7. 总结

使用 LOD 网格是在对象与摄像机的距离发生改变时尽可能减少对象上的多余几何体来优化应用程序的巧妙方法。在下一个教程中,我们将介绍针对移动应用程序优化几何体的更多最佳实践。

Complete this Tutorial