SabaProps Trees
VRChat ワールド向けのプロシージャル樹木ジェネレータです。互換用の広葉樹、針葉樹、
枯れ木、砂漠低木 archetype に加え、実在種を根拠にした樹冠・分枝・葉序の preset を生成します。
このパッケージは io.github.sabas0ba.sabaprops.foliage 0.6.0 に依存します。
Foliage の shader と風チャンネル契約を共有しますが、草向けの Distance Shrink と
影 OFF の既定値は使いません。

季節差と樹種差を同じ縮尺で比較した概要です。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 の既定分岐予算、樹冠、枝序、葉序、風応答をそのまま焼き込んでいます。
Tools > SabaProps > Trees > Create Default Assetsを実行します。10 preset と枯れ木・低木を作成しますAssets/SabaProps/Trees/Species/からTreeSpeciesを選びます- Inspector で構造・葉・LOD を調整し、
Rebuild LOD Meshesを押します Create LOD Group in Sceneを押すか、Hierarchy のGameObject > SabaProps > Placement > Tree LOD Groupを実行します
既存の LOD Mesh は同じ GUID のまま更新されます。シーン参照は失われません。
Mesh の AssetDatabase 書き出しは Unity Undo の対象外です。Scene に生成したLODGroup は Undo できます。
複数個体の配置
- Hierarchy の
GameObject > SabaProps > Placement > Tree Fieldを実行します Speciesに配置するTreeSpeciesと、必要ならフィールド固有の Weight を設定します- エリア、密度、地面レイヤー、最小間隔などを調整して
Generateを押します - 再生成前の結果を削除する場合は
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 を参照してください。外部依存・モデル・素材には、それぞれの配布元のライセンスが適用されます。