カテゴリー: blender

  • Blender : Add-on ~ 樹木デザイナー (tree & leaf)~幹・枝・根をデザインする樹木生成

    Blender : Add-on ~ 樹木デザイナー (tree & leaf)~幹・枝・根をデザインする樹木生成

    はじめに

    KJ Procedural Tree Designerは、BlenderのNメニューから、樹木の幹・枝・根・樹皮をパラメータで生成・調整するAdd-onです。

    このAdd-onでは、樹木の形を固定メッシュとして作るのではなく、幹の高さ、太さ、枝分かれ、根の広がり、樹皮の凹凸などを設定値から生成します。
    現在の開発方針では、v0.2.5を基準に戻し、Geometry NodesのCurve to MeshノードのScale値を太さ制御の目的変数として扱う方向が重要です。v0.2.5のソースでは、Add-on情報としてBlender 5.1対象、バージョン0.2.5、Nパネル配置が定義されています。

    樹木の幹・枝・根のデザイナー,葉っぱのデザイナーをAdd-onで作ったので,図のような樹木をデザインしてみた.

    Image

    このAdd-onでできること

    KJ Procedural Tree Designerでは、以下のような樹木デザインを作れます。

    ・太い幹を持つ大木
    ・枝分かれした枯れ木風の樹形
    ・地面に広がる根
    ・表皮の凹凸や縦筋を持つ樹皮
    ・枝数、根数、分岐階層を調整した樹形
    ・Formulaモデルを残しながらGeometry Nodesで編集する樹木

    主な目的は、城、森、盆栽、ファンタジー背景、ゲーム背景、アニメ背景などで使える樹木パーツを、手作業ではなくパラメータで効率よく作ることです。


    基本構造

    このAdd-onは大きく分けて、次の2つの仕組みで動きます。

    1. Formula Reference
       Pythonの数式モデルで幹・枝・根の中心線を生成する基準モデル
    
    2. Live GN Designer
       Geometry Nodesでカーブを太さ付きメッシュへ変換し、樹皮などを編集するモデル

    Formula Referenceは、樹木の原形モデルです。
    Live GN Designerは、その原形をもとに、Geometry Nodesで編集しやすくした表示・編集用モデルです。

    Geometry Nodes Modifierは、ノードグループを使ってオブジェクトの形状を生成・変形するBlender標準機能です。


    インストール方法

    1. Blenderを起動します。
    2. メニューから以下を開きます。
    Edit
    → Preferences
    → Add-ons
    1. Install from Diskを押します。
    2. kj_procedural_tree_designer_XXXX.pyまたはZIP版を選択します。
    3. Add-on一覧でKJ Procedural Tree Designerを有効化します。
    4. 3D ViewportでNキーを押します。
    5. 右側のNメニューにKJ Treeタブが表示されます。

    旧版を入れている場合は、先に旧版を無効化・削除してからBlenderを再起動してください。


    基本的な使い方

    1. 新しい樹木を作成する

    NメニューのKJ Treeタブを開き、次のボタンを押します。

    New Formula + Live GN Tree

    これにより、樹木のControllerと、幹・枝・根の生成データが作成されます。


    2. 幹を調整する

    Trunkセクションで、幹の基本形状を調整します。

    Tree Height
    Base Radius
    Top Radius
    Trunk Segments
    Taper
    Lean Direction
    Lean Amount
    Main Bend
    Irregularity
    Trunk Twist
    Base Flare Noise

    各項目の意味は次の通りです。

    項目内容
    Tree Height樹木全体の高さ
    Base Radius幹の根元の太さ
    Top Radius幹の先端側の太さ
    Trunk Segments幹の分割数
    Taper根元から先端への細くなり方
    Lean Direction幹が傾く方向
    Lean Amount幹の傾き量
    Main Bend幹全体の曲がり
    Irregularity幹の不規則な揺らぎ
    Trunk Twist幹のねじれ
    Base Flare Noise根元の膨らみの不規則性

    重要: 現在の開発では、Base Radiusなどの太さ制御は、Geometry Nodes内のCurve to MeshノードのScaleに直結させる方針が最も安定すると考えています。Set Curve Radiusも曲線の半径を制御するノードですが、提示されたノード構成ではCurve to Mesh側のScaleが実際の直径に強く影響しているため、ここを操作パネルの目的変数にする方針です。Set Curve Radiusはカーブの半径を制御し、Curve to Meshのプロファイルサイズに関係するノードです。


    3. 枝を調整する

    Primary Branchesでは、主枝の本数や発生位置を調整します。

    Enable Branches
    Primary Branch Count
    Start Height
    End Height
    Branch Length
    Length Random
    Radius Ratio
    Upward Bias
    Horizontal Spread
    Rotation Random
    Droop
    Segments per Branch
    項目内容
    Enable Branches枝を生成するか
    Primary Branch Count主枝の本数
    Start Height枝が出始める高さ
    End Height枝が出る上限高さ
    Branch Length枝の長さ
    Length Random枝長さのランダム性
    Radius Ratio枝の太さ比率
    Upward Bias枝の上向き傾向
    Horizontal Spread横方向への広がり
    Rotation Random周方向配置のランダム性
    Droop枝先の垂れ
    Segments per Branch枝1本あたりの分割数

    4. 子枝を調整する

    Child Branchesでは、枝からさらに枝分かれする構造を設定します。

    Branch Levels
    Children per Branch
    Child Length Ratio
    Child Radius Ratio
    Split Angle
    Level Randomness
    Tip Curl
    Maximum Branches
    項目内容
    Branch Levels枝分かれの階層数
    Children per Branch1本の枝から出る子枝数
    Child Length Ratio子枝の長さ減衰
    Child Radius Ratio子枝の太さ減衰
    Split Angle分岐角度
    Level Randomness階層ごとのランダム性
    Tip Curl枝先のカール
    Maximum Branches枝の最大生成数

    枝が多すぎると処理が重くなるため、Branch LevelsMaximum Branchesは小さめから調整してください。


    5. 根を調整する

    Rootsでは、地面に広がる根を設定します。

    Enable Roots
    Primary Root Count
    Root Length
    Root Radius Ratio
    Radial Spread
    Downward Bias
    Surface Follow
    Root Irregularity
    Segments per Root
    Root Levels
    Children per Root
    Root Length Decay
    Root Radius Decay
    Root Split Angle
    Root Flatten
    Buttress Strength
    Tip Depth
    Root Surface Depth
    Maximum Roots
    項目内容
    Enable Roots根を生成するか
    Primary Root Count主根の本数
    Root Length根の長さ
    Root Radius Ratio根の太さ比率
    Radial Spread放射状の広がり
    Downward Bias下方向への潜り込み
    Surface Follow地表追従の強さ
    Root Irregularity根の蛇行
    Root Levels側根の階層数
    Children per Root根から出る側根数
    Root Flatten根断面の扁平率
    Buttress Strength根元の板根・膨らみ
    Maximum Roots根の最大生成数

    提示されたノードでは、RootのCurve to MeshノードのScale = 0.100が実質的なRoot直径に効いている可能性があります。したがって、今後の修正では、Root Radius操作値をこのScaleに直結する設計が有力です。


    樹皮の編集

    樹皮はLive GN Controls側で調整します。

    Bark Displacement

    Enable Bark Geometry
    Bark Strength
    Ridge Strength
    Detail Strength
    Crack Strength
    項目内容
    Enable Bark Geometry樹皮凹凸のON/OFF
    Bark Strength大きな凹凸の高さ
    Ridge Strength縦筋の強さ
    Detail Strength細かな凹凸の強さ
    Crack Strength割れ目・溝の強さ

    Bark Pattern

    Bark Scale
    Vertical Stretch
    Ridge Frequency
    Detail Scale
    Longitudinal Subdivisions
    項目内容
    Bark Scale模様の大きさ・密度
    Vertical Stretch縦方向への伸び
    Ridge Frequency縦筋の本数
    Detail Scale細部模様の密度
    Longitudinal Subdivisions樹皮変位用の長手方向分割数

    ScaleやFrequencyは、凹凸の高さではなく模様の密度や方向を変える項目です。変化が見えにくい場合は、先にBark StrengthRidge Strengthを大きくして確認してください。


    マテリアル編集

    Live Bark Materialでは、樹皮の色や質感を調整できます。

    Bark Color
    Dark Groove Color
    Roughness
    Bump Strength
    Color Variation
    項目内容
    Bark Color樹皮の基本色
    Dark Groove Color溝部分の暗い色
    Roughness表面の粗さ
    Bump Strengthマテリアル上の凹凸感
    Color Variation色ムラの強さ

    地面追従

    Groundでは、根を地形へ合わせる設定を行います。

    Ground Mode
    Ground Z
    Ground Object
    項目内容
    Flat Ground指定したZ高さを地面として使う
    Ground Object指定オブジェクトに根を追従させる
    Ground Z平面地面の高さ
    Ground Object地形として使うMeshオブジェクト

    地形オブジェクトを使う場合は、根の位置計算時に下向きRaycastで地表高さを取得します。


    Live GN Controlsの使い方

    Live GN Controlsは、Geometry Nodesで表示中の樹木に対して、即時反映を目的とした設定を行うパネルです。

    Live Shape Overrides
    Bark Displacement
    Bark Pattern
    Part Bark Strength
    Live Bark Material
    Live Output Quality
    GN Model Management

    Live Shape Overrides

    Designer Global Scale
    Trunk Radius Scale
    Branch Radius Scale
    Root Radius Scale
    Branch Droop Offset
    Root Depth Offset
    Root Flatten
    項目内容
    Designer Global Scale樹木全体のスケール
    Trunk Radius Scale幹の太さ倍率
    Branch Radius Scale枝の太さ倍率
    Root Radius Scale根の太さ倍率
    Branch Droop Offset枝の垂れを追加
    Root Depth Offset根の深さを追加
    Root Flatten根断面の扁平率

    ただし、これまでの検証では、Radius関連のLive Editが十分に動かないケースがありました。今後はCurve to MeshノードのScaleを操作パネル値に直結する修正を優先する方針です。


    推奨ワークフロー

    通常制作

    1. New Formula + Live GN Tree
    2. Tree Height / Base Radiusで幹を調整
    3. Branch Count / Branch Levelsで枝を調整
    4. Root Count / Root Lengthで根を調整
    5. Bark Strengthで樹皮の凹凸を調整
    6. Bark Colorで色を調整
    7. 必要に応じてApply as Mesh

    不具合確認時

    1. Bark GeometryをOFF
    2. BranchesとRootsをOFF
    3. Trunkだけを表示
    4. Base Radiusを大きく変更
    5. 幹の太さが変化するか確認

    この確認でBase Radiusが効かない場合、枝や根ではなく、幹のGeometry Nodes内のRadius接続に問題があります。


    よくある問題と対処

    Base Radiusを変えても幹が太くならない

    原因候補:

    ・旧GNグループが残っている
    ・Nパネル値が実際のノードへ接続されていない
    ・Curve to MeshのScaleが固定値のまま
    ・Set Curve Radius側を変更しているが、Curve to Mesh側のScaleが優先的に見えている

    対処:

    1. 旧版Add-onを削除
    2. Blenderを再起動
    3. Rebuild GN From Formula
    4. Geometry NodesでCurve to MeshのScaleを確認
    5. Scale値を手動変更して太さが変わるか確認

    根の太さがRoot Radiusで変わらない

    提示されたノードでは、RootのCurve to MeshノードのScaleが直径に効いている可能性があります。
    Root Radiusの操作値は、Root用Curve to MeshScaleへ直接接続する設計にするのが適切です。

    枝数が増えすぎる

    Branch LevelsChildren per BranchMaximum Branchesを下げてください。
    枝の太さ設定で枝数が変わる設計は望ましくありません。枝数と太さは分離するべきです。

    樹皮が団子状になる

    細い枝や根に対して、樹皮変位量が大きすぎる可能性があります。

    対処:

    Bark Strengthを下げる
    Ridge Strengthを下げる
    Detail Strengthを下げる
    Root / Branch Bark Ratioを下げる

    開発・検証上の重要メモ

    現在の優先修正方針は次です。

    v0.2.5をベースにする
    ↓
    操作パネルは維持する
    ↓
    RootのCurve to Mesh ScaleをRoot Radiusの目的変数にする
    ↓
    動作確認後、BranchとTrunkにも同じ方式を展開する

    この方針により、複雑なpoint.radiusSet Curve Radius、Modifier入力、専用Valueノードの重複を減らし、実際に直径へ効いている値を操作パネルで制御できます。


    【根拠】

    v0.2.5のソースでは、Python数式モデルによって幹・枝・根のパスを生成し、それをGeometry Nodes Designerへ渡す構成になっています。Add-onはBlender 5.1を対象として定義されています。

    また、Blender公式マニュアルでは、Geometry Nodes Modifierはノードグループでオブジェクト形状を定義するModifierであり、Set Curve Radiusはカーブ半径を制御してCurve to Meshなどのプロファイルサイズに使われるノードです。


    【注意点・例外】

    この取扱説明書は、現時点の開発・検証状況を反映したものです。
    Radius関連の制御については、まだ最終確定ではありません。

    特に以下は検証中です。

    ・Base RadiusをTrunk用Curve to Mesh Scaleへ直結する方式
    ・Root RadiusをRoot用Curve to Mesh Scaleへ直結する方式
    ・Branch RadiusをBranch用Curve to Mesh Scaleへ直結する方式
    ・Set Curve RadiusとCurve to Mesh Scaleの役割分担

    そのため、公開記事にする場合は、バージョン番号と検証状況を明記することを推奨します。



    参考文献・出典