Unity-地形-樹
可使用類似于繪制高度貼圖和紋理的方式在地形上繪制樹。然而,樹是從表面生長(zhǎng)的 3D 對(duì)象實(shí)體。Unity 使用優(yōu)化(比如針對(duì)遠(yuǎn)處樹的公告牌)來(lái)保持良好的渲染性能。這意味著可以實(shí)現(xiàn)茂密森林(擁有數(shù)以千計(jì)的樹),而仍然保持可接受的幀率。

繪制樹
工具欄上的?Paint Trees?按鈕可用于繪制樹:

地形最初沒(méi)有可用的樹原型。為了開始在地形上繪制,需要添加樹原型。單擊?Edit Trees?按鈕,然后選擇?Add Tree。在此處,可從項(xiàng)目中選擇樹資源,并將其添加為__樹預(yù)制件__以便與畫筆結(jié)合使用:

為便于進(jìn)行原型設(shè)計(jì),SpeedTree 在 Asset Store 上的免費(fèi) SpeedTrees 包?中提供了四種 SpeedTree 模型。或者,您也可以創(chuàng)建自己的樹。
如果所導(dǎo)入的樹預(yù)制件支持?Bend Factor__,__Add Tree?窗口將顯示用于調(diào)整風(fēng)響應(yīng)性的?Bend Factor?屬性。SpeedTree Modeler 創(chuàng)建的樹沒(méi)有 __Bend Factor__;只有 Tree Editor 創(chuàng)建的樹才有。請(qǐng)參閱下文關(guān)于__讓樹在風(fēng)中彎曲__的部分。
配置?Settings?中的設(shè)置(如下文所述)后,可以按照與繪制紋理或高度貼圖相同的方法在地形上繪制樹。若要從區(qū)域中移除樹,請(qǐng)?jiān)诶L制時(shí)按住 Shift 鍵。若要僅移除當(dāng)前選定的樹類型,請(qǐng)?jiān)诶L制時(shí)按住 Control 鍵。
設(shè)置
選擇要放置的樹之后,可調(diào)整其設(shè)置以便自定義樹的位置和特征。

屬性????????????????????????????????????????????????功能
Mass Place Trees????創(chuàng)建一批整體覆蓋的樹,但不繪制在整個(gè)地形上。批量放置樹后,仍然可以使用繪制功能來(lái)添加或移除樹,從而創(chuàng)建更密集或更稀疏的區(qū)域。
Brush Size控制可添加樹的區(qū)域的大小。
Tree DensityTree Density?控制?Brush Size?定義的區(qū)域中繪制的樹平均數(shù)量。
Tree Height使用滑動(dòng)條來(lái)控制樹的最小高度和最大高度。將滑動(dòng)條向左拖動(dòng)繪制矮樹,向右拖動(dòng)繪制高樹。如果取消選中?Random,可以將所有新樹的確切高度比例指定為 0.01 到 2 的范圍內(nèi)。
Lock Width to Height默認(rèn)情況下,樹寬度與其高度鎖定,因此始終會(huì)均勻縮放樹。然而,可以禁用?Lock Width to Height?選項(xiàng),然后單獨(dú)指定寬度。
Tree Width如果樹寬度未與其高度鎖定,則可以使用滑動(dòng)條來(lái)控制樹的最小寬度和最大寬度。將滑動(dòng)條向左拖動(dòng)繪制細(xì)樹,向右拖動(dòng)繪制粗樹。如果取消選中?Random,可以將所有新樹的確切寬度比例指定為 0.01 到 2 的范圍內(nèi)。
Random Tree Rotation如果為樹配置 LOD 組,請(qǐng)使用?Random Tree Rotation?設(shè)置來(lái)幫助創(chuàng)建隨機(jī)自然的森林效果,而不是人工種植的完全相同的樹。如果要以相同的固定旋轉(zhuǎn)來(lái)放置樹,請(qǐng)取消選中此選項(xiàng)。
Color Variation應(yīng)用于樹的隨機(jī)著色量。僅在著色器讀取?_TreeInstanceColor
?屬性時(shí)有效。例如,用 Tree Editor 創(chuàng)建的所有樹的著色器將讀取?_TreeInstanceColor
?屬性。
Tree Contribute Global Illumination啟用此復(fù)選框可向 Unity 指示樹影響全局光照計(jì)算。
創(chuàng)建樹
可通過(guò)兩種方法來(lái)新建樹模型??梢允褂?IDV, Inc. 提供的?SpeedTree Modeler?來(lái)創(chuàng)建具有高級(jí)視覺(jué)效果(例如,平滑的 LOD 過(guò)渡、快速公告牌以及自然風(fēng)動(dòng)畫)的樹。有關(guān)更多詳細(xì)信息,請(qǐng)參閱?SpeedTree Modeler 文檔。或者,也可以使用 Unity 的?Tree Editor?來(lái)創(chuàng)建樹模型。
在內(nèi)部,地形引擎通過(guò)確定樹預(yù)制件的根游戲?qū)ο笊鲜欠翊嬖?LOD 組來(lái)區(qū)分這兩種類型的模型。SpeedTree 預(yù)制件具有?LODGroup?組件,但 Tree Editor 預(yù)制件沒(méi)有該組件。
創(chuàng)建樹時(shí),將錨點(diǎn)定位在樹的基部(樹破土而出的位置)。性能取決于樹模型的多邊形數(shù),因此請(qǐng)確保在平臺(tái)上進(jìn)行測(cè)試,并在必要時(shí)創(chuàng)建更簡(jiǎn)單的樹。另外,對(duì)于 Tree Editor 樹,每個(gè)網(wǎng)格都正好有兩種材質(zhì):一種用于樹體,另一種用于樹葉。
用 Tree Editor 創(chuàng)建的樹必須使用__自然/軟遮擋樹葉 (Nature/Soft Occlusion Leaves)__ 和__自然/軟遮擋樹皮 (Nature/Soft Occlusion Bark)__ 著色器。要使用這些著色器,必須將樹放在名為?Ambient-Occlusion?的特定文件夾中,否則樹無(wú)法正確渲染。將模型放入此文件夾并將其重新導(dǎo)入時(shí),Unity 會(huì)使用一種專為樹設(shè)計(jì)的方式計(jì)算軟__環(huán)境光遮擋__。
如果在單獨(dú)的 3D 建模應(yīng)用程序中更改導(dǎo)入的樹資源,則需要單擊 Editor 中的?Refresh?按鈕來(lái)查看地形上更新后的樹:

注意:在 3D 建模程序中導(dǎo)入并改變 SpeedTree 模型后,再將其重新導(dǎo)出(擴(kuò)展名為?.fbx
?或?.obj
),可能會(huì)丟失 SpeedTree 模型附帶的自然風(fēng)動(dòng)畫功能。
將碰撞體用于樹
可以將膠囊碰撞體 (Capsule Collider)?添加到樹資源。首先,單擊樹資源旁的?>?以打開預(yù)制件。

然后,選擇?Add Component > Physics > Capsule Collider?來(lái)添加碰撞體。單擊預(yù)制件名稱旁的?<?以返回到場(chǎng)景。
還必須在?Terrain Collider?組件中啟用?Enable Tree Colliders。

讓樹在風(fēng)中彎曲
風(fēng)區(qū)可以彎曲樹木以模擬風(fēng)的直接影響。此功能僅可用于通過(guò) Terrain 菜單放置的樹。為此,請(qǐng)選擇地形,單擊 Inspector 中的?Paint Trees?按鈕,然后選擇?Edit Trees > Add Tree__,再選擇樹預(yù)制件。如果未在 Unity 中創(chuàng)建樹,請(qǐng)將?Bend Factor__ 設(shè)置為 1。單擊地形以放置選定的樹。
具有?Bend Factor?的基于地形樹通過(guò)彎曲和搖擺(根據(jù)風(fēng)區(qū)的?Turbulence?和?Main?屬性值),對(duì)風(fēng)區(qū)做出反應(yīng)。Turbulence?設(shè)置用于控制樹葉的飄動(dòng)。減小該值可使飄動(dòng)特效流暢。Main?值用于控制風(fēng)的主要作用力。要?jiǎng)?chuàng)建風(fēng)區(qū),請(qǐng)選擇?GameObject > 3D Object > Wind Zone。
如果風(fēng)區(qū)的?Mode?為?Directional__,則其相對(duì)于樹的位置無(wú)關(guān)緊要。樹將向風(fēng)區(qū)方向搖擺。然而,如果風(fēng)區(qū)的?Mode__ 為?Spherical__,則其?Radius__ 必須與樹的半徑重疊。這樣會(huì)產(chǎn)生多方向的陣風(fēng),風(fēng)力從中心到邊緣衰減。
在默認(rèn)設(shè)置下,諸如闊葉樹 (Broadleaf) 預(yù)制件(在 Standard Assets Environment 包中提供)之類的樹可以平穩(wěn)而逼真地?cái)[動(dòng)。但是,如果您使用自己的樹預(yù)制件,可能需要調(diào)整 Wind Zone 屬性值。如果樹預(yù)制件的樹干徹底彎向一側(cè),請(qǐng)嘗試減小?Main?值。或者,如果樹預(yù)制件的樹枝過(guò)度彎曲或伸展,請(qǐng)減小?Turbulence?值。
樹細(xì)節(jié)級(jí)別 (LOD) 過(guò)渡區(qū)
對(duì)于 Tree Editor 樹,Unity 的 LOD 系統(tǒng)使用 2D 到 3D 過(guò)渡區(qū)將 2D 公告牌與 3D 樹模型進(jìn)行無(wú)縫混合。這樣可以防止 2D 和 3D 樹顯得過(guò)于突兀,這一點(diǎn)在 VR 中至關(guān)重要。請(qǐng)注意,公告牌樹不接收局部光照(例如點(diǎn)光源和聚光燈)。這些樹可使用方向光,但是公告牌上的光照僅在旋轉(zhuǎn)攝像機(jī)時(shí)更新。
對(duì)于 SpeedTree 樹,請(qǐng)參閱?LOD?和?LOD 組 (LOD Group)?文檔以了解關(guān)于配置 LOD 組件的更多信息。