PipeTree 目次

2002.02.28

Abies PipeTree 2002/02 改造メモ

久保拓弥 (kubo@ees.hokudai.ac.jp)

Abies PipeTree 2002/02
(拡大図)

Abies PipeTree の最初の版は昨年 9 月に完成した (参照: 樹木モデリング会議で使った 解説). これ (以下 2001/09 版) には以下に述べるような難点があったので, ここ一月ほどを費して改修を試みた (これを 2002/02 版とする). これはその作業のメモである.

2001/09 版で特によろしくなかったのは以下の三点だった.

これらの問題はたがいに連関しており (ここには挙げなかった他の問題とも), 個別に独立に解決できない. ここではこの一月の試行錯誤の中で 多少は「改善」につながったと考えられる以下の項目を列挙し, 簡単な解説を加える.

針葉モデルを三角形に

2001/09 版では平行四辺形型の針葉ソリッドモデルを採用していた. これは側軸を完全に被覆してしまう場合がある (下図参照).

Needle Solid Model
針葉ソリッドモデルの形状

被覆された側軸は光不足で死ぬので 枝わかれが進まない. そこでソリッドモデルの形状を三角形に変更して, 小さな側軸であってもいきなり強く被陰されることはない.

また, これまで針葉ソリッドモデルの面積が 針葉の土台となっている PipeBundle の断面積に比例するとしていた. これでは下図のように VERTICAL な軸の被陰効果が強くなりすぎるので, 2002/02 版ではソリッドモデルの「高さ」を固定した. ただしこれでは逆に頂芽優先を実現できなくなってしまうようなので, 軸の仰角に依存した資源配分得点計算を導入した (仰角が大きいほど多くの資源を得られる).

Original wing at age 20
(三角形面積 ∝ 軸面積)
Fixed width wing at age 20
(「高さ」一定 + 仰角依存資源配分)

「芽」の導入

2001/09 版では枝の末端形成のときに以下の制約のもとで 作りうる主軸・側軸の組合せを TerminalAdjuster に探索させた.

  1. 軸の長さ→軸の太さ
  2. 主軸の長さ→側軸の長さ
  3. 主軸の長さ→側軸の本数

これらの制約のもとでは 「ある資源量 Xg を受けとったときにどういうサイズの主軸・側軸を それぞれ何本作るか」 という問題に解答できない場合が多々ある. これは軸の形状を決定するルール (上記 1. と 2.) と 「長さ 4cm において側軸の分枝数は 0→2本と変化する」 という 3. の分枝数ルールの間の整合性がよく考えられていないためである.

たとえば, TerminalAdjuster の試行錯誤の過程において, 主軸の長さを 3.99cm とすると資源が Xg よりずいぶんと小さくなるし (資源余りすぎ), かと言って 4.00cm を超えるといきなり小さくないサイズの側軸を 2 本つけることになってしまい, 今度は合計重量が Xg よりずっと大きくなる (資源不足), ということになり解を決定できない.

そこでこの問題を解決するために分枝のルールを変更する. ルール 1. と 3. はそのまま残す. ただし 3. に関しては「新しく生成される主軸の長さ」に依存するのではなく, 当年生軸の親となる軸 (すなわち一年生) の長さに応じて分枝数が決まるものとする. さらに親の軸がいきなり新しい軸を作るのではなく, いったん分枝数に等しい個数の「芽」を形成することにする. この「芽」がおのおの資源をうけとりルール 1. にしたがって 新しい軸を生成する.

ルール 2. はまったく廃止して, かわりに「芽」の資源請求力に主軸・側軸の格差を与えた. その関数型の具体例としては たとえば下図のように明るいほど主軸に傾斜するようなものである. 側軸群に分配された得点はすべての側軸に平等に分配される. すべての末端において「芽」が形成された得点が与えられたのちに, 仮想的にプールされている「成長用資源」が「芽」に分配され, それにあわせて「芽」は新しい軸を形成する.

Abies PipeTree 2002/02
主軸・側軸の資源とり得点配分

分枝する長さを次数で変える

2001/09 版では「分枝する長さ」は以下のように決められていた.

このとき LATERAL ではどの枝次数の軸であっても, つねに一定の長さに到達するまで分枝できないので, 樹冠が疎になりがちである (下図左). そこで左図右のように枝次数によって分枝する長さを変更すると 側軸の本数が増える. このような「フラクタル」的な枝のほうが 効率良く空間を充填しているといえるだろう.


二次枝は 4cm で分枝

二次枝は 3cm で分枝

「死んだパイプ」で全 PipeBudle 一定速度肥大

2001/09 版において PipeBundle の直径成長は 「生きてるパイプの断面積」を増やすことによってのみもたらされた. 「死んだパイプの断面積」の増大は「生きてるパイプの断面積」の減少と 相殺されるので PipeBundle の直径には貢献しない.

2002/02 版では新たに死んだパイプの断面積増大によって PipeBundle の直径を増やすとするサブモデルを追加した. これは,生きているパイプが一定速度で新しいものに交換される, という現象を考えている. すなわち Xcm2 の新しいパイプが形成されると同時に, Xcm2 のパイプが廃棄されて死んだパイプの断面積が増加する.

PipeTree においては 死んだパイプの断面積はパイプモデル (da Vinchi 則) の制約からまぬがれているので, 生きたパイプの断面積を変化させないのであれば このような直径成長は許容される. しかしこの「交換」には当然ながら 新規生成 (されたことになっている) パイプの重量に等しい量の資源が費される.

Pipe Bundle
PipeBundle

PipeBundle で使う資源の一部を局在化

2001/09 版では 非同化部 (PipeTree では PipeBundle) の維持呼吸に必要な資源は, すべての針葉群で得られた資源を仮想的に一度集めたプールから 調達されていた. 2002/02 版ではこれを改め, ある PipeBundle の維持呼吸ならびに上述の「一定速度成長」に 必要な資源は, その位置より末端側にある針葉群だけで維持されねばならない, としている. これによって「稼ぎの悪い枝」を枝ごと殺すことができる.

Resource Availability
赤い部分に必要な資源は青く示した範囲で
得られた資源の中からしか調達できない

維持呼吸・一定速度成長 (生きているパイプの一定速度回転) に必要とされる資源を差し引いた剰余は 2001/09 版と同じく仮想的にプールされ, 新しい軸を形成するために「芽」に再配分される.

確率論的「枝折れ」モデル

2001/09 版では PipeBundle の死亡は, そこから出ている子供の PipeBundle が死亡したときにのみ生じるとしていた (新しくできた PipeBundle は針葉群が枯死した場合に死亡).

2002/02 版ではそれに加えて「枝」というような単位が 確率論的に死亡するサブモデルも追加した. この事象生起速度は「環境のよくない」ところの枝ほどよく落ちる, というように決めようとしている. しかしながらこの速度が何に依存してどういう関数型になるか ―― は現在のところ試行錯誤中である.

branch breakage
枝おれ

今後の改善

以上のような改善を行い, それによって 2001/09 版に含まれていた サブモデルのいくつかは廃棄された. 上述の単純な新サブモデルのほうがその機能を よりよく代替しているからである.

2002/02 版は 2001/09 版より PipeBundle や針葉群をより多く作りだし 「よりすかすかではない樹冠」を生成する方向で改善されてきた. そのことによって, 各針葉群での開空度計算に要する時間もまた増大しつつある. そこで, これ以上の PipeTree 改良を行う前に, 開空度計算に必要な時間を短縮する方法が必要となってきている.


PipeTree 目次に戻る
MPEG (2.1MB)