UDN
Search public documentation:

TerrainDesignCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3主页 > 地形系统 > 地形设计: 指南和信息

地形设计:指南和信息


概述


虚幻引擎3支持一个灵活的地形系统,它提供了各种视觉风格及应用。该地形系统包括以下系统:基于 heightmap(高度图) 的系统,它可以可视化地描画小山、峡谷、山脉、河流、道路以及其它更多东西的;多层次地形材质系统,它支持真实世界的贴图文件,比如泥土、岩石、沙漠以及泥泞。多层次的装饰系统,它通过渲染类似于绿草、野草、矮树丛以及花、甚至那些小的岩石等东西,为系统提供了额外的灵活性及真实性。通过使用这些系统,您可以很容易地实现各种不同的风景及主题。

UE3Terrains.jpg

地形创建

一般使用这两种技术其中的一种来创建地形: 直接在地形网格物体上手动地描画来创建山坡和峡谷;或者导入外部创建的地形高度图。另外,高度图信息可以从 DEMs- Digital Elevation Model(数字高程模型)中获得。展现泥土、草原和岩石的材质层可以使用地形alpha贴图来创建,地形alpha贴图可以决定贴图混合到地形中的位置。

地形应用和地图布局

地形也可以用于一些小区域,比如城市、围绕起来的院子甚至模仿堆积起来的残骸;或者整个游戏地图可以基于一个大的室外地形设计,这个地形可以由各种地理特点组成比如山脉和峡谷。

地形通常和专门设计的地理网格物体结合使用,从而构建大的石头、孤立的山丘、悬崖甚至水上飞机。其它的网格物体也可以用作为出现在地形上的各种各样的植被。使用地形进行视频游戏的地图设计及布局的地图,通常会使用地形来在游戏播放区域的周围创建不可通行的山脉或悬崖,从而可以限制游戏玩家的运动,并防止他们离开或跌落到游戏地图“世界”的外面。

地形系统在本质上渲染一个X*Y排网格物体三角形,它们的顶点Z值决定了在每个网格的十字交叉处的三角形的海拔高度。其中关卡设计人员面临的一个挑战是它们需要为这个地形网格物体选择适当的布局和分辨率,使得地形相对于性能设置产生最好的视觉质量。

UE3TerrainAcc.jpg

地形尺寸

虚幻引擎3支持的最大的世界尺寸是512k x 512k (524288 x 524288) 个虚幻单位。如果按照默认的引擎单位1UU=2cm(10km x 10km)计算,这大约近似等于10平方千米。游戏性区域的实际尺寸通常远比这个尺寸小,一般基于地形的室外地图的尺寸少于1平方千米。注意,那些放置在最大世界尺寸外面的几何体,比如天空球体,仍然是进行渲染的,但是“世界”几何体必须在这个总的可用区域之内。

地形高度图XY分辨率和通过Terrain.NumPatches设置的一样, 也就是128x128 或 256x256,Display.DrawScale指出了每个地形块的尺寸,这样便最终决定了地形网格物体的总面积。为块尺寸和块数量选择最有效的一组值,从而在地形细节和渲染性能之间寻找最好的平衡。

由于性能和文件大小的原因,我们不推荐您创建大于1024x1024块的地形。比如,一个2048x2048的地形包含8百万个三角形,当在编辑器中运行时速度很慢并且会导致生成一个非常大的地图文件。在大多数情况下,即使块为512x512的地形都可能导致某些技术问题,至于使用如此大的地形是否是个合适的选择,需要尽可能地检查和重新评估地图设计来进行决定。

高度图 位-深度

当使用外部高度贴图文件创建地图时,为了将其导入到虚幻引擎地形系统中,通常使用16-位的高度图格式和文件。如果由于标准绘图软件支持的方便选择使用8-位的灰度高度图文件,那么将会导致地形仅使用1/256的可用高度范围。这通常会导致地形呈现出令人不爽的阶梯式的梯田的外观。

当使用外部高度图文件时,我们不推荐您使用标准的绘图软件在高度图上描画细节,因为它仅能在当前的视频软件上编辑和显示8-位的灰度化图。这意味着对于描画到8-位显示系统上的灰度化图的每个单独的颜色来说,实际上有256个高度水平不能真正地显示出来。换句话说,在一个8-位的灰度化显示上,值0(黑色)实际上是从0到255的16-位值,值为1实际上是指256到511的16-位值,等。

UE3Terrain16v8.jpg

保持在网格上

地形actor的Advanced.bEdShouldSnap属性应该总是保持为选中状态(True),以便地形块仍然保持在网格上。这个选项和值为2的幂数的Display.DrawScale 和 Display.DrawScale3D.X/.Y结合使用,将会使得所有的块都能正确地符合到网格的所有边缘上。

一旦地形actor被移动到地形中的某个位置,请确保设置Advanced.bLockLocation为选中状态(true),从而可以锁定地形actor,并且可以阻止它在编辑器中的意外移动。

UE3TerrainLocked.gif

2的幂数

通常在使用地形和其它游戏资源时,会遇到短语"power-of-two(2的幂数)"。2的幂数是指根据公式2^n计算出的值,这里的n是任何大于等于0的数。比如2^0 = 1. 2^1 = 2. 2^2 = 4. 2^3 = 8. 2^4 = 16等。一般用于地形的2的幂数的值包括1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024。

块的数量


地形actor支持用户自定义的网格物体块(四方形)数量,正如在地形属性中的Terrain.NumPatchesX 和 Terrain.NumPatchesY中所指出的。这两个属性指出了地形网格物体的X 和Y维度上的块的数量。

块的数量和地形的DrawScale相乘来决定地形网格物体在编辑器中将要覆盖的总面积。

TerrainPatches.gif

NumPatches属性所支持的精确的数值根据Terrain.MaxTesselationLevel 和 Terrain.MinTesselationLevel而变化。比如,NumPatches的值是否可以是40 或 85 或 甚至 255 或 256,它是根据TesselationLevel的不同而变化的。

如果MaxTesselationLevel 和 MinTesselationLevel属性都设置为1,那么地形尺寸便可以指定任何在1和支持的最大地形尺寸之间的任何尺寸。这允许您创建尺寸为奇数的地形,比如41x79。当TesselationLevel的值为1时的缺点是平截头体中的所有地形三角形都将会描画,且不会使用动态距离LOD细分优化系统。这对于较小的地形块是可以接受的,但是对于大的地形系统,这将会对渲染的地图的帧频率造成影响。

注意: 由于性能和文件大小的原因,我们不推荐您创建大于1024x1024块的地形。比如,一个2048x2048的地形包含8百万个三角形,当在编辑器中运行时速度很慢并且会导致生成一个非常大的地图文件。在大多数情况下,即使块为512x512的地形都可能导致某些技术问题,至于使用如此大的地形是否是个合适的选择,需要尽可能地检查和重新评估地图设计来进行决定。

MinTesselationLevel属性的默认值通常设置为1。如果它被设置为和MaxTesselationLevel属性相同的值,那么结果将会和把它们两个的属性都设置为1一样,不会发生多边形细分。如果MinTesselationLevel设置为MaxTesselationLevel的一半, 也就是Min = 2 和 Max = 4,那么多边形细分区域的数量将会变少并且较远距离的地形将不会具有增加的优化块。换句话说,如果Min:Max的比值为1:4,将会导致两个优化的距离区域,如果Min:Max比值为2:4将会导致仅有一个优化的距离区域。

如果MaxTesselationLevel的设置为除1以外的其它值来启用距离LOD优化系统,那么NumPatches值则必须限定为MaxTesselationLevel值的倍数。比如,如果MaxTesselationLevel是4,那么NumPatches可以是12, 16, 20, 24, ...,等。如果MaxTesselationLevel是8,那么NumPatches的值可以是8, 16, 24, 32, 40, 48, ...,等。强烈推荐您使用动态距离LOD多边形细分优化,尽管这样会限制地形的尺寸仅能为MaxTesselationLevel的倍数。

TerrainTesselation.gif

描画比例


Draw Scale X and Y(描画比例X和Y)

每个地形块的尺寸由地形actor的Display.DrawScale 和 Display.DrawScale3D属性决定。这两组值相乘在一起决定了整个地形块的大小。换句话说,如果DrawScale为1.0,DrawScale3D为256.0,那么将导致块的尺寸是256个虚幻单位(2.0 * 512.0)。如果DrawScale为2.0,DrawScale3D为512.0,那么将导致块的尺寸是1024个虚幻单位(1.0 * 256.0)。如果DrawScale为0.5,DrawScale3D为128.0,那么将导致块的尺寸是64个虚幻单位(1.0 * 256.0)。

DrawScale属性通常应该保持为默认值1.0,可以通过调整DrawScale3D属性的值来修改地形比例从而可以获得默认尺寸256以外的地形尺寸。DrawScale3D包含着关于地形网格物体的每个X、Y和Z 方向的独立的属性。X和Y影响地形网格物体的宽度和长度,而Z影响地形网格物体的深度(海拔范围)。

如果想创建具有特定面积的地图,比如1平方千米,则您必须选择块数量和描画比例的近似值。关于计算这些值的数学表达式是:

地形面积(以虚幻单位为单位) = ( NumPatchesX * ( DrawScale * DrawScale3D.X )) * ( NumPatchesY * ( DrawScale * DrawScale3D.Y ))

这个计算结果的单位是Unreal Units(虚幻单位),可以通过转换公式1 unreal unit=2厘米来将其转换为标准的度量尺寸。这是引擎默认的比例尺大小。不同的游戏使用的引擎可以根据开发人员设置使用不同转换比例。

选择DrawScale的值主要依赖于两个因素,期望的地形细节质量和期望的渲染性能。较高的地形细节需要一个较小的DrawScale,这将会导致在特定的地形区域内产生较多数量的块,然而较快的渲染速度则需要特定的地形区域内具有较少的块,这可以通过设置较大的DrawScale来达到这个目的。

有一个较好的经验方法是,对于小的地形区域,比如包围起来的院子,DrawScale3D.X/Y的范围可以是从32到128之间的值,一般将这个值设置为64。对于大的地形区域,比如完全的室外区域,DrawScale3D.X/Y的值应该在128 和 512之间,一般使用的值是256。

TerrainDrawScale.gif

Draw Scale Z(描画比例Z)

DrawScale3D.Z属性决定了沿着Z方向(上下方向)的每个地形网格物体顶点位置的 间隔尺寸 。DrawScale3D.Z的值越低,高度阶梯越细致; DrawScale3D.Z值越大,高度阶梯越大。因为总共只有65536高度值,所以DrawScale3D.Z也决定了地形的所有高度范围。

DrawScale3D.Z上还有一些其它的信息,在下面进行了介绍。

地形块尺寸区域


每个地形块(正方形)的尺寸,由Display.DrawScale 和 Display.DrawScale3D属性决定。这个表格以和虚幻单位等价的英尺和米为单位显示了块的近似尺寸,它基于默认的虚幻引擎度量比例 1虚幻单位等于2厘米的计算公式进行等价计算。英制到米制的转换是1 英寸 = 2.54 cm。

DrawScale(描画比例) 块尺寸(虚幻单位) 块尺寸(米) 块尺寸(英尺)
64 64 uus 1.28m (128cm) 4.2ft (50.39 in)
80 80 uus 1.60m (160cm) 160.02cm (159.99 cm)
96 96 uus 1.92m (192cm) 192.02cm (192.00 cm)
112 112 uus 2.24m (224cm) 224.03cm (224.00 cm)
128 128 uus 2.56m (256cm) 256.03cm (256.01 cm)
160 160 uus 3.20m (320cm) 320.04cm (319.99 cm)
192 192 uus 3.84m (384cm) 384.05cm (384.00 cm)
224 224 uus 4.48m (448cm) 448.06cm (448.01 cm)
256 256 uus 5.12m (512cm) 512.06cm (511.99 cm)
288 288 uus 5.76m (576cm) 576.07cm (576.00 cm)
320 320 uus 6.40m (640cm) 640.08cm (640.00 cm)
352 352 uus 7.04m (704cm) 704.09cm (704.01 cm)
384 384 uus 7.68m (768cm) 768.10cm (767.99 cm)
512 512 uus 10.24m (1,024cm) 1,024.13cm (1,024.00 cm)

地形尺寸对地图文件大小


地形的总尺寸、贴图层的数量以及类似于光照贴图分辨率其它的地形属性决定了添加到地图文件大小上的其它资源的量。较大的地形会迅速地向地图中添加很多兆字节到地图文件中。

下面的列表给出了按照以下关卡设置所得到的文件大小:

  • 具有一个地图actor和一个定向光源的空的干净的地图。
  • 没有地形层。
  • 没有经过烘焙。

高度图 三角形数量 文件大小
64x64 8,192 125kb
128x128 32,768 3.2MB
256x256 131,072 7.2MB
512x512 524,288 28.7MB
1024x1024 2,097,152 110MB

下面的列表给出了按照以下关卡设置所得到的文件大小:

  • 具有一个地图actor和一个定向光源的空的干净的地图。
  • 一个1024x1024的贴图、一个TerrainMaterial(地形材质)、和一个TerrainLayerSetup(地形层设置)。
  • 没有经过烘焙。

高度图 三角形数量 文件大小
64x64 8,192 4MB
128x128 32,768 6.38MB
256x256 131,072 10.6MB
512x512 524,288 32.9MB
1024x1024 2,097,152 118MB

地形尺寸对地图面积


这个表格列出了当地形块和描画比例是各种不同常用值时地形尺寸在真实世界中的等价尺寸。

地形尺寸通过以下公式进行计算NumPatches * ( DrawScale * DrawScale3D )= Unreal Units(虚幻单位)

1 Unreal Unit = 2厘米. 1 英尺 = 30.48cm 或 0.3048 米。1 米 = 3.280839895 英尺. 1000 米 = 1 千米. 5280 英尺 = 1 英里。

为了决定所期望的地形的总面积,可以从表格中以 米/千米 或 英尺/英里 为单位查找宽度和长度来获得所需要的NumPatches 和 DrawScale。

NumPatches(块数量) DrawScale(描画比例) 长度(Unreal Units) 英尺
64 64 4096 uus 81.92 m 268.77 ft
64 96 6144 uus 122.88 m 12,288.01 cm
64 128 8192 uus 163.84 m 16,383.91 cm
64 192 12288 uus 245.76 m 24,576.02 cm
64 256 16384 uus 327.68 m 32,765.09 cm
64 384 24576 uus 491.52 m 49,152.05 cm
64 512 32768 uus 655.36 m 65,535.96 cm
128 64 8192 uus 163.84 m 16,383.91 cm
128 96 12288 uus 245.76 m 24,576.02 cm
128 128 16384 uus 327.68 m 32,765.09 cm
128 192 24576 uus 491.52 m 49,152.05 cm
128 256 32768 uus 655.36 m 65,535.96 cm
128 384 49152 uus 983.04 m 98,304.10 cm
128 512 65536 uus 1.3km (1310.72 m) 4300.26 ft
256 64 16384 uus 327.68 m 32,765.09 cm
256 96 24576 uus 491.52 m 49,152.05 cm
256 128 32768 uus 655.36 m 65,535.96 cm
256 192 49152 uus 983.04 m 98,304.10 cm
256 256 65536 uus 1.3km (1310.72 m) 4300.26 ft
256 384 98304 uus 1.97km (1966.08 m) 1.22 miles (6450.39 ft)
256 512 131072 uus 2.6km (2,621.44 m) 2.62 km (262,143.85 cm)
512 64 32768 uus 655.36 m 65,535.96 cm
512 96 49152 uus 983.04 m 98,304.10 cm
512 128 65536 uus 1.31km (1310.72 m) 4300.26 ft
512 192 98304 uus 1.97km (1966.08 m) 1.22 miles (6450.39 ft)
512 256 131072 uus 2.62km (2621.44 m) 1.63 miles (8600.52 ft)
512 384 196608 uus 3.93km (3932.16 m) 2.44 miles (12900.79 ft)
512 512 262144 uus 5.24km (5242.88 m) 3.26 miles (17201.05 ft)
1024 64 65536 uus 1.31km (1310.72 m) 4300.26 ft
1024 96 98304 uus 1.97km (1966.08 m) 1.22 miles (6450.39 ft)
1024 128 131072 uus 2.62km (2621.44 m) 1.63 miles (8600.52 ft)
1024 192 196608 uus 3.93km (3932.16 m) 2.44 miles (12900.79 ft)
1024 256 262144 uus 5.24km (5242.88 m) 3.26 miles (17201.05 ft)
1024 384 393216 uus 7.86km (7864.32 m) 4.89 miles (25801.57 ft)
1024 512 524288 uus 10.49km (10485.76 m) 6.52 miles (34402.1 ft)

优化地形


虚幻引擎中有很多功能除了为特定目的选择最佳地形尺寸外还可以用于优化地形。

  • DrawScale XY一般使用256和512之间的值并且最好不要低于128。低于128的值将会渲染密集的网格物体,那将会需要很大的渲染力度。
  • 要充分地利用内置的距离LOD多边形细分功能,可以通过设置Terrain.MinTesselationLevel 为1并且 Terrain.MaxTesselationLevel为4来获得该功能。禁用多边形细分功能通常会导致在平截头体中渲染更多的地形三角形,从而需要更大的渲染力度。
  • 限制应用到地形上的材质的数量。应用的材质越少设置越简单,则渲染速度越快。

注意,由于性能原因,目前禁用了地形材质上的高光。如果您在应用一个新的贴图层或增加了现有地形材质的复杂度后看到了较大的颜色块或其它类似的异常的东西,那么就是因为组合的地形材质有太多的贴图或太多的指令以至于不能进行正确地渲染。尽管它依赖于视频适配器硬件,但是一般的限制都是16位的贴图样本。每个地形上结合的层次应该不超过总贴图数量16,其中有3个贴图用于光照贴图、至少有1个用于层混合贴图、通常剩下的12个可用贴图可以用于地形层。层混合贴图被打包到32-位贴图的ARGB组件中,每个贴图最多支持4个混合层。随着要混合的层的数量的增加,混合贴图的数量也随着增加。请确保使用"Check map for errors(检查地图错误)"选项来查看应用到地形上的组合材质是否有地图错误

  • 隐藏地形中永远不能看到的或者放置在其它几何体和资源比如CSG画刷或StaticMesh物体下面的三角形。这可以通过使用Visibility Tool(可见性工具)编辑地形,然后点击您想隐藏的块来实现。设置为隐藏的地形区域必须足够的大,以便可以获得很大的性能提高,从而这样做才值得,换句话说,不要隐藏在每个箱子、桶或树下的一个独立的块。

描画比例XY 及下沉地图资源


正如前面所提到的,地形actor的Advanced.bEdShouldSnap属性应该总是保持为选中状态(True),以便地形块仍然保持在网格上。这个选项和值为2的幂数的Display.DrawScale 和 Display.DrawScale3D.X/.Y结合使用,将会使得所有的块都能正确地符合到网格的所有边缘上。在大多数情况下,地形块将会为X和Y应用一个正方形的长宽比,因为如果每个块都是正方形,那么任何对于可见性以及沉没到地形中的资源的编辑通常都会被简化。

为什么地形网格物体XY很重要

地形DrawScale XY决定了地形网格物体中的每个块的尺寸。这个尺寸也决定了对于给定的顶点高度差来说的地形块的最大倾角。DrawScale XY尺寸越小,则便允许更陡峭的斜坡,这对于有时需要包含陡峭悬崖的地形是有用的。

TerrainSlope.gif

当创建类似于CSG(构造实体几何)和静态网格物体的资源来在地图中进行应用时,通常使用的一个惯例是缩放所有的资源以便它们可以正确地匹配到2的幂数的网格空间内。如果地形块的尺寸也缩放为2的幂数,那么陷入到地形中的类似于网格物体建筑物的资源将会整齐地沿着地形块的边缘进行排列,并且这些在内部不可见的块或者沉下资源的下面的块通常可以通过使用Terrain Visibility Tool(地图可见性工具)来进行可能的性能优化。如果资源具有内部,比如建筑物,那么在建筑物内部的地形块必须被隐藏,从而保证它们不会妨碍玩家在建筑内部的运动。

UE3TerrainSink.gif

描画比例Z对高度范围


Display.DrawScale3D.Z指出了在Z方向上要执行的缩放的量。这决定了地形顶点以及三角形可以到达的所有高度范围。当创建一个新的地形时,把DrawScale3D.Z改为一个比默认值256低的值是可取的。推荐该值的范围在64和128之间。

Z为什么重要

DrawScale3D.Z在两个地方是非常重要的,它决定了地形可以扩展到的最大高度范围,并且它决定了顶点Z位置的 间隔尺寸 ,该间隔尺寸在描画时是个相对值。较小的DrawScale Z值允许您对顶点高度进行更加精细的控制。比如,参考以下表格中的信息,DrawScale3D.Z值为2048,将会导致仅能每隔32厘米或大约1英尺的高度调整一次顶点。如果要调整的地形在一个建筑物或其它插入资源的边缘周围,那么1公尺的移动是非常重要的,因此需要更加精细的编辑控制。

TerrainZ.gif

高度范围

以下表格列出了常用的DrawScale3D.Z值和它所支持的等价的最大高度范围,即从最低到最高的高度图值(0或黑色是最低G16高度,65535或白色是最高G16高度)。在实际应用中DrawScale3D.Z的值很少大于64。如果导入了一个外部G16高度图文件并且它需要DrawScale3D.Z的值大于从64到128之间的值,那么便应该改变高度图,以便它正在使用更多的可用的16-位范围,从而使的任何编辑的间隔尺寸和描画过程中的顶点移动是精致的。

1个Display.DrawScale3D.Z 单位 =总的高度图高度范围的512Unreal Units,所以这时实际比是1:512。 把您想使用的总高度范围(以Unreal Units为单位)和512相除便获得了您应该使用的DrawScale3D.Z的值。

每个梯级的UUs值是最大的高度范围除以16位高度图分为65536所得出的值。

1 Unreal Unit = 2厘米. 1 英尺 = 30.48cm 或 0.3048 米。1 米 = 3.280839895 英尺. 1000 米 = 1 千米. 5280 英尺 = 1 英里。

DrawScale3D.Z Max Altitude(最大高度) UU/梯级 范围(米) 毫米/梯级 范围(英尺) 英寸/体积
1 512 uus 0.0078125 10.24 m 0.15625 33.6 ft 0.00615"
2 1024 uus 0.015625 20.48 m 0.3125 2,047.95 cm 0.0123"
4 2048 uus 0.03125 40.96 m 0.625 4,095.90 cm 0.0246"
8 4096 uus 0.0625 81.92 m 1.25 8,192.11 cm 0.0492"
16 8,192 uus 0.125 163.84 m 2.5 16,383.91 cm 0.0984"
24 12,288 uus 0.1875 245.76 m 3.75 24,576.02 cm 0.148"
32 16,384 uus 0.25 327.68 m 5.0 32,767.83 cm 0.197"
48 24,576 uus 0.375 491.52 m 7.5 49,152.05 cm 0.295"
64 32,768 uus 0.5 655.36 m 10.0 65,535.96 cm 0.394"
80 40,960 uus 0.625 819.20 m 12.5 81,919.88 cm 0.492"
96 49,152 uus 0.75 983.04 m 15.0 98,304.10 cm 0.591"
112 57,344 uus 0.875 1.15km (1,146.88 m) 17.5 3762.73 ft 0.689"
128 65,536 uus 1.0 1.31km (1,310.72 m) 20.0 4300.26 ft 0.787"
256 131,072 uus 2.0 2.62km (2,621.44 m) 40.0 1.63 miles (8600.52 ft) 1.575"
512 262,144 uus 4.0 5.24km (5,242.88 m) 80.0 3.26 miles (17201.05 ft ) 3.15"
1024 524,288 uus 8.0 10.49km (10,485.76 m) 160.0 6.52 miles (34402.1 ft) 6.3"
2048 1,048,576 uus 16.0 20.97km (20,971.52 m) 320.0 20.97 km (2,097,152.02 cm) 12.6"