SabaProps

SabaProps Trees

VRChat ワールド向けのプロシージャル樹木ジェネレータです。互換用の広葉樹、針葉樹、
枯れ木、砂漠低木 archetype に加え、実在種を根拠にした樹冠・分枝・葉序の preset を生成します。

このパッケージは io.github.sabas0ba.sabaprops.foliage 0.6.0 に依存します。
Foliage の shader と風チャンネル契約を共有しますが、草向けの Distance Shrink と
影 OFF の既定値は使いません。

Trees の季節・樹種プリセットの比較

季節差と樹種差を同じ縮尺で比較した概要です。LOD と配置手順は 樹木の調整・確認ガイド にまとめています。

収録要素

  • 広葉樹: ケヤキ / イロハモミジ / シラカバ
  • 針葉樹: スギ / アカマツ / ヒノキ
  • 季節差分: ソメイヨシノ(春・夏)/ イチョウ(夏・秋)
  • 汎用形: Broadleaf / Conifer / Dead Tree / Desert Shrub

樹冠、分枝、葉序の違いは実在種 Presetに一覧化しています。

配置ツール

スクリーンショット、樹冠・枝葉・色・LODのパラメータ一覧と調整順は
樹木の調整・確認ガイドを参照してください。

Window > SabaProps > Placement または
Tools > SabaProps > Placement > Open Placement Window から共通配置ウィンドウを開けます。
Foliage Palette、Surface Growth Placer、単木、Tree Field を同じウィンドウから作成できます。
表示言語は日本語が既定で、ウィンドウ上部から英語へ切り替えられます。設定は Foliage の
配置ウィンドウと共通です。Foliage Palette では矩形/円形、数値寸法、範囲プリセット、
Scene View ハンドルを使ってスタンプ範囲を調整できます。
デモ生成は Tools > SabaProps > Debug 以下にあります。

単木・Tree Field を含む画面ごとの操作順、自動再生成、World ビルド前の扱いは
配置・編集 UI 操作ガイド
を参照してください。

使い方

Package Manager で SabaProps Trees を選び、Samples > Trees Demo > Import を実行すると、
10 preset と各 3 段階 LOD を生成済みの 3 シーンを確認できます。TreesDemo.unity は
ケヤキ等の混交林、スギ・ヒノキの植林、ケヤキ街路樹、SeasonalTreesDemo.unity は
シラカバ林、ソメイヨシノの春/夏の並木、イチョウの夏/秋の並木を収録しています。
ForestLoadDemo.unity は 64 本単位の 3 群を収録し、群を順番に有効化して 64 / 128 / 192 本の
描画負荷、樹冠の重なり、LOD 遷移を同じカメラ条件で比較できます。
高さと向きに固定Seedの個体差を加え、各樹種のLOD Meshを全個体で共有しています。Demo は
各 preset の既定分岐予算、樹冠、枝序、葉序、風応答をそのまま焼き込んでいます。

  1. Tools > SabaProps > Trees > Create Default Assets を実行します。10 preset と枯れ木・低木を作成します
  2. Assets/SabaProps/Trees/Species/ から TreeSpecies を選びます
  3. Inspector で構造・葉・LOD を調整し、Rebuild LOD Meshes を押します
  4. Create LOD Group in Scene を押すか、Hierarchy の GameObject > SabaProps > Placement > Tree LOD Group を実行します

既存の LOD Mesh は同じ GUID のまま更新されます。シーン参照は失われません。
Mesh の AssetDatabase 書き出しは Unity Undo の対象外です。Scene に生成した
LODGroup は Undo できます。

複数個体の配置

  1. Hierarchy の GameObject > SabaProps > Placement > Tree Field を実行します
  2. Species に配置する TreeSpecies と、必要ならフィールド固有の Weight を設定します
  3. エリア、密度、地面レイヤー、最小間隔などを調整して Generate を押します
  4. 再生成前の結果を削除する場合は Clear を押します

生成後は 値変更時に自動再生成 が既定で有効になり、Inspector の値を変更すると短い待ち時間の
後に LODGroup と Mesh が更新されます。大規模な林をまとめて編集する場合は無効にし、編集後に
Generate を実行できます。初回生成は常に Generate を使用します。

TreeField は Unity Editor 専用の authoring Component で、DontSaveInBuild により World
ビルドから自動除外されます。ビルド前に手動で削除する必要はありません。生成済みの GameObject、
MeshFilter、MeshRenderer、LODGroup は通常どおりビルドへ残ります。

TreeField は Foliage 0.6.0 の共有サーフェス散布 API を利用します。矩形/円形、固定
Seed、地面へのレイキャスト、高度制限、除外レイヤー、Density Mask の挙動は
Foliage Field と共通です。種の選択、傾斜制限、最小間隔、スケールと姿勢だけを
Trees 側のポリシーとして追加します。

LOD Mesh は Species ごとに 3 個だけ生成し、すべての個体で共有します。Scene には
通常の LODGroup と MeshRenderer を焼き込むため、ビルド後のワールドで C# は
実行されません。生成された Scene 階層は Unity Undo の対象ですが、Mesh アセットの
書き出しは Undo の対象外です。

生成モデル

  • 幹は動かさず、一次枝ごとに UV3 の wind pivot を持ちます
  • 子孫枝は一次枝の pivot と接続点の bend 値を継承するため、風で継ぎ目が開きません
  • UV3.xyz は object-space pivot、UV3.w は stiffness、UV0.y は bend です
  • Seed が同じなら頂点・index・LOD の生成結果は同じです
  • LOD1/LOD2 は同じ枝中心線と葉候補を維持しつつ、細枝の筒形状、断面数、枝区間数、葉カード数を段階的に減らし、残る葉を拡大して遠景の樹冠面積を保ちます
  • 一次枝と子枝は Spiral / Opposite / Whorled / Irregular の枝序で配置します
  • Crown Shape が高さごとの枝長包絡を、Apical Dominance が主幹と側枝の比率を決めます
  • Crown Envelope Strength は樹冠外形に応じて枝の成長量を短縮する強さです。0 は自由成長、1 は外形制約を適用します。枝は付け根から方向を保って短縮され、短縮した枝からの子枝も短くなります。主幹先端より上にも枝が育つ空間を設けています
  • 外形補正後は縦横比と枝の角度を保つ等方スケールで大きさを補正します。X/Z方向だけの拡大は行いません
  • Crown Width Scale は外形判定に使う基準半径です。大きくすると横方向へ枝が伸びる余地が増えます。最終的な高さ・幅には Crown Volume Scale によるスケールも影響します
  • Crown Volume Scale は自由成長Meshの外接箱体積を 1 としたサイズ補正目標です。葉の密度や枝葉の実占有体積ではありません。後述の半径拡大前の形状から補正量を求めるため、半径を広げても自動で縮小されません。最終的な見栄えはUnityで確認してください
  • Crown Radial Scale は一次枝の付け根を基準に、枝の中心線と葉の配置位置を水平方向へ広げます。実在種presetの既定値は 1.5 です。幹の形状、枝の太さ、葉の大きさ、中心線の高さは維持します。1 に戻すと半径拡大を無効にできます。最終体積を旧Sampleの±20%に抑える制約は適用しません
  • Primary Branch Departure は一次枝の出始めの向きを、幹の接線から Branch Angle の方向へ寄せる割合です。実在種presetの既定値は 0.25 です。0 は幹に沿って立ち上がり、大きくすると付け根から外向きに分岐します
  • Crown Density は再帰深度を変えずに主枝層を増減し、Foliage Depth は葉を付ける末端側の枝階層数を決めます
  • 構造枝は水平より下へ向けず、Branch Droop は細い末端枝だけへ適用します。Tip Upturn は先端の上向きを加えます
  • 子枝半径は分岐数の平方根で上限を設け、親より太い末端枝が生じないようにします
  • 樹皮色は幹・枝・端面・葉柄で共通の高さに基づいて補間し、分岐次数による接合部の色の急変を防ぎます。葉は互生・対生・輪生・2 針束を分けます
  • 親枝の終端と継続枝は同じ位置・半径で接続し、非終端の切断面を作りません

風

Wind Enabled は Species 単位の風応答を切り替え、Wind Response は共有 Material の風に
対する倍率を設定します。変更後は Rebuild LOD Meshes が必要です。OFF の場合は UV3.w を
0 として焼き込むため、実行時スクリプトや Species ごとの Material は増えません。
Branch Stiffness と Leaf Stiffness は枝と葉の相対的な応答量です。全体の風向、速度、強度は
Material の Direction、Speed、Strength で設定します。

実在種 Preset

Preset構造葉・樹皮
Japanese Zelkova / ケヤキ街路樹向けの丸い樹冠、上向きの螺旋枝互生する小型広葉、灰褐色から若枝色
Japanese Maple / イロハモミジ低い位置から広がる層状樹冠、対生分枝対生する 5 裂の掌状葉
Japanese Cedar / スギ主幹優勢の円錐樹冠、水平からやや下垂する輪生枝輪生状の短い針葉、赤褐色樹皮
Japanese White Birch / シラカバ中心主幹と細い開出枝、先端ほど下垂互生する小型広葉、白い幹から褐色若枝
Japanese Red Pine / アカマツ曲がる幹、上部に偏る疎な輪生枝、開いた樹冠2 本束の長い針葉、灰色の根元から橙赤色樹皮
Hinoki Cypress / ヒノキ主幹優勢の円錐樹冠、水平な輪生枝、細い末端だけが小さく下垂対生する鱗片葉、暗緑色の葉、赤褐色樹皮
Somei Yoshino Spring / ソメイヨシノ・春太い枝が横へ広がる丸い樹冠葉より先に付く淡桃色から白色の 5 弁花
Somei Yoshino Summer / ソメイヨシノ・夏春と同じ Seed・枝構造互生する卵形の緑葉
Ginkgo Summer / イチョウ・夏直立する主幹と円錐状の樹冠短枝にまとまる緑色の扇形葉
Ginkgo Autumn / イチョウ・秋夏と同じ Seed・枝構造黄色く紅葉した扇形葉

形態の根拠は、North Carolina State University Extension の
ケヤキ、
イロハモミジ、
スギ、
シラカバ、
アカマツの記載に基づきます。
ヒノキ、ソメイヨシノ、イチョウの追加形態は森林総合研究所の
ヒノキ、
ソメイヨシノ、
イチョウを参照しています。
生成器は種同定用の精密模型ではなく、低ポリゴンの樹冠シルエットと分枝差を目的とします。

Apply Botanical Preset は現在選択中の実在種 preset でパラメータを置き換えます。
Apply Archetype Preset は従来の汎用形へ戻します。実行前の TreeSpecies は Undo できます。

現在の範囲

0.1.0 は 1 個体の生成と TreeField による複数個体の Scene 配置を対象にします。
ブラシで塗る配置、結合メッシュ出力、実行時の動的生成は対象外です。

ライセンス

本パッケージは Apache License 2.0 で提供します。全文は LICENSE.md を参照してください。外部依存・モデル・素材には、それぞれの配布元のライセンスが適用されます。