Unity3D中的地形類似于Maya中使用置換貼圖來(lái)變形高段數(shù)的多邊形平面齿诞,其原理是自動(dòng)創(chuàng)建一個(gè)中等多邊形密度的mesh plane(多邊形平面)芭商,然后指定一張16bit的灰階圖作為height map(高差圖),并根據(jù)mesh各個(gè)頂點(diǎn)所對(duì)應(yīng)的灰度數(shù)值沿著Y軸改變?cè)擁旤c(diǎn)的高度,形成高低起伏的復(fù)雜地形。
Unity3D內(nèi)置了一套簡(jiǎn)單的brush(筆刷)工具來(lái)方便用戶對(duì)地形物體的編輯修改。
通過(guò)菜單GameObject
> 3D Object
> Terrain
可以創(chuàng)建一個(gè)Terrain (地形)馅笙。
Terrain Settings
Terrain Settings是對(duì)Terrain整體的參數(shù)設(shè)置面板。
最上面的一排按鈕分別用來(lái)對(duì)地形及植被進(jìn)行“刷制”的工具面板切換厉亏,最右邊的Terrain Setting
面板是針對(duì)地形整體的設(shè)置董习,這里挑一些常用的重點(diǎn)的來(lái)講:
-
Base Terrain
:基本地形設(shè)置-
Draw
:是否顯示該地形 -
Pixel Error
:貼圖和地形之間的準(zhǔn)確度,值越高越不準(zhǔn)叶堆,但系統(tǒng)負(fù)擔(dān)越小 -
Pixel Map Dist.
:在多少距離以外地形貼圖將自動(dòng)轉(zhuǎn)為較低分辨率(以提高效率) -
Cast Shadow
:是否投射陰影(如果是很平的地形可以不投射陰影) -
Material
:地形使用的材質(zhì)類型 -
Reflection Probes
:地形是否會(huì)被反射探球所計(jì)算(也就是說(shuō)是不是能出現(xiàn)在反射貼圖里面) -
Thickness
:在發(fā)生碰撞時(shí)阱飘,該地形向-y方向延伸的厚度(用來(lái)防止高速物體穿過(guò)較薄的地形)
-
-
Tree & Detail Objects
:樹(shù)和細(xì)節(jié)物體-
Detail Distance
:在多少米視距范圍內(nèi)顯示Details物體 -
Collect Detail Patches
-Detail Density
:Details物體的密度(1單位面積內(nèi)最多出現(xiàn)多少個(gè)Detail物體) -
Tree Distance
:在多少米視距范圍內(nèi)顯示Tree物體 -
Billboard Start
:多少米以外Tree物體開(kāi)始顯示為一張貼圖 -
Fade Length
:從多少米以外Tree物體開(kāi)始被逐漸替換成貼圖 -
Max Mesh Trees
:場(chǎng)景中最多出現(xiàn)多少顆真正的多邊形樹(shù)(也就是說(shuō)超過(guò)這個(gè)數(shù)量的樹(shù)不論距離攝影機(jī)的距離有沒(méi)有達(dá)到標(biāo)準(zhǔn)都會(huì)被替換成一張貼圖),這個(gè)值太小的話虱颗,“跳幀”現(xiàn)象會(huì)非常明顯
-
-
Wind Settings for Grass
:風(fēng)和草的設(shè)定-
Speed
:風(fēng)速沥匈,風(fēng)速越快,草的擺動(dòng)越大 -
Size
:草物體的基礎(chǔ)大小 -
Bending
:草物體被風(fēng)吹彎的最大程度 -
Grass Tint
:對(duì)草物體統(tǒng)一添加一個(gè)顏色忘渔,通常會(huì)設(shè)置為與地面顏色接近的顏色
-
-
Resolution
:地形分辨率-
Terrain Width
:地形最大寬度(米) -
Terrain Length
:地形最大長(zhǎng)度(米)高帖,所以默認(rèn)500×500就是500米×500米,1/4平方公里區(qū)域范圍 -
Terrain Height
:地形最大高度(米)畦粮,這個(gè)值決定了我們能夠刷出的最高的地形高度 -
Heightmap Resolution
:刷出來(lái)的高差圖的分辨率散址,513的話代表一個(gè)像素值控制大概1米區(qū)域的地貌,由于我們的筆刷是按照像素來(lái)規(guī)定大小的宣赔,如果我們?cè)谝粋€(gè)較低的Heightmap Resolution下刷好地面以后修改Heightmap Resolution為一個(gè)較高的值预麸,會(huì)發(fā)現(xiàn)我們刷好的范圍會(huì)變成一個(gè)角落里的一小塊地形,所以千萬(wàn)不要刷到一半的時(shí)候再去修改這個(gè)數(shù)值 -
Detail Resolution
: -
Detail Resolution Per Patch
: -
Control Texture Resolution
:控制貼圖的分辨率儒将,所謂控制貼圖是說(shuō)控制各層貼圖的“透明通道”的分辨率吏祸,比如基層貼圖是泥土,上層貼圖是草地钩蚊,那么草地貼圖本身是完全覆蓋的贡翘,但通過(guò)一個(gè)“控制貼圖”的灰度來(lái)決定每個(gè)點(diǎn)草地貼圖與泥土貼圖如何融合 -
Base Texture Resolution
:對(duì)于很遠(yuǎn)處的地形蹈矮,Unity3D會(huì)切換成顯示一個(gè)自動(dòng)創(chuàng)建好的“融合”了各層貼圖效果的Basemap,這樣比去計(jì)算多層貼圖融合要高效很多鸣驱,這個(gè)參數(shù)就是設(shè)置這個(gè)Basemap的分辨率的
-
-
Heightmap
:這里可以導(dǎo)入RAW圖像作為heightmap使用泛鸟,或者將當(dāng)前的heightmap導(dǎo)出成RAW圖像。我們可以從地理數(shù)據(jù)庫(kù)中獲得真實(shí)的某一地區(qū)的地形高差圖踊东,也可以利用第三方工具(如:Bryce)創(chuàng)建地形然后將高差圖導(dǎo)出給Unity3D使用北滥。
要注意的是,
Heightmap Resolution
是指水平方向的分辨率递胧,而不是地形的垂直分辨率碑韵,地形垂直分辨率取決于高差圖的色深范圍。缎脾,如果是普通jpg或者png圖片做高差圖的話祝闻,垂直分辨率就是256,代表最多能表達(dá)256個(gè)不同高度遗菠,用這樣的垂直分辨率刷高山區(qū)域联喘,很容易出現(xiàn)“梯田”狀的結(jié)果,所以最好使用16bit或32bit色深的高動(dòng)態(tài)圖片來(lái)做高差圖辙纬。我們用筆刷刷出來(lái)的heightmap都是16bit的豁遭。
Raise / Lower Terrain
按下鼠標(biāo)左鍵開(kāi)始提升地形高度,如果同時(shí)按住shift
鍵贺拣,則降低地形高度直到0蓖谢。
-
Brushes
:我們可以選擇不同的筆刷形狀來(lái)進(jìn)行繪制工作,簡(jiǎn)單來(lái)說(shuō)就好像在Photoshop里面繪制一張16bit色深的灰階圖譬涡。 -
Settings
:-
Brush Size
:筆刷大小 -
Opacity
:筆刷透明度 -
Lighting
:關(guān)于光照烘焙的詳細(xì)設(shè)置
-
Paint Height
直接刷出特定高度闪幽,按住shift
鍵獲取某一點(diǎn)的高度。非常適合用來(lái)刷出非水平面高度的平整地形涡匀,比如山頂或山間的一塊平整地面等等盯腌。同時(shí)如果場(chǎng)景中有水面,由于Terrain不能刷出水平面以下的地形(最低刷到水平面)陨瘩,可以首先將全部地形提升到一定高度腕够,再將水域地形刷低。
-
Settings
:-
Brush Size
:筆刷大小 -
Opacity
:筆刷透明度 -
Height
:目標(biāo)高度舌劳,后面的Flatten按鈕可以將這一高度應(yīng)用到全部地形 -
Lighting
:關(guān)于光照烘焙的詳細(xì)設(shè)置
-
Smooth Height
相當(dāng)于光滑筆刷工具
-
Settings
:-
Brush Size
:筆刷大小 -
Opacity
:筆刷透明度 -
Lighting
:關(guān)于光照烘焙的詳細(xì)設(shè)置
-
Paint Texture
在地形表面上繪制貼圖帚湘。
首先需要在Textures欄中點(diǎn)擊Edit Textures...
,再選擇Add Texture
以添加一層貼圖甚淡。
在這個(gè)“添加地形貼圖”面板中我們可以設(shè)置一張顏色貼圖和一張法線貼圖客们,并指定貼圖的重復(fù)度。如果檢測(cè)出顏色貼圖含有Alpha通道材诽,就會(huì)將這個(gè)Alpha通道與作為光滑度的貼圖底挫,否則就會(huì)出現(xiàn)一個(gè)Smoothness參數(shù)供我們調(diào)節(jié)這一層表面的光滑度,此外還提供一個(gè)Metallic參數(shù)供我們調(diào)節(jié)這一層表面的金屬顏色脸侥。
這里的貼圖都需要處理成無(wú)縫貼圖建邓,否則場(chǎng)景中會(huì)出現(xiàn)明顯的接縫。貼圖不需要特別大睁枕,因?yàn)橹貜?fù)度會(huì)被設(shè)置得比較高官边,通常512或者1024分辨率的貼圖就可以了。
第一層貼圖會(huì)默認(rèn)覆蓋整個(gè)地形區(qū)域外遇,從第二層(從左往右)開(kāi)始注簿,添加好貼圖以后需要在地形上刷出該層貼圖的出現(xiàn)范圍。
-
Settings
:-
Brush Size
:筆刷大小 -
Opacity
:筆刷透明度 -
Target Strength
:相當(dāng)于筆刷的最大力度跳仿,配合Opacity參數(shù)可以得到比較細(xì)致的力度控制诡渴,當(dāng)然如果使用手繪板來(lái)繪制就更好了 -
Lighting
:關(guān)于光照烘焙的詳細(xì)設(shè)置
-
需要編輯各層的貼圖設(shè)置只需點(diǎn)擊Edit Textures...
> Edit Texture...
,需要?jiǎng)h除貼圖層就點(diǎn)擊Edit Textures...
> Remove Texture
菲语。
我一直都覺(jué)得這是個(gè)非常精妙的設(shè)計(jì)妄辩,用無(wú)縫貼圖的大量重復(fù)來(lái)覆蓋區(qū)域,然后疊加多層貼圖以消除重復(fù)感山上,不論是顏色貼圖還是控制貼圖都不需要很大的尺寸就能覆蓋超大的地形區(qū)域眼耀。
可以嘗試在Maya中使用這種思路來(lái)設(shè)計(jì)地面材質(zhì)的shading network。
Place Trees
在地形上刷出樹(shù)來(lái)佩憾。
按下鼠標(biāo)左鍵開(kāi)始刷樹(shù)哮伟,按住Shift
鍵再刷可以刪除已經(jīng)刷出來(lái)的樹(shù),按住Ctrl
鍵再刷可以刪除當(dāng)前選擇的特定類型的樹(shù)妄帘。
在Trees欄點(diǎn)擊Edit Trees...
楞黄,再選擇Add Tree
,可以添加一個(gè)GameObject作為“樹(shù)”寄摆。這個(gè)物體可以是任意GameObject谅辣,并不一定非要是Tree Object。
然后就可以用鼠標(biāo)在地形表面“刷”出這類樹(shù)來(lái)了婶恼,同時(shí)也會(huì)出現(xiàn)具體的Settings參數(shù)桑阶。
-
Settings
:-
Brush Size
:筆刷大小 -
Tree Density
:樹(shù)的密度,還可以點(diǎn)擊Mass Place Trees
按鈕來(lái)用一大批樹(shù)布滿整個(gè)地形 -
Tree Height
:樹(shù)的高度(Y軸縮放)勾邦,如果勾選Random?
則可以設(shè)置一個(gè)范圍蚣录,系統(tǒng)自動(dòng)隨機(jī)生成不同高度的樹(shù) -
Lock Width to Height
:是否鎖定縮放比例,如果不鎖定眷篇,可以在下面Tree Width參數(shù)中設(shè)定樹(shù)的寬度(X軸和Z軸一定是等比縮放的) -
Color Variation
:顏色的隨機(jī)變化程度萎河,會(huì)自動(dòng)讓不同的樹(shù)的顏色產(chǎn)生一定的差異 -
Lighting
:關(guān)于光照烘焙的詳細(xì)設(shè)置
-
我們可以添加多種type的樹(shù),然后一層層刷出復(fù)雜的森林結(jié)構(gòu)。
同樣的虐杯,我們也可以點(diǎn)擊Edit Trees...
> Edit Tree
給樹(shù)更換GameObject玛歌,或點(diǎn)擊Edit Trees...
> Remove Tree
刪除某一層的樹(shù)。
說(shuō)是Place Trees擎椰,其實(shí)可以用來(lái)放置各種場(chǎng)景物體支子,我個(gè)人比較喜歡用這個(gè)功能在場(chǎng)景中添加比較大塊的巖石,因?yàn)椴粫?huì)出現(xiàn)自旋的現(xiàn)象达舒。
Place Details
在地形上刷出細(xì)節(jié)物體值朋,通常用來(lái)做草。
按下鼠標(biāo)左鍵開(kāi)始刷細(xì)節(jié)物體巩搏,按住Shift
鍵再刷可以刪除已經(jīng)刷出來(lái)的細(xì)節(jié)物體昨登,按住Ctrl
鍵再刷可以刪除當(dāng)前選擇的特定類型的細(xì)節(jié)物體。
在Details欄點(diǎn)擊Edit Details...
贯底,再選擇Add Grass Texture
丰辣,打開(kāi)Add Grass Texture面板設(shè)置新建“草貼圖”的參數(shù):
-
Detail Texture
:選擇一張花或者草的貼圖 -
Min Width
、Max Width
丈甸、Min Height
糯俗、Max Height
:?jiǎn)蝹€(gè)草物體的最大最小的寬高值 -
Noise Spread
:添加一點(diǎn)分布隨機(jī)度 -
Healthy Color
:草的健康顏色(會(huì)被tint到貼圖的上部) -
Dry Color
:草的干枯顏色(會(huì)被tint到貼圖的底部) -
Billboard
:是否以永遠(yuǎn)面向攝像機(jī)的單面形式生成單個(gè)草物體,如果選否的話就會(huì)以十字交叉雙平面方式來(lái)生成單個(gè)草物體
在Details欄點(diǎn)擊Edit Details...
睦擂,再選擇Add Detail Mesh
得湘,打開(kāi)Add Detail Mesh面板設(shè)置新建“細(xì)節(jié)面片”的參數(shù):
-
Detail
:選擇一個(gè)prefab作為細(xì)節(jié)模型 -
Noise Spread
:添加一點(diǎn)分布隨機(jī)度 -
Min Width
、Max Width
顿仇、Min Height
淘正、Max Height
:?jiǎn)蝹€(gè)細(xì)節(jié)模型的最大最小的寬高值 -
Healthy Color
:細(xì)節(jié)模型的健康顏色(會(huì)被tint到頂部) -
Dry Color
:細(xì)節(jié)模型的干枯顏色(會(huì)被tint到底部) -
Render Mode
:細(xì)節(jié)模型的渲染模式,選擇Grass
的話模型會(huì)被壓扁成一個(gè)薄片臼闻,然后用草物體的渲染方式來(lái)渲染鸿吆,選擇Vertex Lit
的話模型會(huì)以頂點(diǎn)照明的方式接受場(chǎng)景光照