在 Unity 3D 中,除了使用高度圖來創建地形外,還可以使用筆刷繪製地形。
因爲 Unity 3D 爲遊戲開發者提供了強大的地形編輯器,通過菜單中的 GameObject→3D Object→Terrain 命令,可以爲場景創建一個地形對象。
初始的地表只有一個巨大的平面。Unity 3D 提供了一些工具,可以用來創建很多地表元素。
遊戲開發者可以通過地形編輯器來輕鬆實現地形以及植被的添加。
地形菜單欄一共有7個按鈕,含義分別爲編輯地形高度、編輯地形特定高度、平滑過渡地形、地形貼圖、添加樹模型、添加草與網格模型、其他設置,如下圖所示,每個按鈕都可以激活相應的子菜單對地形進行操作和編輯。
地形高度繪製
在地形編輯器中,前 3 個工具用來繪製地形在高度上的變化。
左邊第一個按鈕激活 Raise/Lower Height 工具,如下圖所示。
當使用這個工具時,高度將隨着鼠標在地形上掃過而升高。
如果在一處固定鼠標,高度將逐漸增加。這類似於在圖像編輯器中的噴霧器工具。如果鼠標操作時按下 Shift 鍵,高度將會降低。不同的刷子可以用來創建不同的效果。例如,創建丘陵地形時,可以通過 soft-edged 刷子進行高度擡升。
而對於陡峭的山峯和山谷,可以使用 hard-edged 刷子進行高度削減。
左邊第二個工具是 Paint Height,類似於 Raise/Lower 工具,但多了一個屬性 Height,用來設置目標高度,如下圖所示。
當在地形對象上繪製時,此高度的上方區域會下降,下方的區域會上升。
遊戲開發者可以使用高度屬性來手動設置高度,也可以使用在地形上 Shift+ 單擊對鼠標位置的高度進行取樣。在高度屬性旁邊是一個 Flatten 按鈕,它簡單地拉平整個地形到選定的高度,這對設置一個凸起的地平線很有用。
如果要繪製的地表包含高出水平線和低於水平線的部分,例如在場景中創建高原以及添加人工元素(如道路、平臺和臺階),Paint Height 都很方便。
左邊第三個工具 Smooth Height 並不會明顯地擡升或降低地形高度,但會平均化附近的區域。這緩和了地表,降低了陡峭變化,類似於圖片處理中的模糊工具(blur tool)。
Smooth Height 可以用於緩和地表上尖銳、粗糙的岩石。地形表面平滑工具選項設置及功能介紹如下表所示。
參 數 | 含 義 | 功 能 |
---|---|---|
Brushes | 筆刷 | 設置筆刷的樣式 |
Setting | 設置 | |
Brushes Size | 筆刷尺寸 | 設置筆刷的大小 |
Opacity | 不透明度 | 設置筆刷繪製時的高度 |
Height | 高度 | 設置繪製高度的數值 |
地形紋理繪製
在地形的表面上可以添加紋理圖片以創造色彩和良好的細節。
由於地形是如此巨大的對象,在實踐中標準的做法是使用一個無空隙地(即連續地)重複的紋理,在表面上用它成片地覆蓋,可以繪製不同的紋理區域以模擬不同的地面,如草地、沙漠和雪地。
繪製出的紋理可以在不同的透明度下使用,這樣就可以在不同地形紋理間形成漸變,效果更自然。
地形編輯器左邊第四個按鈕是紋理繪製工具,單擊該按鈕並且在菜單中執行 Add Texture 命令,可以看到一個窗口,在其中可以設置一個紋理和它的屬性。
添加的第一個紋理將作爲背景使用而覆蓋地形。如果想添加更多的紋理,可以使用刷子工具,通過設置刷子尺寸、透明度及目標強度(Target Strength)選項,實現不同紋理的貼圖效果,如下圖所示。地形紋理繪製工具選項如下表所示。
參 數 | 含 義 | 功 能 |
---|---|---|
Brushs | 筆刷 | 設置繪製地形紋理的筆刷樣式 |
Textures | 紋理 | 設置繪製地形紋理圖片樣式 |
Setting | 設置 | 設置紋理相關參數 |
Brush Size | 筆刷尺寸 | 設置繪製紋理的筆刷的大小 |
Opacity | 不透明度 | 設置筆刷繪製紋理時的不透明度 |
Target Strength | 目標強度 | 設置所繪製的貼圖紋理產生的影響 |
樹木繪製
Unity 3D 地形可以佈置樹木。可以像繪製高度圖和使用紋理那樣將樹木繪製到地形上,但樹木是固定的、從表面生長出的三維對象。
Unity 3D 使用了優化(例如,對遠距離樹木應用廣告牌效果)來保證好的渲染效果,所以一個地形可以擁有上千棵樹組成的茂密森林,同時保持可接受的幀率。
單擊 Edit Trees 按鈕並且選擇 Add Tree 命令,將彈出一個窗口,從中選擇一種樹木資源。
當一棵樹被選中時,可以在地表上用繪製紋理或高度圖的方式來繪製樹木,按住 Shift 鍵可從區域中移除樹木,按住 Ctrl 鍵則只繪製或移除當前選中的樹木。樹木繪製面板如下圖所示。樹木繪製工具選項如下表所示。
參 數 | 含 義 | 功 能 |
---|---|---|
Setting | 設置 | 設置樹木繪製相關參數 |
Brush Size | 筆刷尺寸 | 設置種植樹時筆刷的大小 |
Tree Density | 樹木密度 | 設置樹的間距 |
Tree Height | 樹木高度 | 設置樹的高度,勾選Random選項,可以出現樹木高度 在指定範圍內隨機變化的效果 |
Lock Width to Height | 鎖定樹木的寬高比 | 鎖定樹木寬高比 |
Tree Width | 樹木寬度 | 設置樹的寬度,勾選Random選項,可以出現樹木寬度 在指定範圍內隨機變化的效果 |
Random Tree Rotation | 樹木隨機旋轉 | 設置樹木隨機旋轉一定的角度 |
草和其他細節
一個地形表面可以有草叢和其他小物體,比如覆蓋表面的石頭。草地使用二維圖像進行渲染來表現草叢,而其他細節從標準網格中生成。
在地形編輯器中單擊 Edit Details 按鈕,在出現的菜單中將看到 Add Grass Texture 和 Add Detail Mesh 選項,選擇 Add Grass Texture,在出現的窗口中選擇合適的草資源,如下圖所示。草繪製工具選項如下表所示。
參 數 | 含 義 | 功 能 |
---|---|---|
Detail Texture | 細節紋理 | 指定圖片作爲草的紋理 |
Min Width | 最小寬度 | 設置草的最小寬度值 |
Max Width | 最大寬度 | 設置草的最大寬度值 |
Min Height | 最小高度 | 設置草的最小高度值 |
Max Height | 最大高度 | 設置草的最大高度值 |
Noise Spread | 噪波範圍 | 控制草產生簇的大小 |
Healthy Color | 健康顏色 | 設置草的健康顏色,此顏色在噪波中心處較爲明顯 |
Dry Color | 乾燥顏色 | 設置草的乾燥顏色,此顏色在噪波中心處較爲明顯 |
Billboard | 廣告牌 | 草將隨着攝像機同步轉動,永遠面向攝像機 |
地形設置
單擊地形編輯器最右邊的按鈕可以打開地形設置面板,如下圖所示。該面板用於設置地形參數,如下表所示。
基本地形參數:
參 數 | 含 義 | 功 能 |
---|---|---|
Draw | 繪製 | 繪製地形 |
Pixel Error | 像素容差 | 顯示地形網格時允許的像素容差 |
Base Map Dist. | 基本地圖距離 | 設置地形高度的分辨率 |
Cast Shadows | 投影 | 設置地形是否有投影 |
Material | 材質 | 爲地形添加材質 |
樹和細節參數:
參 數 | 含 義 | 功 能 |
---|---|---|
Draw | 繪製 | 設置是否渲染除地形以外的對象 |
Detail Distance | 細節距離 | 設置攝像機停止對細節渲染的距離 |
Detail Density | 細節密度 | 設置細節密度 |
Tree Distance | 樹木距離 | 設置攝像機停止對樹進行渲染的距離 |
Billboard Start | 開始廣告牌 | 設置攝像機將樹渲染爲廣告牌的距離 |
Fade Length | 漸變距離 | 控制所有樹的總量上限 |
Max Mesh Trees | 網格渲染樹木最大數量 | 設置使用網格形式進行渲染的樹木最大數量 |
風參數:
參 數 | 含 義 | 功 能 |
---|---|---|
Speed | 速度 | 風吹過草地的速度 |
Size | 大小 | 同一時間受到風影響的草的數量 |
Bending | 彎曲 | 設置草跟隨風彎曲的強度 |
Grass Tint | 草的色調 | 設置地形上的所有草和細節網格的總體渲染顏色 |
風域
地形中的草叢在運行測試時可以隨風擺動,如果要實現樹木的枝葉如同現實中一樣隨風搖擺的效果,就需要加入風域。
執行 GameObject→3D Object→Wind Zone 菜單命令,創建一個風域,風域的參數如下圖所示,風域參數如下表所示。
參 數 | 含 義 | 功 能 |
---|---|---|
Mode | 風域模式 | 設置風域模式:Directional模式下整個場景中的樹木都受影 響,Spherical模式下隻影響球體包裹範圍內的樹木 |
Main | 主風 | 設置主要風力,產生風壓柔和變化 |
Turbulence | 湍流 | 設置湍流風,產生一個瞬息萬變的風壓 |
Pulse Magnitude | 波動幅度 | 定義風力隨時間的變化 |
Pulse Frequency | 波動頻率 | 定義風向改變的頻率 |
風域不僅能實現風吹樹木的效果,還能模擬爆炸時樹木受到波及的效果。
需要注意的是,風域只能作用於樹木,對其他遊戲對象沒有效果。場景中不同模式下的風域參數設置如下表所示。
實現的效果 | 參數 | ||||
---|---|---|---|---|---|
Main | Turbulence | Pulse Magnitude | Pulse Frequency | ||
輕風吹效果 | 1 | 0.1 | 1.0或以上 | 0.25 | |
強氣流效果 | 3 | 5 | 0.1 | 1.0 |