博客專欄

        EEPW首頁 > 博客 > Unity3D :樹

        Unity3D :樹

        發布人:xyni2023 時間:2023-05-10 來源:工程師 發布文章
        推薦:將NSDT場景編輯器加入你的3D工具鏈
        3D工具集:NSDT簡石數字孿生

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

        有樹的地形有樹的地形

        繪制樹

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

        Paint Trees 按鈕Paint Trees 按鈕

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

        Add Tree 窗口Add Tree 窗口

        為便于進行原型設計,SpeedTree 在 Asset Store 上的免費 SpeedTrees 包 中提供了四種 SpeedTree 模型。或者,您也可以創建自己的樹。

        如果所導入的樹預制件支持 Bend Factor__,__Add Tree 窗口將顯示用于調整風響應性的 Bend Factor 屬性。SpeedTree Modeler 創建的樹沒有 __Bend Factor__;只有 Tree Editor 創建的樹才有。請參閱下文關于__讓樹在風中彎曲__的部分。

        配置 Settings 中的設置(如下文所述)后,可以按照與繪制紋理或高度貼圖相同的方法在地形上繪制樹。若要從區域中移除樹,請在繪制時按住 Shift 鍵。若要僅移除當前選定的樹類型,請在繪制時按住 Control 鍵。

        設置

        選擇要放置的樹之后,可調整其設置以便自定義樹的位置和特征。

        樹的設置樹的設置

        屬性功能
        Mass Place Trees創建一批整體覆蓋的樹,但不繪制在整個地形上。批量放置樹后,仍然可以使用繪制功能來添加或移除樹,從而創建更密集或更稀疏的區域。
        Brush Size控制可添加樹的區域的大小。
        Tree DensityTree Density 控制 Brush Size 定義的區域中繪制的樹平均數量。
        Tree Height使用滑動條來控制樹的最小高度和最大高度。將滑動條向左拖動繪制矮樹,向右拖動繪制高樹。如果取消選中 Random,可以將所有新樹的確切高度比例指定為 0.01 到 2 的范圍內。
        Lock Width to Height默認情況下,樹寬度與其高度鎖定,因此始終會均勻縮放樹。然而,可以禁用 Lock Width to Height 選項,然后單獨指定寬度。
        Tree Width如果樹寬度未與其高度鎖定,則可以使用滑動條來控制樹的最小寬度和最大寬度。將滑動條向左拖動繪制細樹,向右拖動繪制粗樹。如果取消選中 Random,可以將所有新樹的確切寬度比例指定為 0.01 到 2 的范圍內。
        Random Tree Rotation如果為樹配置 LOD 組,請使用 Random Tree Rotation 設置來幫助創建隨機自然的森林效果,而不是人工種植的完全相同的樹。如果要以相同的固定旋轉來放置樹,請取消選中此選項。
        Color Variation應用于樹的隨機著色量。僅在著色器讀取 _TreeInstanceColor 屬性時有效。例如,用 Tree Editor 創建的所有樹的著色器將讀取 _TreeInstanceColor 屬性。
        Tree Contribute Global Illumination啟用此復選框可向 Unity 指示樹影響全局光照計算。
        創建樹

        可通過兩種方法來新建樹模型。使用 IDV, Inc. 提供的 SpeedTree Modeler 來創建具有高級視覺效果(例如,平滑的 LOD 過渡、快速公告牌以及自然風動畫)的樹。有關更多詳細信息,請參閱 SpeedTree Modeler 文檔。或者,使用 Tree Editor 來創建樹模型。

        在內部,地形引擎通過確定樹預制件的根游戲對象上是否存在 LOD 組來區分這兩種類型的模型。SpeedTree 預制件具有 LODGroup 組件,但 Tree Editor 預制件沒有該組件。

        創建樹時,將錨點定位在樹的基部(樹破土而出的位置)。性能取決于樹模型的多邊形數,因此請確保在平臺上進行測試,并在必要時創建更簡單的樹。另外,對于 Tree Editor 樹,每個網格都正好有兩種材質:一種用于樹體,另一種用于樹葉。

        用 Tree Editor 創建的樹必須使用__自然/軟遮擋樹葉 (Nature/Soft Occlusion Leaves)__ 和__自然/軟遮擋樹皮 (Nature/Soft Occlusion Bark)__ 著色器。要使用這些著色器,必須將樹放在名為 Ambient-Occlusion 的特定文件夾中,否則樹無法正確渲染。將模型放入此文件夾并將其重新導入時,Unity 會使用一種專為樹設計的方式計算軟__環境光遮擋__。

        如果在單獨的 3D 建模應用程序中更改導入的樹資源,則需要單擊 Editor 中的 Refresh 按鈕來查看地形上更新后的樹:

        Refresh 按鈕位置Refresh 按鈕位置

        注意:在 3D 建模程序中導入并改變 SpeedTree 模型后,再將其重新導出(擴展名為 .fbx 或 .obj),可能會丟失 SpeedTree 模型附帶的自然風動畫功能。

        將碰撞體用于樹

        可以將膠囊碰撞體 (Capsule Collider) 添加到樹資源。首先,單擊樹資源旁的 > 以打開預制件。

        然后,選擇 Add Component > Physics > Capsule Collider 來添加碰撞體。單擊預制件名稱旁的 < 以返回到場景。

        還必須在 Terrain Collider 組件中啟用 Enable Tree Colliders

        讓樹在風中彎曲

        風區可以彎曲樹木以模擬風的直接影響。此功能僅可用于通過 Terrain 菜單放置的樹。為此,請選擇地形,單擊 Inspector 中的 Paint Trees 按鈕,然后選擇 Edit Trees > Add Tree__,再選擇樹預制件。如果未在 Unity 中創建樹,請將 Bend Factor__ 設置為 1。單擊地形以放置選定的樹。

        具有 Bend Factor 的基于地形樹通過彎曲和搖擺(根據風區的 Turbulence 和 Main 屬性值),對風區做出反應。Turbulence 設置用于控制樹葉的飄動。減小該值可使飄動特效流暢。Main 值用于控制風的主要作用力。要創建風區,請選擇 GameObject > 3D Object > Wind Zone

        如果風區的 Mode 為 Directional__,則其相對于樹的位置無關緊要。樹將向風區方向搖擺。然而,如果風區的 Mode__ 為 Spherical__,則其 Radius__ 必須與樹的半徑重疊。這樣會產生多方向的陣風,風力從中心到邊緣衰減。

        在默認設置下,諸如闊葉樹 (Broadleaf) 預制件(在 Standard Assets Environment 包中提供)之類的樹可以平穩而逼真地擺動。但是,如果您使用自己的樹預制件,可能需要調整 Wind Zone 屬性值。如果樹預制件的樹干徹底彎向一側,請嘗試減小 Main 值。或者,如果樹預制件的樹枝過度彎曲或伸展,請減小 Turbulence 值。

        樹細節級別 (LOD) 過渡區

        對于樹編輯器樹,Unity 的 LOD 系統使用 2D 到 3D 過渡區域將 2D 廣告牌與 3D 樹模型無縫融合。這可以防止2D和3D樹突然彈出,這在VR中至關重要。請注意,廣告牌樹木不會接收局部照明,例如點光源和聚光燈。它們使用定向光源,但廣告牌上的照明僅在您旋轉攝像機時更新。

        對于 SpeedTree 樹,請參閱 LOD 和 LOD 組 (LOD Group) 文檔以了解關于配置 LOD 組件的更多信息。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 編輯器 數字孿生 3D

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 根河市| 浙江省| 曲水县| 中超| 水城县| 林芝县| 平湖市| 彭阳县| 宿州市| 都江堰市| 九龙城区| 庐江县| 平湖市| 嘉祥县| 合山市| 许昌县| 濉溪县| 扬州市| 吴江市| 漠河县| 朝阳县| 彰化县| 宁夏| 辽宁省| 巴楚县| 钟山县| 建湖县| 昌都县| 休宁县| 拉萨市| 依安县| 揭西县| 阿拉善盟| 辰溪县| 新疆| 平南县| 佛坪县| 伊宁市| 行唐县| 长白| 平山县|