分類:Unity、C#、VS2015
創建日期:2016-04-10
Unity擁有功能完善的地形編輯器,支持以筆刷繪制的方式實時雕刻出山脈、峽谷、平原、高地等地形。Unity地形編輯器同時提供了實時繪制地表材質紋理、樹木種植、大面枳草地布置等功能。值得—提的是,Unity中的地形編輯器支持LOD(Level of Detail)功能,能夠根據攝像機與地形的距離以及地形起伏程度調整地形塊(Patch)網格的疏密程度。遠處或平坦的地形塊使用稀疏的網格,近處或陡峭的地形塊使用密集的網格。這將使游戲場景即真實、精細,同時也不影晌性能。
注意:地形與其他的游戲對象有些不同,地形支持Transform(幾何變換)組件中的Position(位置)變換,但對於Rotation(旋轉)以及scale(縮放)操作是無效的。
要創建地形並實現山脈、峽谷、平原、高地、樹木種植、大面枳草地布置等功能的繪制,必須先熟悉下面的基本概念。
1、添加地形對象
先創建一個新的場景,然後打開菜單欄中的【Terrain】→【Create Terrain】,就創建了一個地形對象:
新創建的地形會在項目工程中創建一個地形資源,並在當前場景中添加—個地形實例(Project視圖和Hierarchy視圖中同時出現了該地形的相關文件),如下圖所示:
新建地形對象後,在檢視器視圖中可以看到該對象所掛載的組件,除了Transform組件外,還有一個Terrain(地形)組件以及一個Terrain Collider(地形碰撞)組件。
2、地形組件
Terrain組件共包含7個選項按鈕,利用這些選項就可以繪制地形起伏、地表紋理或附加細節如樹、草或石頭等:
在這7個選項按鈕中,前3個用於地形高度繪制。
(1)按鈕1--升高/降低高度
單擊此選項按鈕後,再展開的選項卡中,先設置Brush Size(筆刷大小)、Opacity(不透明度)的值以及繪制時使用的Brushes(筆刷),然後就可以在場景中用鼠標單擊或拖動繪制地形了。
單擊鼠標會增加高度,保持鼠標按下狀態移動鼠標會不斷的升高高度直到達到高度的最大值。如果想降低高度,按住Shift鍵再單擊鼠標即可。
(2)按鈕2--噴塗高度
單擊左側開始的第2個按鈕選項,可進入噴塗高度模式。該模式一般用於繪制平整的高地或峽谷等地形。
設置Brush Size(筆刷大小)、Opacity(不透明度)、Height(高度)的值以及繪制時使用的Brushes(筆刷),就可以利用鼠標移動場景中地形上的任意部分,直到達到你希望的高度為止。
(3)按鈕3--平滑高度
單擊左側開始的第3個按鈕選項,可進入平滑高度模式。該模式用於柔化繪制的區域的高度差,使地形的起伏更加平滑。
(4)按鈕4--繪制紋理
單擊左側開始的第4個按鈕選項,可進入紋理繪制模式。單擊【Edit Texture】可添加、編輯、移除紋理。重復“Add Texture”這個過程,可以添加多個紋理。
添加地形紋理以後,選擇想使用的地形紋理,即可使用此紋理拖動鼠標左鍵對地形進行紋理繪制,如下圖所示:
選擇不同的紋理再拖動鼠標繪制,就可以在同一個場景中繪制出各種形式的地形紋理。
(5)按鈕5—植樹
單擊左側開始的第5個按鈕選項,可進入植樹模式。
單擊【Edit Tree】可添加、編輯、移除樹。重復“Add Tree”這個過程,可以添加多種樹。
選擇使用的樹,設置樹的密度(Tree Density)為合適的值,然後就可以將其繪制在場景中了,此時當前鼠標所在位置會標記為藍色高亮,如下圖所示,單擊即可。
單擊地形的任何地方都能種樹。按住鼠標左鍵不放並拖動鼠標可在地形上連續種樹。按住Shift鍵然後單擊地面,可以擦掉相應位置種植的樹。
參數設置(Settings):
Bush Size:筆刷的尺寸。設置植樹時筆刷的大小,取值范圍在1~100之間。
Tree Density:樹木密度。用於控制樹對象的間距。值越大樹木越密集、間距越小。取值范圍在10~100之間。
Tree Height:樹的基准高度。值越大樹木越高,取值范圍在50~200之間。
Color Variation:每棵樹的顏色所能夠使用的隨機變量值,取值范圍在0~1之間。
(6)按鈕6—種草
單擊左側開始的第6個按鈕選項,可進入Paint Details模式,利用該模式可繪制草坪(用Grass Texture種草)以及指定對草坪進行細節性描述的網格(Detail Mesh)。
其中,【Settings】下的【Target Strength】表示目標強度,用於控制種草以及添加細節網格時所產生的影晌,取值范圍在0~1之間。
單擊【Edit Details…】,在彈出的快捷菜單項中選擇【Add Grass Texture】,然後選擇某種草坪紋理,並設置相關參數,單擊【Add】即可添加一種草坪:
Details Texture:草坪的圖片。
Min Width、Max Wdth、Min Height:設定草坪的最小寬度、最大寬度、最小高度值。
Noise Spread:噪波范圍。用於控制草產生簇的大小。該值越低意昧著噪波越低。
Healthy Color:健康顏色。此顏色在噪波中心較為明顯。
Dry Color:干燥顏色。此顏色在噪波邊緣較為明顯。
Billboard:廣告牌。該項如果被勾選,草將隨著攝像機一起轉動,永遠面向主攝像機。
單擊【Edit Details…】,在彈出的快捷菜單項中選擇【Add Details】,然後選擇某種草的預設,並設置相關參數,單擊【Add】即可添加一種草的預設體:
這兩項選擇後,就可以在場景中用鼠標種草了。
按住Shift鍵可用鼠標選擇刪除,按住Ctrl鍵可用鼠標刪除選擇的細節網格。
(7)按鈕7—地形參數設置
單擊左側開始的第7個按鈕選項,進入地形設置模式。
基本地形(Base Settings)選項卡下的參數如下:
Draw:是否繪制基本地形。
Pixel Erroe:像素容差。在顯示地形網格時允許的像素誤差。是地形LOD系統的一個參數。
Base Map Dist:基本地圖距離。設置地形貼圖顯示高分辨率的距離。
Cast Shadows:投影。設置地形是否投射陰影。
Mterial:材質。通過單擊右側的圓圈按鈕為地形指定材質。
樹和細節配置(Tree & Details Objects)選項卡下的參數如下:
Draw:如果選中該項,所有的樹、草和細節模型都將被渲染出來。
Bake Light Probes for:
Detail Distance:細節距離。該項用於設定攝像機停止對細節渲染的距離。
Collect Detail Patches:
Detail Density:細節密度。該項用於控制細節的密度。默認為1,如果將此值調小,過密的地形細節將會不被渲染。
Tree Distance:樹林距離。該項用於設定攝像機停止對樹對象進行渲染的距離。值越高,越遠的樹會被渲染。
Billboard Start:開始廣告牌。該項用於沒定攝像機將樹渲染為廣告牌的距離。
Fade Length:漸變距離。該項用於控制樹對象從模型過渡到廣告牌的速度,如果值設置為0,模型會突變為廣告牌。
Max Mesh Trees:最大網格樹。該項用於控制在地形上所有模型樹的總數量上限。
針對草的風設置(Wind Settings for Grass)選項卡下的參數如下:
Speed:速度。該頂用於設定風吹過的速度。
Size:大小。該項用於設定風力影響的面枳。
Bending:彎曲。該項用於沒定草木被風吹的彎曲程度。
Crass Tint:草的色調。該項用於設定所有草以及細節網格整體的色調。
【Resolution】選項卡下的參數用於添加地形對象後設置相關的屬性。參數含義如下:
HeightMap Resolution:高度圖分辨率。
Detail Resolution:細節分辨率。控制草地和細節網格的地圖分辨率。如果希望提高繪制性能,可將該數字設置低一些,比如設置為512或者256。
Base Texture Resolution:基礎紋理分辨率,用於代替在一定距離的潑濺貼圖 (splat map) 的復合紋理分辨率。
這裡介紹實際操作的基本步驟,當你熟悉了這些基本步驟後,就可以繪制各種絢麗的地形了。按這些基本步驟操作完成後,即可得到下面的簡單示例效果:
1、添加地形對象
在層次視圖中鼠標右擊選擇【Terrain】→【Create Terrain】,創建一個地形。此時在Project的Assets下也會自動添加一個文件名為【New Terrain】的地形組件。
將Project的Assets下的【New Terrain】拖放到Demos05子文件夾下,並將其換名為【Demo05Terrain】。
在“層級視圖”(Hierarchy) 中選中地形 (Terrain) 後,便可以使用 F(焦點)鍵對地形進行輕松導航。按 F 後,無論鼠標在哪個位置,都會移動到場景視圖 (Scene View) 的中心位置。這樣就可以對某個區域進行潤色,快速移動到另一個區域並修改其他東西。如果在按下 F 鍵時鼠標沒有懸停在地形 (Terrain) 的某個區域,則整個地形 (Terrain) 都會被置於場景視圖 (Scene View) 的中心位置。
2、設置地形長寬
在檢視圖中,單擊地形組件中的【按鈕7】,修改【Resolution】選項卡下的參數設置,將地形的長(Length)寬(Width)都設置為2000,其他使用默認值:
下面是在Unity 5.3.4中初次創建地形後的默認值:
寬(Terrain Width):500
長(Terrain Length):500
高度(Height):600
Heightmap Resolution:513
細節分辨率(Detail Resolution):1024
Detail Resolution Per Path:8
Control Texture Resolution:512
Base Texture Resolution:1024
3、繪制山脈
在檢視圖中,單擊地形組件中的【按鈕1】,然後在地形上繪制出山脈的初步效果,這—步驟主要從整體角度來把握山脈效果,繪制出山脈的大致起伏即可:
然後在【Brushes】欄中選擇筆刷的樣式,為山脈增加細節結構,用於模擬山脊的效果:
4、繪制平坦地面
繪制山脈上的部分平坦地面,如下圖所示:
技巧:按住Shift鍵配合單擊或按住鼠標左鍵可以實時獲取到筆刷所在地形的相應位置的高度,並將該高度設為筆刷的高度值。
5、為地形添加材質(可選)
鼠標右擊Demo05文件夾,在該文件夾下創建一個材質:
然後將其命名為【Demo05Material】:
選中Demo05Material材質,在Inspector視圖中單擊Shader右側的按鈕,在彈出的列表框中依次選擇【Nature】→ 【Terrain】→【Diffuse】項,為terrain材質指定shade:
選擇地形,在Inspector視圖中,單擊【按鈕7】,然後單擊【Material】項右側的圓圈按鈕,在彈出的Sehct Matmal對話框中為地形指定剛剛創建的材質:
說明:地形的材質不是必須設置的,通常沒置地形的材質是為了能夠更改地形的渲染Shader。如果該材質設置為空,Unity會使用一套內置的地形材質。
6、添加紋理
單擊地形編輯器中的【按鈕4】切換到【Paint Textures】模式,單擊【Edit Texture】按鈕,選擇【Add Texture】項,會彈出Add Terrain Texture對話框,單擊Texture頂的【Select】按鈕,在彈出的Select Texture2D對話框中指定一張紋理作為地形的首層紋理:
指定首層紋理後,Unity會自動將首層紋理平鋪在整個地形上。如果需要修改平鋪的大小,可繼續單擊【Edit Texture】按鈕,選擇【Edit Texture】項,在彈出的對話框中調節【Size】項的X、Y方向的數值即可。
首層紋理指定之後,接下來還可以繼續為地形指定其他紋理用於豐富地形效果,方法與指定首層紋理相同。指定後再選中新添加的紋理,利用筆刷將該紋理繪制到地形上,這裡不再演示。
7、添加路面
辦法與“6.添加紋理”相同。
下面是添加的路面紋理:
下面是添加路面後的效果:
8、添加樹
地形的紋理繪制完畢後,接下來為地形添加樹。單擊地形編輯器中的【按鈕5】切換到【Place Trees】模式,單擊【Edit Trees】按鈕,選擇【Add Tree】,在彈出的Add Tree對話框中單擊【Tree】頂右側的圓圈按鈕,進而在彈出的【Se!ect CameObject】對話框中指定—棵樹作為地形的樹(重復此操作可以添加多種樹):
添加樹以後,在【Trees】預覽框中選中某種樹,設置合適的參數後,就可以利用筆刷在地形上種樹:
如果希望修改已添加樹的樣式或受風力影晌的程度等參數,先在Tree預覽框中選擇要編輯的樹,然後單擊【Edit Trees】按鈕,選擇【Edit Tree】,在彈出的對話框中進行編輯。
要移除樹,單擊【Edit Trees】按鈕,選擇【Remove Tree】項即可。
9、添加草、灌木等
繪制完樹,接下來為地形添加草、灌木等細節。
單擊地形編輯器中的【按鈕6】切換到【Paint Deails】模式,然後添加草坪、灌木等細節即可,用法與前面添加樹的辦法類似,這裡就不再細講了。
10、設置其他參數
當你熟悉以後,還可以通過地形編輯器【按鈕7】下的選項,設置風刮草地和樹木的效果。最後,再添加光源讓整個場景看起來明亮絢麗等。