地形技术指南

地形的技术设置。

Choose your operating system:

Windows

macOS

Linux

为了使地形系统发挥最佳性能,必须遵守一定的技术限制。以下文档旨在提醒您注意这些限制,并为您提供有价值的信息,以便您能够在地形的美观和性能之间达到最佳平衡。

技术细节

刚开始时,地形高度图的有效维度并不总是立即会显示出来。要确定高度图的哪些维度是有效的,以及除此之外哪些维度是最佳的,还需要对地形的底层架构有一个全面的了解。为了创建一个允许使用巨大地形但又能继续高效利用内存和性能的系统,架构隐式地对高度图的维度进行了限制,这意味着某些维度是有效的,而其他维度则无效。在虚幻引擎中先前的地形系统中,没有任何限制(即任何维度都是有效可行的)或限制相当简单(即只允许两个高度图的平方幂)。地形高度图的限制更加复杂和严格。

地形Actor是采用颜色编码,这样更容易说明每个部分发挥什么作用。地形的边缘用黄色突出显示,每个组件的边缘用浅绿色显示,分段边缘(如果设置为2x2分段)用中绿色显示,单独的地形四边形用深绿色显示。

颜色:

地形组件

黄色:

地形Actor边缘

浅绿色:

地形组件边缘

中绿色:

地形分段边缘

深绿色:

地形单独四边形

Landscape_Create_Preview.png

地形组件

地形分为多个组件,它们是虚幻的基本渲染单元、可视性计算单元和碰撞单元。地形中的组件都具有相同的大小,并且总是呈现为正方形。地形组件的大小是在创建地形时决定的,而选择取决于您希望创建的地形的大小和细节。

各个组件的高度数据存储在单个纹理中。因此,它的大小必须是顶点数的2次幂。沿着两个相邻组件边缘的共享顶点行被复制并存储在每个组件中。因此,考虑每个组件中的四边形数量是有意义的。

下面是一个非常简单的地形(其轮廓为绿色),包含四个组件。每个组件由一个四边形组成。一个组件已经被分离,以显示组件相交处的顶点是如何重复的。

Landscape_Components.jpg

组件分段

组件可以分为1或4(2x2)个子分段。这些分段是地形LOD计算的基本单元。

使用4(2x2)子分段选项可以得到与使用四倍组件(每个组件只有一个子分段)相同大小的高度图,但是使用更少的组件通常可以获得更好的性能。

每个分段的大小(以顶点数量计)必须是2的幂(最大为256x256)。这样,不同的LOD级别可以存储在纹理的mipmap中。这将导致一个组件中各个方向(x或y)的四边形的数量要么是2的幂减1(如果每个组件有1个分段),要么是2的幂减2(如果每个组件有4个分段)。

下面是一个单独的组件(其轮廓为绿色),包含四个分段。每个分段由9(3x3)个四边形组成。同样,您可以看到这些分段相交的顶点都是重复的。

Landscape_Component_Sections.jpg

性能注意事项

组件大小与组件总数的选择是一种性能上的权衡。较小的组件大小可实现更快的LOD过渡,也可实现更多地形的遮挡,但是组件越小,需要的组件越多。

每个组件都有一个渲染线程CPU处理成本,每个分段都是一个绘制调用,所以尽量将这些数字保持在最小值。对于最大的地形,Epic建议最多使用1024个组件。

计算高度图维度

正如您所看到的,地形的维度是基于每个分段中的四边形数量、每个组件中的分段数量以及地形中呈现的组件数量。一旦确定了组件数量和每个组件的分辨率,计算整个地形的维度就变得非常简单。

以下是一些示例场景:

示例1

如果我们从包含64x64个顶点的单个分段组成的组件开始,那么组件的大小就是63x63个四边形。假设我们有一个由10x10个这些组件组成的地形,那么地形中总共有630x630个四边形。现在,如果我们想要导入这样一个地形的高度,我们必须有一个有631x631个顶点的高度图,因为存在的顶点总是比四边形多一行(想象一个1x1四边形 - 它需要4个顶点)。因此631x631是一个有效的地形大小。

示例2

如果某个组件可分成4个子分段,且每个子分段由64x64个顶点组成。这样每个分段就有63x63个四边形,每个组件就有126x126个四边形。如果我们有32x32个这样的组件,我们在每个方向上得到共计126 * 32 = 4032个四边形。因此整个地形将有4033x4033个顶点。

上述例子都以正方形地形为探讨对象。但是,您可以创建非正方形的地形。例如,在第一个例子中,10x10并不特殊。假设每个组件有63个四边形,您可以得到由AxB个组件组成,且总大小为(A*63+1 , B*63+1)个顶点的任意地形。

计算高度图Z缩放

虚幻引擎4在计算地形高度时,读取的数值范围在-256到255.992之间,使用的精度为16位。然后,这个数值会和你在导入高度图时使用的Z缩放值相乘。假如,如果Z缩放值是1,则最大高度大约是256厘米,而最大深度约是-256厘米。因此,当Z缩放值的默认值为100时,高度值的范围在256米(m)到-256米(m)之间。

Landscape Import Scale

为了计算自定义高度,你需要使用一个比例值,把你的自定义高度的范围转换成虚幻引擎使用的-256到256的范围。由于高度范围总计有512个单位(-256到0是256个单位,0到256是256个单位),所以比例是1/512,也就是0.001953125。让我们首先把测量单位换算成厘米,然后乘以这个比例。下面是一个例子:

假设你希望在虚幻引擎中表现夏威夷的最高峰莫纳克亚峰(海拔4207米):

  1. 首先让4270乘以100,将高度单位转换为厘米。结果是420700厘米。

  2. 接着,将转换后的高度乘以比例:420700厘米乘以0.001953125等于821.6796875。

  3. 于是算出Z缩放值是821.6796875,计算出的高度值范围在-210.350厘米到210.350厘米之间。

导入高度图文件后,在"Z缩放"属性中调整数值会改变地形在视口中的预览效果。

通过这种方法,你可以获得山脉的精确高度,但该高度不包含山脉在海平面以下的深度。假如你想在地形高度有上增加一些额外空间,你可以相应地调整你的初始高度。举个例子,莫纳克亚山会在海平面以下继续延申5761米,因此初始总高度应该是9968米。

建议地形大小

为了让事情变得更简单,这里有一些尺寸可以用于在最大化面积的同时最小化地形组件的数量。

整体大小(Overall Size) (顶点)

四边形 / 分段(Quads / Section)

分段 / 组件(Sections / Component)

组件大小(Component Size)

组件总数(Total Components)

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) 下启用图层调试模式。有关视口的地形相关视图模式的更多信息,请参阅 地形查看器

启用图层调试模式后,将显示可用于选择单独颜色信道的单选按钮,且目标图层将包含在列表中。

Landscape_Target_Debug.png

选择一个信道将对地形应用一个着色器,该着色器显示所选目标图层的信道所覆盖的区域。

Landscape_Target_Debug_Demo.png

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消