Unity-地形-地形圖層
地形圖層 (Terrain Layer)?是定義地形表面質(zhì)量的一種資源。地形圖層保存由地形材質(zhì)用于渲染地形表面的紋理和其他屬性。因為地形圖層是資源,所以很容易將其重復(fù)用于多種地形瓦片。
您可以將紋理添加到地形表面以創(chuàng)建自然色彩和精細的細節(jié)。地形游戲?qū)ο笸ǔ:艽?,因此最好使用帶有紋理的基本地形圖層,這些紋理平鋪在表面上并無縫重復(fù)??梢允褂枚鄠€地形圖層(每個圖層具有不同紋理)來構(gòu)建有趣的多樣化地形表面。
應(yīng)用于地形的第一個地形圖層將自動成為基礎(chǔ)圖層,并分布在整個景觀上。此外,可以用其他地形圖層來繪制各個區(qū)域以模擬不同地面(如草地、沙漠和雪地)。要在草木繁茂的鄉(xiāng)村和沙灘之間創(chuàng)建一個漸進過渡,可以選擇應(yīng)用具有可變不透明度的紋理。

創(chuàng)建地形圖層
要直接從 Terrain Inspector 中創(chuàng)建地形圖層,請單擊 Terrain Inspector 頂部工具欄中的畫筆圖標,然后從下拉菜單中選擇?Paint Texture。在?Terrain Layers?部分底部,單擊?Edit Terrain Layers?按鈕,然后選擇?Create Layer。

選擇?Create Layer?時,Unity 會打開?Select Texture2D?窗口。在此處,選擇要用作地形圖層__漫射 (Diffuse)__ 通道的圖像。要將__法線貼圖 (Normal Map)__ 或__遮罩貼圖 (Mask Map)__ 紋理分配到地形圖層,請在 Project 視圖中選擇相應(yīng)的地形圖層,并使用其 Inspector 窗口。
或者,若要創(chuàng)建未自動與地形關(guān)聯(lián)的地形圖層資源,請右鍵單擊 Project 窗口,然后從上下文菜單中選擇?Create > Terrain Layer。然后,在 Inspector 窗口中,為新地形圖層配置各種屬性。
請參閱渲染性能以了解有關(guān)地形圖層數(shù)量如何影響渲染性能的信息。即使分配的地形圖層并沒有在地形瓦片上實際繪制,也可能影響渲染性能。
添加地形圖層
最初不會為地形指定地形圖層。默認情況下,在添加地形圖層之前會使用棋盤紋理。
在項目中創(chuàng)建地形圖層后,單擊?Edit Terrain Layers?按鈕,然后選擇?Add Layer?以打開?Select TerrainLayer?窗口。雙擊此窗口中的地形圖層,將其添加到您的地形。
地形圖層屬性
根據(jù)在地形設(shè)置 (Terrain Settings)?中設(shè)置的材質(zhì),以及當前使用的渲染管線,您可能在 Inspector 中看到不同的選項和屬性。

屬性????????????????????????????????描述
Diffuse????????????漫射紋理 (Diffuse Texture) 表示地形圖層的基色紋理。漫射紋理的 Alpha 通道具有不同用途,這取決于用來渲染地形的活動可編程渲染管線和著色器。
例如,高清渲染管線 (HDRP) 使用 Alpha 通道來獲得平滑度。但是,如果地形圖層上有遮罩貼圖紋理 (Mask Map Texture),則會將漫射紋理的 Alpha 通道用于密度值。
Normal Map????法線貼圖紋理 (Normal Map Texture) 包含地形圖層的法線信息。Unity 使用此信息來進行光照計算
? 如果在地形設(shè)置 (Terrain Settings)?中沒有分配法線貼圖紋理并啟用實例化,地形將使用從地形高度貼圖生成的法線。
? 如果分配了法線貼圖紋理并啟用實例化,Unity 將使用法線貼圖紋理而不是從高度貼圖生成的法線。
? 如果在地形上禁用實例化,則內(nèi)置的地形材質(zhì)使用從地形幾何體生成的法線(即使在地形圖層上分配了法線貼圖紋理也是如此)。
Normal Scale如果分配了法線貼圖紋理,地形圖層設(shè)置中將顯示一個稱為?Normal Scale?的新字段。該字段值用作法線貼圖中的法線值的縮放因子。值為 0 意味著法線貼圖中存儲的法線的縮放比例為 0,而值為 1 意味著法線處于完整縮放比例或發(fā)揮完整影響。
不同 Normal Scale 值的示例和結(jié)果:Normal Scale?= 0? 將未打包的法線值乘以 0。
? 法線的強度(即長度)將為 0,并且對光照計算沒有影響。地形上的網(wǎng)格三角形實際會使用網(wǎng)格法線來進行光照計算。Normal Scale?= 1? 將未打包的法線值乘以 1。
? 法線的強度將為 100%。Normal Scale?= 2? 將未打包的法線值乘以 2。
? 法線的強度將為 200%,并顯示為 Normal Scale 為 1 的法線的兩倍。Normal Scale?= –1? 將未打包的法線值乘以 –1。
? 法線的強度將為 100% 但是為負,使法線指向與 Normal Scale 為 1 的法線相反的方向。Mask MapTerrainLit 著色器(這是高清渲染管線 (HDRP) 和通用渲染管線 (URP) 的一部分)使用此遮罩貼圖紋理 (Mask Map Texture) 數(shù)據(jù)。自定義地形著色器也可能將此紋理用于用戶自定義的目的,例如環(huán)境光遮擋或基于高度的混合。
對于 HDRP 和 URP TerrainLit 著色器,遮罩貼圖紋理的 RGBA 通道對應(yīng)于:
R金屬度
G環(huán)境光遮擋
B高度
A平滑度(漫射 Alpha 將變成密度)
Channel Remapping如果分配遮罩貼圖紋理,地形圖層設(shè)置中將顯示一個稱為?Channel Remapping?的新標題。單擊該標題旁的三角形可以顯示最小和最大 RGBA 值的字段。Unity 使用這些范圍值來重新映射遮罩貼圖紋理的每個通道中的值。
Specular????地形圖層的鏡面高光顏色。
Metallic????地形圖層的總體金屬度值。
Smoothness????地形圖層的總體平滑度值。
Tiling Settings????適用于地形圖層使用的所有紋理的平鋪設(shè)置。
Size????????地形空間中紋理的大小,以及紋理平鋪的頻率。
Offset????Unity 應(yīng)用于地形圖層中每個紋理的采樣位置的基本偏移。
紋理繪制
Unity 將您添加的第一個地形圖層應(yīng)用于整個地形。如果添加多個地形圖層,請使用?Paint Texture?工具將后續(xù)紋理應(yīng)用于地形。
如果您添加一個沒有任何地形圖層的新地形瓦片,并在此瓦片上進行繪制,系統(tǒng)會自動將所選地形圖層添加到新的地形瓦片。因為這是第一個地形圖層,所以該紋理成為基礎(chǔ)圖層,并填充整個地形瓦片。
在 Terrain Inspector 中的?Brushes?下,有一個框中會顯示可用的畫筆,而且其下還有?Brush Size?和?Opacity?選項。請參閱創(chuàng)建和編輯地形以了解關(guān)于這些工具的更多信息。
渲染性能
分配給一個地形瓦片的地形圖層數(shù)可能會影響渲染器的性能。地形圖層的建議最大數(shù)量取決于您的項目使用的渲染管線。
如果您的項目使用通用渲染管線 (URP)?或內(nèi)置渲染管線,您可以在每個紋理通道中使用四個地形圖層,對通道的數(shù)量則沒有限制。這意味著,雖然可以使用任意數(shù)量的地形圖層,但是每個通道都會增加渲染地形所用的時間。為了實現(xiàn)性能最大化,請將每個地形瓦片都限制為四個地形圖層。
如果您的項目使用高清渲染管線 (HDRP),您可以為每個地形瓦片添加最多八個地形圖層,且系統(tǒng)會在單個通道中渲染這些圖層。無法添加更多通道。如果添加的地形圖層超過八個,它們會顯示在 Unity Editor 中,但在運行時會被忽略。