Unity3D :地形图层
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
地形图层
地形图层 (Terrain Layer) 是定义地形表面质量的一种资源。地形图层保存由地形材质用于渲染地形表面的纹理和其他属性。因为地形图层是资源,所以很容易将其重复用于多种地形瓦片。
您可以将纹理添加到地形表面以创建自然色彩和精细的细节。地形游戏对象通常很大,因此最好使用带有纹理的基本地形图层,这些纹理平铺在表面上并无缝重复。可以使用多个地形图层(每个图层具有不同纹理)来构建有趣的多样化地形表面。
应用于地形的第一个地形图层将自动成为基础图层,并分布在整个景观上。此外,可以用其他地形图层来绘制各个区域以模拟不同地面(如草地、沙漠和雪地)。要在草木繁茂的乡村和沙滩之间创建一个渐进过渡,可以选择应用具有可变不透明度的纹理。
创建地形图层
要直接从 Terrain Inspector 中创建地形图层,请单击 Terrain Inspector 顶部工具栏中的画笔图标,然后从下拉菜单中选择 Paint Texture。在 Terrain Layers 部分底部,单击 Edit Terrain Layers 按钮,然后选择 Create Layer。
选择 Create Layer 时,Unity 会打开 Select Texture2D 窗口。在此处,选择要用作地形图层__漫射 (Diffuse)__ 通道的图像。要将__法线贴图 (Normal Map)__ 或__遮罩贴图 (Mask Map)__ 纹理分配到地形图层,请在 Project 视图中选择相应的地形图层,并使用其 Inspector 窗口。
或者,若要创建未自动与地形关联的地形图层资源,请右键单击 Project 窗口,然后从上下文菜单中选择 Create > Terrain Layer。然后,在 Inspector 窗口中,为新地形图层配置各种属性。
请参阅渲染性能以了解有关地形图层数量如何影响渲染性能的信息。即使分配的地形图层并没有在地形瓦片上实际绘制,也可能影响渲染性能。
添加地形图层
最初不会为地形指定地形图层。默认情况下,在添加地形图层之前会使用棋盘纹理。
在项目中创建地形图层后,单击 Edit Terrain Layers 按钮,然后选择 Add Layer 以打开 Select TerrainLayer 窗口。双击此窗口中的地形图层,将其添加到您的地形。
地形图层属性
根据在地形设置 (Terrain Settings) 中设置的材质,以及当前使用的渲染管线,您可能在 Inspector 中看到不同的选项和属性。
属性 | 描述 | |
---|---|---|
Diffuse | 漫射纹理表示地形图层的基色纹理。漫射纹理的 Alpha 通道具有不同用途,这取决于用来渲染地形的活动可编程渲染管线和着色器。 例如,高清渲染管线 (HDRP) 和通用渲染管线 (URP) 使用 Alpha 通道来获得平滑度。但是,如果地形图层上有遮罩贴图纹理,则会将漫射纹理的 Alpha 通道用于密度值。 | |
Color Tint | 如果分配了漫射纹理,地形图层设置中将显示一个名为 Color Tint 的新字段。单击拾色器字段并选择要使用的颜色。 Color Tint 是 HDRP 和 URP 中可用的功能。 | |
Opacity as Density | 指定是否使用存储在地形图层漫射纹理的 Alpha 通道中的值来渲染地形图层,而不是使用通常的泼溅贴图权重或遮罩贴图的高度值。Unity 使用 Alpha 通道值作为图层混合的阈值。 Opacity as Density 是 HDRP 和 URP 中可用的功能。禁用地形的地形光照材质上的 Enable Height-based Blend 选项时,以及将漫射贴图和遮罩贴图纹理分配给地形图层时,此选项可用。 | |
Normal Map | 法线贴图纹理 (Normal Map Texture) 包含地形图层的法线信息。Unity 使用此信息来进行光照计算 • 如果在地形设置 (Terrain Settings) 中没有分配法线贴图纹理并启用实例化,地形将使用从地形高度贴图生成的法线。 • 如果分配了法线贴图纹理并启用实例化,Unity 将使用法线贴图纹理而不是从高度贴图生成的法线。 • 如果在地形上禁用实例化,则内置的地形材质使用从地形几何体生成的法线(即使在地形图层上分配了法线贴图纹理也是如此)。 | |
Normal Scale | 如果分配了法线贴图纹理,地形图层设置中将显示一个称为 Normal Scale 的新字段。该字段值用作法线贴图中的法线值的缩放因子。值为 0 意味着法线贴图中存储的法线的缩放比例为 0,而值为 1 意味着法线处于完整缩放比例或发挥完整影响。 不同 Normal Scale 值的示例和结果: | |
Normal Scale = 0 | • 将未打包的法线值乘以 0。 • 法线的强度(即长度)将为 0,并且对光照计算没有影响。地形上的网格三角形实际会使用网格法线来进行光照计算。 | |
Normal Scale = 1 | • 将未打包的法线值乘以 1。 • 法线的强度将为 100%。 | |
Normal Scale = 2 | • 将未打包的法线值乘以 2。 • 法线的强度将为 200%,并显示为 Normal Scale 为 1 的法线的两倍。 | |
Normal Scale = –1 | • 将未打包的法线值乘以 –1。 • 法线的强度将为 100% 但是为负,使法线指向与 Normal Scale 为 1 的法线相反的方向。 | |
Mask Map | TerrainLit 着色器(这是高清渲染管线 (HDRP) 和通用渲染管线 (URP) 的一部分)使用此遮罩贴图纹理 (Mask Map Texture) 数据。自定义地形着色器也可能将此纹理用于用户自定义的目的,例如环境光遮挡或基于高度的混合。 对于 HDRP 和 URP TerrainLit 着色器,遮罩贴图纹理的 RGBA 通道对应于: | |
R | 金属度 | |
G | 环境光遮挡 | |
B | 高度 | |
A | 平滑度(漫射 Alpha 将变成密度) | |
Channel Remapping | 如果分配遮罩贴图纹理,地形图层设置中将显示一个称为 Channel Remapping 的新标题。单击该标题旁的三角形可以显示最小和最大 RGBA 值的字段。Unity 使用这些范围值来重新映射遮罩贴图纹理的每个通道中的值。 | |
Specular | 地形图层的镜面高光颜色。 | |
Metallic | 地形图层的总体金属度值。 | |
Smoothness | 地形图层的总体平滑度值。 | |
Tiling Settings | 适用于地形图层使用的所有纹理的平铺设置。 | |
Size | 地形空间中纹理的大小,以及纹理平铺的频率。 | |
Offset | Unity 应用于地形图层中每个纹理的采样位置的基本偏移。 |
纹理绘制
Unity 将您添加的第一个地形图层应用于整个地形。如果添加多个地形图层,请使用 Paint Texture 工具将后续纹理应用于地形。
如果您添加一个没有任何地形图层的新地形瓦片,并在此瓦片上进行绘制,系统会自动将所选地形图层添加到新的地形瓦片。因为这是第一个地形图层,所以该纹理成为基础图层,并填充整个地形瓦片。
在 Terrain Inspector 中的 Brushes 下,有一个框中会显示可用的画笔,而且其下还有 Brush Size 和 Opacity 选项。请参阅创建和编辑地形以了解关于这些工具的更多信息。
渲染性能
分配给一个地形瓦片的地形图层数可能会影响渲染器的性能。地形图层的建议最大数量取决于您的项目使用的渲染管线。
- 如果您的项目使用通用渲染管线 (URP) 或内置渲染管线,您可以在每个纹理通道中使用四个地形图层,对通道的数量则没有限制。这意味着,虽然可以使用任意数量的地形图层,但是每个通道都会增加渲染地形所用的时间。为了实现性能最大化,请将每个地形瓦片都限制为四个地形图层。
- 如果您的项目使用高清渲染管线 (HDRP),您可以为每个地形瓦片添加最多八个地形图层,且系统会在单个通道中渲染这些图层。无法添加更多通道。如果添加的地形图层超过八个,它们会显示在 Unity Editor 中,但在运行时会被忽略。
由3D建模学习工作室整理翻译,转载请注明出处!