樹木の成長
Growing Trees (brashandplucky.com)
要約
この記事では、光を巡る芽の競争と成長リソースの分配に基づいて樹木の成長をシミュレートするプロシージャルな手法について解説しています。このモデルは、各季節の光条件を評価し、それを基に成長リソースを分配することで、現実的な樹木の形状や枝分かれを生成します。さらに、枝の脱落や幹の太さの計算、葉の表現についても触れられています。
全文翻訳
樹木の成長
[画像: 手続き的に成長したシナノキと葉]
手続き的に成長したシナノキ。枝分かれ構造は、以下で説明するシミュレーションに基づいています。
最近、プロシージャルな樹木の成長について試しています。私が使用している手法は、Palubickiらによる画像合成のための自己組織化樹木モデル(SIGGRAPH 2009)に基づいています。
そのアイデアは驚くほどシンプルです。芽が光を求めて競い合い、樹木はそれらに成長リソースを分配し、成功した芽は新しいシュートを生成します。これらのシュートは、次のラウンドで利用可能な光を変えます。クラウン(樹冠)の形状は、このフィードバックループから生まれます。
ここでは、私の実装からのいくつかの視覚化を交えて、簡単な内訳を示します。
一度に一つの季節
基本的な構成要素はメタマーです。これは、節間(短い茎の部分)、葉、そしてその上の節にある芽からなります。頂芽は軸を継続させ、腋芽は側枝を開始させることがあります。
各イテレーションは一つの成長シーズンを表します。
- 各芽が利用できる光を測定します。
- その光を先端から根まで合計します。
- 比例した成長リソースを樹木を伝って上に分配します。
- 十分なリソースを受け取った芽からシュートを成長させます。
- 光の当たらない枝を落とし、休眠中の芽を熟成させます。
[動画]
同じ種がシーズン2から30まで成長する様子。カメラとスケールは固定されています。
光はどこにあるか?
光の利用可能性を近似する一つの方法は、ボクセルグリッドです。各芽は、その下の広がるピラミッド状のボクセルに影を追加し、その寄与は深さとともに減衰します。すべての芽からの寄与が加算されるため、樹木が成長するにつれて内部は自然に暗くなります。
各芽は、このグリッドから2つの情報を読み取ります。利用可能な光の値(Q)と、知覚コーン内の最も影の少ない隣接ボクセルへの方向(\mathbf{V})です。
[画像: 樹木の影グリッドの垂直スライス] [画像: 利用可能な光で色付けされた樹木の芽]
左: 影グリッドの垂直スライス。右: 芽ごとの光量。シアンの芽はよく光が当たっています。オレンジ色の芽は影になっています。
この論文ではスペースコロニゼーションも支持しています。エンベロープをマーカーポイントで満たし、芽が近くのマーカーを求めて競い、成長がそのスペースを占めるにつれてマーカーを削除します。同じ成長メカニズムで、成長が可能な場所を決定する別の方法です。
誰が成長するのか?
光の値は、まず枝分かれ構造を伝って合計されます。基部では、合計(Q_base)が成長リソース(v=\alpha Q_base)となります。このリソースは、各分岐点で分割されながら上に戻ります。
[画像: 樹木の先端から基部まで合計された光] [画像: 芽に向かって分配される成長リソース]
左: 下向きに流れる累積光。右: 上向きに流れるリソース。オレンジ色の点は、成長するのに十分なリソースを受け取った芽を示しています。
拡張されたBorchert-Hondaモデルでは、主軸は次のように受け取ります。
\[v_m=v\frac{\lambda Q_m}{\lambda Q_m+(1-\lambda)Q_l}\]
側枝は残りのリソースを受け取ります。(\lambda=0.5)では、リソースは光に従います。値が大きいほど主軸を優先し、小さい値ほど側枝を優先します。
このわずかなバイアスが驚くほど大きな効果をもたらします。
[画像: ラムダ0.46で成長した広葉樹冠] [画像: ラムダ0.56で成長した狭葉樹冠]
左: (\lambda=0.46)、広がる樹冠。右: (\lambda=0.56)、優勢なリーダー。
1単位未満のリソースしか受け取らない芽は休眠状態のままです。それ以外の場合は、設定された上限に従って(\lfloor v\rfloor)個のメタマーからなるシュートを生成します。新しいメタマーはそれ自身の芽を受け取り、プロセスは繰り返されます。魔法のようです!
どちらの方向へ?
新しい各セグメントは、その前の方向、光を求める方向(\mathbf{V})、上向きまたは下向きの屈性、そしていくらかのノイズの正規化された加重和に従います。水平成分は、側枝を平坦な段に広げさせることができます。
茎の周りの芽の配置(葉序)は、もう一つの重要な制御を提供します。螺旋状の配置、対生、年輪状の配置は、非常に異なる枝分かれパターンを生み出します。フレームはシュートに沿って平行移動されるため、曲がりながらも配置は一貫性を保ちます。
[画像: 茎の周りの6つの芽の配置]
茎の軸を下から見た6つの葉序パターン。数字は連続する節を示します。
枝の脱落と太さの追加
影モデルでは、側枝はそのサブツリーが集めた光をメタマー数で割った値がしきい値を下回ったときに脱落します。若い枝には猶予期間があります。そうでなければ、内側のクラウンは飢えた小枝を蓄積し続けるでしょう。
[画像: 枝の脱落を無効にした密な枝分かれ構造] [画像: 枝の脱落を有効にしたより開けた枝分かれ構造]
同じ種、脱落なし(左)と脱落あり(右)。自己剪定は、その後の成長に利用可能な光も変化させます。
枝の太さは、パイプモデルを使用して後で計算されます。
\[r_parent^{n}=\sum_i r_i^{n}\]
先端で固定された半径から始めて、根に向かって累積します。(n=2)の場合、分岐点での断面積が保存されます。指数が大きいほど、より細い幹になります。脱落した枝もその下の太さに寄与し続けます。枝を失っても幹が縮むことはありません。
幅と受動的なたるみは、成長した骨格から計算され、成長にフィードバックされることはありません。
枝から葉へ
骨格は、チューブをその軸に沿ってスイープすることによって樹皮メッシュになります。葉については、小枝スプレーカードを使用します。各カードは、手続き的に描画されたアトラスのバリアントを使用した、いくつかの葉を持つ小さな小枝を描画します。
[画像: 4つの葉付き小枝スプレーを含むプロシージャルアトラス] [画像: ワイヤーフレームで表示された葉付きカードジオメトリ]
小枝アトラスとそれを運ぶカード。各カードは葉の塊全体を置き換えます。
カードの法線をクラウンの周りの楕円に向かってブレンドすることで、葉がボリュームとして影を落とすのを助けます。低い詳細レベルでは、より少なく、より大きなカードを保持し、樹皮を単純化します。遠距離では、ベイクされた方向性インポスターが引き継ぎます。
ボーナス: 成長した樹木は、森林レンダリング用の深度フィールドビューにベイクすることもできます。下の画像は、サイズが異なる1つのベイクされたシナノキの多くのインスタンスを使用しています。森林表現とライティングについては、別の投稿で説明する価値があります。
[画像: ベイクされたシナノキのインスタンスからレンダリングされた森]
1つの成長した樹木を、ベイクされた深度フィールドビューを使用したインスタンスとして森に配置。