プロシージャル技術による植物の生成(1)~植物とフラクタル理論の関係
植物のプロシージャルに関する研究は意外に古く、1960年代後期より始まっている。
この研究分野で古くから分野で活用されて発展している技術が「L-SYSTEM」だ。
L-SYSTEMの"L"は考案者のAristid Lindenmayer氏の名前から取られたもので、植物の形状を記号言語の形で表現するというユニークなものだ。Aristid Lindenmayer氏は生物学者であり、自然界の多様な植物の形状が、自己相似性があることに気がつき、その成長メカニズムを記号の変換法則で表現しようという研究に生涯を捧げた人物だ。
このL-SYSTEMの具体的なメカニズムについて簡単な例を挙げて説明しよう。
基本的には文字列の置き換えを、ある適当に決めた法則で行っていくものであり、その工程は前出の再帰分割法や反復コピー法のフラクタル理論とよく似ている。
変換ルールとして
AをxBに変換する
BをyAに変換する
と取り決め、初期値ABに対してこのルールを反復的に行ってやる。変換一回目は、
AB→xByA
となる。このxByAに対して同じルールを適用すると、変換2回目では、
xByA→xyAyxB
となる。
こうすることで、もともと2文字だったものがわずか2回目の変換で6文字となり、しかもその文字列は複雑性を増す。これを植物、生物の成長と照らし合わせて考えていくのが、L-SYSTEMの基本的な考え方だ。
この法則をさらに複雑にしていってみよう。
この単純的な反復変換に、「文脈(コンテキスト)の理解」という動的な条件ルールを設定してみる。具体的には文字を置き換える際に、その置き換え対象の文字の左右の文字の関係性によって置き換える文字を変化させていくというルールだ。
例えば、
Aの右にyがあるときにBx
BはAに置き換える
Aの左にxがあるときにBy
(それ以外ではそのまま)
として初期値の文字xAを与えて変換していく場合を想定してみる。初期値xAは6回目の変換でxByxyとなり、元の状態からはかなり変わったものになる。変換ルールはまさに生物における遺伝子といった風情だ。
さて、文字列のままでは見た目的に面白みがないし、「植物の成長の表現になっている」といわれてもイメージが湧かない。そこでこうした文字列のビジュアライゼーションを行って図形として見せることを考える。
この方法には様々なものがあるが、典型的な例として有名なのはタートルグラフィックスの仕組みだ。
これは仮想的な絵筆(タートル=亀)をラジコンのように「回れ」「曲がれ」「進め」「戻れ」といったコマンドを実行しながら軌跡を描いていく仕組みだ。「F」は描きながら前進、「+」は時計回りに回転、「-」は反時計回りに回転、「f」は描かずに前進などを表す。回転について回転角も与えられる。
こうしたタートルグラフィックスのコマンド文字列を、前出のような変換ルールで変換していけば複雑な軌跡が描けそうな気がするではないか。そういう着想だ。
なお、再帰分割法や反復コピー法のところで示したフラクタル図形も、このタートルグラフィックスで表現が可能だ。
ただ、このままだと一筆書きしか描けないので、植物の特徴である「枝分かれ」の表現が出来る仕組みにする必要がある。そこで"["と"]"の一組の括弧で表される元の位置に戻れる仕組み(PUSH,POP)を取り入れている。[~]で囲まれた部分は小枝(≒子枝)となり、"]"の部分で小枝の描画が終わって、"["で分岐したところまで絵筆(タートル)を戻す……という意味合いになる。
Lが左に枝分かれして進む、Rが右に枝分かれして進む……というふうに拡張して描画させた例。コマンドはLR^4(LR)^∞とRL^4(RL)^∞の2つで同一スタート地点から実行 |
"[~]"で表す分岐(枝)の仕組みを表現する。この[~]の仕組みにより、幹に対して自在な小枝を生やすことが可能となる |
このままだと結果が必ず同じになってしまう。つまり植物でいうならばクローンのようになってしまい個体差が現れない。動植物を表現する場合には規則性が露呈しては不自然だし、同一種としての相似性はあっても、多様性がほしい。
そこで、文字変換のアルゴリズムにさらに動的な要素として乱数要素を追加してやる。これがSTOCHASTIC L-SYSTEM(確率論的L-SYSTEM)だ。
枝分かれの確率を設定したり、あるいは枝分かれの仕方そのものを確率で切り換えたりすることでこの独自性を表現できる。
このSTOCHASTIC L-SYSTEMの概念を導入することで、1つの種から同じものができるのではなくて、1つの種から成長と共に個体差が出てくるということが表現できるようになるのだ。
ここまで示してきた図は2Dの平面のものなので、3Dグラフィックスとして利用するにはこれをさらに3Dへと次元を1つ増やす必要がある。
ラジコンの要領で進ませる絵筆の方向を平面から立体の三次元へ拡張し、さらには生成される枝の直径の概念も登場する。また、生成するのは枝だけではなく葉も必要になる。ちなみに、葉については葉の形状を同様なL-SYSTEMで記述して、これをポリゴン化して用いることが多いようだ。
具体的な例(下図)を1つ示すとしよう。
この図のp1は3つの小枝に分岐することを表しており、葉っぱLが生え、新たな成長点Aが誕生する。Fは末端。「&」や「^」、「/」は絵筆を3D的にどの方向に制御するかの記号になる。「!」は枝の直径を減算する意味合いとなっていて、「'」は色に変化を与える演算子となっている。
全体としてみると3つの小枝に分かれ、各枝には葉、直径をすぼめた新たな成長点、さらに孫枝と葉を付ける……といった法則で成長を続けるモデルになっている。(続く)
(トライゼット西川善司)