地形技术指南
从地形系统获得最佳性能的前提是对技术规范的遵守。以下文档将说明这些技术规范,并提供一些宝贵建议,助您达到美丽画面和流畅性能间的最佳平衡。
技术细节
初始时,地面高度图的有效维度不会立即便变得明显。对地形的底层结构有透彻的理解后方能确定高度图维度为有效或最佳。为创建支持巨型地貌且高效利用内存和性能的系统,建筑隐含地在高度图维度上应用了限制,意味着一些维度为有效,而另一些为无效。在虚幻引擎旧版本的地形系统中几乎不存在任何限制(即任意维度皆为有效并可使用),存在的限制也非常简单(即只允许两个高度图的方幂)。地形系统中的高度图限制更加复杂和严格。
地形 Actor 拥有颜色编码,可以明确分辨每个分段的作用。地形的边缘以黄色高亮,每个组件的边缘为浅绿色,分段边缘(如设为 2x2 分段)为中绿色,个体地形四边形为深绿色。
颜色: | 地形组件 |
---|---|
黄色: | 地形 Actor 边缘 |
浅绿色: | 地形组件边缘 |
中绿色: | 地形分段边缘 |
深绿色: | 地形个体四边形 |
地形组件
地形被划分为多个组件,即为虚幻引擎的渲染、可视性计算和碰撞的基础单元。地形中的组件尺寸均相同,且为方形。地形创建时将决定地形组件的尺寸,选择取决于需要创建的地形尺寸和细节。
每个组件的高度数据存储在单个纹理中。因此,其尺寸必须为 2 的幂次方顶点数量。两个相邻组件边缘上的共享顶点被复制并存储在每个组件中。因此,需要在每个组件中考虑四边形的数量。
简单的地形如下图所示(轮廓为绿色),它包含四个组件。每个组件由单个四边形组成。已经分离出一个组件,用于展示组件相交位置顶点的复制方式。
组件分段
组件可被划分为 1 个或 4 个(2x2)子分段。这些分段是地形 LOD 计算的基础单元。
使用 4 个(2x2)子分段选项获得的高度图与在一个子分段上使用 4 次组件所获得的高度图相同,但使用的组件次数越少,运行性能越好。
每个分段的尺寸(以顶点数为单位)必须为 2 的幂次方(最大为 256x256)。因此不同的 LOD 层级可存储在纹理的 mipmap 中。这将使一个组件中四边形的数量为 2 的幂次方减 1(如每个组件有一个分段)或 2 的幂次方减 2(如每个组件有四个分段)。
一个单独组件如下图所示(轮廓为绿色),它包含四个分段。每个分段由 9 个(3x3)四边形组成。可再次看到分段相交处复制的顶点。
计算高度图维度
如您所见,地形的维度基于每个分段中的四边形数量、每个组件中的分段数量、以及地形中的组件数量。确定组件数量和每个组件的分辨率后,整体地形维度的计算则十分简单。
以下是一些范例:
范例 1
如组件由包含 64x64 个顶点组成的单个分段组成,则组件尺寸为 63x63 四边形。如地形中有 10x10 个这样的组件,则地形中共有 630x630 个四边形。如果我们要将高度导入此地形,则高度图需要有 631x631 个顶点,因为顶点总是比四边形多出一行(1x1 的四边形拥有 4 个顶点)。因此 631x631 为有效的地形尺寸。
范例 2
如组件被分为 4 个子分段,每个子分段由 64x64 个顶点组成。因此每个分段拥有 63x63 个四边形,每个组件拥有 126x126 个四边形。如有 32x32 个这样的组件,则每个方向上共有 126 * 32 = 4032 个四边形。因此总地形拥有 4033x4033 个顶点。
这些范例中使用的均为方块地形。然而也可创建不为方形的地形。例如,范例 1 中 10x10 的组件并不特殊。假设每个组件拥有 63 个四边形,则可获得 AxB 组件总尺寸顶点数为(A*63+1、B*63+1)的任意地形。
性能注意事项
对组件尺寸和组件总数量进行选择是为保证性能进行的平衡。组件尺寸越小,LOD 的过渡越快,并对更多地形构成遮挡,但需要的组件数量越多。
每个组件均有渲染线程 CPU 处理消耗,每个分段均为绘制调用,因此需要将它们的数量控制到最低。Epic 推荐使用的巨型地形最大组件数量为 1024。
推荐地形尺寸
为简化操作,以下将提供一些用于最大区域并最小化地形组件数量的尺寸。
整体尺寸 (顶点) | 四边形 / 分段 | 分段 / 组件 | 组件尺寸 | 总组件数 |
---|---|---|---|---|
8129x8129 | 127 | 4 (2x2) | 254x254 | 1024 (32x32) |
4033x4033 | 63 | 4 (2x2) | 126x126 | 1024 (32x32) |
2017x2017 | 63 | 4 (2x2) | 126x126 | 256 (16x16) |
1009x1009 | 63 | 4 (2x2) | 126x126 | 64 (8x8) |
1009x1009 | 63 | 1 | 63x63 | 256 (16x16) |
505x505 | 63 | 4 (2x2) | 126x126 | 16 (4x4) |
505x505 | 63 | 1 | 63x63 | 64 (8x8) |
253x253 | 63 | 4 (2x2) | 126x126 | 4 (2x2) |
253x253 | 63 | 1 | 63x63 | 16 (4x4) |
127x127 | 63 | 4 (2x2) | 126x126 | 1 |
127x127 | 63 | 1 | 63x63 | 4 (2x2) |
图层调试模式
Layer Debug 模式在视口中地形上显示特定层的权重。可在视口内 View 菜单下的 Landscape Visualizers 中启用 Layer Debug 模式。如需了解视口的地形相关查看模式的更多内容,请查阅 地形可视化器 。
启用 Layer Debug 模式后,列表中将显示目标图层和选择单个颜色通道的单选按钮。
选择通道的操作将把着色器应用到地形上,地形将显示所选目标图层通道覆盖的区域。