Unity3D :樹
推薦:將NSDT場(chǎng)景編輯器加入你的3D工具鏈
3D工具集:NSDT簡(jiǎn)石數(shù)字孿生樹
可使用類似于繪制高度貼圖和紋理的方式在地形上繪制樹。然而,樹是從表面生長(zhǎng)的 3D 對(duì)象實(shí)體。Unity 使用優(yōu)化(比如針對(duì)遠(yuǎn)處樹的公告牌)來(lái)保持良好的渲染性能。這意味著可以實(shí)現(xiàn)茂密森林(擁有數(shù)以千計(jì)的樹),而仍然保持可接受的幀率。
有樹的地形
繪制樹工具欄上的 Paint Trees 按鈕可用于繪制樹:
Paint Trees 按鈕
地形最初沒(méi)有可用的樹原型。為了開始在地形上繪制,需要添加樹原型。單擊 Edit Trees 按鈕,然后選擇 Add Tree。在此處,可從項(xiàng)目中選擇樹資源,并將其添加為__樹預(yù)制件__以便與畫筆結(jié)合使用:
Add Tree 窗口
為便于進(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è)置以便自定義樹的位置和特征。
樹的設(shè)置
Mass Place Trees | 創(chuàng)建一批整體覆蓋的樹,但不繪制在整個(gè)地形上。批量放置樹后,仍然可以使用繪制功能來(lái)添加或移除樹,從而創(chuàng)建更密集或更稀疏的區(qū)域。 |
Brush Size | 控制可添加樹的區(qū)域的大小。 |
Tree Density | Tree 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ì)算。 |
可通過(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 文檔?;蛘撸褂?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)查看地形上更新后的樹:
Refresh 按鈕位置
注意:在 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ì)于樹編輯器樹,Unity 的 LOD 系統(tǒng)使用 2D 到 3D 過(guò)渡區(qū)域?qū)?2D 廣告牌與 3D 樹模型無(wú)縫融合。這可以防止2D和3D樹突然彈出,這在VR中至關(guān)重要。請(qǐng)注意,廣告牌樹木不會(huì)接收局部照明,例如點(diǎn)光源和聚光燈。它們使用定向光源,但廣告牌上的照明僅在您旋轉(zhuǎn)攝像機(jī)時(shí)更新。
對(duì)于 SpeedTree 樹,請(qǐng)參閱 LOD 和 LOD 組 (LOD Group) 文檔以了解關(guān)于配置 LOD 組件的更多信息。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。