Unity3D自帶功能:地形(Terrain)


Unity3D中的地形類(lèi)似于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ì)類(lèi)型
    • 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)前選擇的特定類(lèi)型的樹(shù)。

在Trees欄點(diǎn)擊Edit Trees...,再選擇Add Tree,可以添加一個(gè)GameObject作為“樹(shù)”。這個(gè)物體可以是任意GameObject,并不一定非要是Tree Object。

然后就可以用鼠標(biāo)在地形表面“刷”出這類(lèi)樹(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)前選擇的特定類(lèi)型的細(xì)節(jié)物體。

在Details欄點(diǎn)擊Edit Details...,再選擇Add Grass Texture,打開(kāi)Add Grass Texture面板設(shè)置新建“草貼圖”的參數(shù):

  • Detail Texture:選擇一張花或者草的貼圖
  • Min Width、Max Width、Min HeightMax 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)景光照

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容