14. 设置细节层级(LOD)

概要

细节层级(LOD)使艺术家们能够根据到相机的距离有效利用系统资源和屏幕空间。

../../_images/lods_Effect.png

本章我们将验证示例文件Aura01.efkefc可以在此处下载。

../../_images/lods_NodeList.png

在这个特效中,你可以看到一个叫做Particle的节点。它生成了从龙卷风的底部飞向顶部的小颗粒。当相机靠近特效时,你能看到这些粒子,它们为特效增加了很棒的细节。

../../_images/lods_ParticleInViewer.png

然而,如果摄像机离得很远,它们就会很小,几乎看不到,但仍然需要在每一帧中进行计算和处理。这是细节层级(LOD)的一个很好的例子,因为可以根据距离来简化特效。如果一个特效节点离视窗很远,它可以被隐藏或完全关闭。

层级设置

让我们设置要使用的层级。打开窗口 > 细节层级(LOD)

../../_images/lods_Panel.png

这个面板设置了有效的细节层级和每个层级的距离。0级是基本层级,它总是从距离0开始,当没有其他级别可供选择时就会使用。一个特效中最多可以使用四个层级。

让我们启用层级1。 默认情况下,最小距离被设置为16,在这个例子中使用默认值就很好。你可以自由设置一个层级的最小距离,但值必须在上一个层级和下一个层级之间。

../../_images/lods_Panel2.png

在编辑器中使用鼠标滚轮来改变摄像机的位置。如果与特效的距离大于16,你会看到播放器右下角的Current LOD变为1。

设置粒子节点

../../_images/lods_NodeTreeSelectors.png

你会注意到,在启用第二个层级后,节点层级结构中的每个颜色按钮都显示为两行,每个层级一行。它显示了每个特效节点启用的层级。点击这个按钮可以更改每个节点选择的层级。

点击Particle节点附近的这个按钮。

../../_images/lods_NodeConfiguration.png

在这里,你可以选择你希望这个节点在哪一层级被启用并正常运行。默认情况下,每个节点在所有层级上都是启用的,但是我们想在层级1上禁用Particle节点,所以我们取消选中该层级。

在选择层级的下方,你可以改变当前LOD未被选中时节点的行为。有三种不同的行为可供选择:

  • 隐藏粒子 - 粒子将继续生成并更新,但不再被渲染。这可以减少GPU的使用,但是在更新时仍然会消耗CPU资源。

  • 停止生成新粒子 - 已经生成的粒子将继续更新和渲染,但新的粒子将不会生成。这可以确保粒子不会突然被隐藏起来,直到它们的生命周期结束前仍然可见,从而使层级之间的过渡更加平滑。

  • 停止生成新粒子并隐藏现存的粒子 - 结合了之前的两种行为。不会生成新粒子,已经生成的粒子将被隐藏。但是,请注意,已经生成的粒子将继续被更新,直到它们被销毁。

默认选项是隐藏粒子。 我们选择停止生成新粒子并隐藏现存的粒子,它适合这个例子。

检查结果

查看视窗右下角的统计数据以检查设置。

  • Current LOD: 当前有效的细节层级

  • D:当前渲染中的Draw call次数。

  • V:当前渲染中的顶点数量。

  • P:当前渲染中的粒子数。

如果一切操作正确,那么在层级0时,你应该看到大约115个粒子。然后,如果你让摄像机远离特效,到层级1的距离,你会看到粒子的数量逐渐减少到大约15个。

总结

本章介绍了如何设置细节层级,以及如何配置特效节点,使其根据当前的细节层级改变行为。建议在特效制作过程的最后一步设置细节层级。

细节层级是非常通用的,可以用许多不同的方式来设置。通过为每个层级创建一个单独的根节点,你甚至可以完全替换一定距离下的特效。优化特效的过程可能很棘手,但有时它就是勉强运行在30帧的游戏与稳定运行在60帧的游戏的区别。