引言
创建新地形时,地形配置面板会为您呈现很多设置选项。 其中大部分选项在地形编辑过程中随时都可编辑,让您为项目自定义地形。
地形配置面板的位置
地形配置面板可以从编辑器的多个部分打开。 为场景添加地形图形时
(请阅读地形图形类别章学习如何为您的场景添加地形),您会看到创建新地形或从文件载入已有地形的选项。 选择创建新地形选项,地形配置窗口会自动打开;或者,您事后也可以从地形图形属性或地形编辑器的高度图部分重新打开该窗口。
选项 a: 新地形: 为您的场景添加新地形图形,选择”创建新地形”。
选项 b: 从地形图形属性打开: 从场景图形列表选择 Terrain(地形),并使用 Edit Config(编辑配置)属性。
选项 c: 从地形编辑器打开:
地形配置 UI
地形配置部分
这些属性卡中的参数定义了地形高度图、纹理和植被的空间量度。 这些属性必须谨慎选择,因为一些选项无法事后修改,在本手册中带有(只能在创建时编辑)标记。
General(通用)
TerrainFolder(地形文件夹): 定义了为存储地形相关数据而创建的项目相关文件夹。 应将该文件夹完整地放入版本控制。 该文件夹可在创建后更改,方法为使用地形图形上下文菜单选项 - Move Terrain Folder(移动地形文件夹)。 请参阅移动地形文件夹章。
Centered(居中): 启用该选项,使地形以原点为中心。
TerrainPosX/Y/Z(地形位置 X/Y/Z): 地形在世界空间中的位置。 中心点位于区块(0,0)。 场景编辑过程中可随时移动地形。
VisibilityHeightOverTerrain(地形可视性高度): 视框高于地形的单元数量。 过大的值会高估远距离的区块可视性,而过小的值可能导致可视性问题,使包括镜头在内的对象飘浮在空中。
MemoryLimit(内存限制): 地形管理器的内存限制,以兆字节为单位。 0 代表无限制。 如超出该限制,地形管理器会被清空(首先清空不使用的区块)。
SectorPurgeInterval(区块清空间隔): 指定地形区块离开暂存镜头半径多久(以秒为单位)后将该地形区块清出内存。
高度图
SamplesPerSectorX/Y(逐区块样本 X/Y): 定义单个区块的高度图样本数量。 256 是不错的值。 例如,假如设为 128×128,则该区块几何网格由 128*128*2 = 32k 个三角形组成。 下一个 LOD 仅使用 64*64*2 = 8k 个三角形,以此类推。 区块数量也可通过 Sector Count XY(区块计数 XY)更改。
SampleSpacingX/Y(样本空间 X/Y): 两个高度图样本之间的距离,以世界单元为单位。
TerrainSizeX/Y(地形尺寸 X/Y): 地形的总尺寸,以世界单元为单位。
SamplesPerSectorX/Y(逐区块样本 X/Y)(只能在创建时编辑): 每个区块的高度图样本数量。
SectorCountX/Y(区块计数 X/Y): 定义区块总数。 相应地,高度样本的总计数为 SectorCount*SamplesPerSector。
SectorCountX*SectorCountY 中的每个区块由一个实际文件和一组特别对应该区块的辅助纹理代表。 巨型景观需要地形动态载入,所以需要大量区块,而小规模景观只需要少量区块。
请见下方的示例设置。
SectorSizeX/Y(区块尺寸 X/Y): 定义一个区块的尺寸(以世界单元为单位)。 相应地,地形总尺寸为 SectorCount*SectorSize。
TilesPerSectorX/Y(逐区块铺块 X/Y)(只能在创建时编辑): 定义了区块分割成小铺块的内部子分区。 在用户侧,这些铺块与添加地形孔洞有关。 所以,如果需要孔洞,铺块的粒度必须谨慎设置。 而且,铺块对于植被可视性判定很重要,所以子分区应保留默认值,以获得最佳性能。
纹理
BaseTextureFile(基底纹理文件)(只能在创建时编辑):
定义地形的基底纹理,即不在顶部绘制其他细节纹理时所使用的纹理。 该纹理可事后在地形编辑器纹理选项卡中更改。
BaseTextureTilingX/Y(基底纹理平铺 X/Y)(只能在创建时编辑,但也可在地形编辑器纹理组选择 Tiling 属性后编辑): 定义基底纹理在地形上的平铺因数。
NormalmapUsesBorder(法线贴图使用边界)(只能在创建时编辑): 如启用,会跨区块模拟世界空间法线贴图过滤。 该功能会多使用一点纹理内存,但可避免区块边缘出现光照缝隙。 例如,每个区块都有一个法线贴图(在辅助纹理文件夹中),其中储存着用于光照的世界空间法线。 如该区块有 128×128 个高度样本,则法线贴图的尺寸也是 128×128。 这种情况可能在区块边界产生缝隙,因为纹理无法双线过滤到毗邻区块。 虽然这是一个次像素级问题,但地形上有动态光照时会产生可见的伪影。 如果启用该选项,引擎内部会生成一个更大的法线贴图(每个边缘多 2 个额外像素),重叠部分为复制生成,以此实现跨边界的适当过滤。 该属性仅影响需要法线贴图的着色器,不影响用光照贴图的静态光照照亮的地形。
WeightmapResolutionX/Y(权重贴图分辨率 X/Y)(只能在创建时编辑): 每个区块生成其自己的加权纹理,用于细节纹理混合。 这一尺寸定义了这些纹理的分辨率。 更高的纹理允许绘制更高的细节。
OverallResolutionX/Y(总分辨率 X/Y)(只能在创建时编辑): 权重贴图的总分辨率。
MaterialIDMapResolutionX/Y(材质 ID 贴图分辨率 X/Y): 如大于 0,地形系统会建置一个材质贴图(逐区块),存储最相关的材质 ID 供运行库查询。
植被编辑
VegetationMapResolutionX/Y(植被贴图分辨率 X/Y): 指定用于编辑植被密度贴图(仅在编辑器内有意义)的分辨率(逐区块)。
地形结构概览
地形统计
样本设置
一开始,地形配置选项可能会有点让人困惑,因为该系统的设计是为了满足多种地形设计情况下的要求。 该部分会显示 2 种可能的设计情况,以及每种地形类型最适合使用的设置,此外还可进行其他设置,这些设置的变量可应对大多数可能出现的情况。
建议在开始制作游戏制成品之前对地形进行原型尝试,这有助于让您找到最佳设置。 请注意,并非所有设置都可在地形创建之后更改,请参考上文属性列表获得更多信息。
1) 小地形
休闲游戏、岛屿关卡、模拟高尔夫等情景经常会用到小景观。 整个地表都在关卡启动时载入,所以不需要在运行库动态载入地形页面,甚至不希望如此。
对于此类情景,请在设定地形时使用少量区块。 您甚至可以只用一个区块,然后将高度样本数量设为需要的高度图分辨率:
以下配置仅用一个带 512×512 高度图样本的区块。 所以地形文件夹中只有一个实际地形文件。
或者,您可以设置一个有 2×2 个区块的地形,并相应减少样本计数和逐区块尺寸。 不止一个区块的优势是能略微改善地形上的几何体的可视性处理。 但对于小地形来说,其差别并不大。 下图显示了三种设置:
2) 大地形
在有巨大户外组成部分的 RPG 游戏或 MMO 游戏中可以找到大地形。 因为这些游戏世界过于巨大,远远不能在启动时完全载入,所以必须将地形分割成可动态载入的区块。 下图显示了 20×15 区块的配置。 引擎仅载入可见范围内的区块,这在所有区块中只占一小部分。
一般性能考量
地形渲染性能取决于屏幕上的地形顶点 / 三角形总数。 请在您的程序或屏幕查看器上仔细检查这些数字(默认应用:按几次 F4 显示”总多边形数”)。
另外要确保远距离可见区块不要太多。 示例: 默认观察距离是 32,000 个单元,默认区块尺寸是 10,000 个单元。 所以大体上,平均会有 3-4 个区块从远距离可见。
当屏幕空间错误达到阈值,地形系统会自动切换到更低的区块 LOD。 相应地,不仅远距离区块可以切换到更低的 LOD,镜头位置的区块也可以。 例如,在地形很平整时就会发生这种情况。 如果大部分地形都很平整,始终使用较低的 LOD,那么您可以考虑一开始就使用更低的分辨率。 否则,您会浪费系统内存(区块内含高度值复本)和 GPU 内存(顶点缓存),并牺牲载入性能。 地形图形有一个可调参数
LODScaling(LOD 缩放比例),用来平衡性能和质量。 在理想状态下,毗邻区块会切换到较低的 LOD。