プロシージャル技術による植物の生成(1)~植物とフラクタル理論の関係

植物のプロシージャルに関する研究は意外に古く、1960年代後期より始まっている。

この研究分野で古くから分野で活用されて発展している技術が「L-SYSTEM」だ。

L-SYSTEMの"L"は考案者のAristid Lindenmayer氏の名前から取られたもので、植物の形状を記号言語の形で表現するというユニークなものだ。Aristid Lindenmayer氏は生物学者であり、自然界の多様な植物の形状が、自己相似性があることに気がつき、その成長メカニズムを記号の変換法則で表現しようという研究に生涯を捧げた人物だ。

このL-SYSTEMの具体的なメカニズムについて簡単な例を挙げて説明しよう。

基本的には文字列の置き換えを、ある適当に決めた法則で行っていくものであり、その工程は前出の再帰分割法や反復コピー法のフラクタル理論とよく似ている。

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となり、元の状態からはかなり変わったものになる。変換ルールはまさに生物における遺伝子といった風情だ。

さて、文字列のままでは見た目的に面白みがないし、「植物の成長の表現になっている」といわれてもイメージが湧かない。そこでこうした文字列のビジュアライゼーションを行って図形として見せることを考える。

この方法には様々なものがあるが、典型的な例として有名なのはタートルグラフィックスの仕組みだ。

ラジコンのような絵筆を文字列のコマンドで動かすというイメージがタートルグラフィックス。ちなみにこれは8ビットパソコン時代からある仕組みだ

これは仮想的な絵筆(タートル=亀)をラジコンのように「回れ」「曲がれ」「進め」「戻れ」といったコマンドを実行しながら軌跡を描いていく仕組みだ。「F」は描きながら前進、「+」は時計回りに回転、「-」は反時計回りに回転、「f」は描かずに前進などを表す。回転について回転角も与えられる。

こうしたタートルグラフィックスのコマンド文字列を、前出のような変換ルールで変換していけば複雑な軌跡が描けそうな気がするではないか。そういう着想だ。

なお、再帰分割法や反復コピー法のところで示したフラクタル図形も、このタートルグラフィックスで表現が可能だ。

2つの図形は、記載されている初期値と変換法則に従って文字列を置換し、その文字列結果に応じた描画を行った例。ただ、このままでは枝分かれが出来ないので一筆書きしか描けない

ただ、このままだと一筆書きしか描けないので、植物の特徴である「枝分かれ」の表現が出来る仕組みにする必要がある。そこで"["と"]"の一組の括弧で表される元の位置に戻れる仕組み(PUSH,POP)を取り入れている。[~]で囲まれた部分は小枝(≒子枝)となり、"]"の部分で小枝の描画が終わって、"["で分岐したところまで絵筆(タートル)を戻す……という意味合いになる。

Lが左に枝分かれして進む、Rが右に枝分かれして進む……というふうに拡張して描画させた例。コマンドはLR^4(LR)^∞とRL^4(RL)^∞の2つで同一スタート地点から実行

"[~]"で表す分岐(枝)の仕組みを表現する。この[~]の仕組みにより、幹に対して自在な小枝を生やすことが可能となる

図右の植物のように見えるものは全てL-SYSTEMによる文字変換規則を適用して生成したコマンドで描いたもの。[~]の中を描画し終わったら小枝の分岐点まで戻って同じルール適用に繰り返しだ

図は初期値Fで、置き換えルールは「F→FF-[-F+F+F]+[+F-F-F]」で、回転角を22°としたときの描画結果になる。文字変換の世代を多くすればするほど形状も複雑化して草木っぽい感じになる

このままだと結果が必ず同じになってしまう。つまり植物でいうならばクローンのようになってしまい個体差が現れない。動植物を表現する場合には規則性が露呈しては不自然だし、同一種としての相似性はあっても、多様性がほしい。

そこで、文字変換のアルゴリズムにさらに動的な要素として乱数要素を追加してやる。これがSTOCHASTIC L-SYSTEM(確率論的L-SYSTEM)だ。

枝分かれの確率を設定したり、あるいは枝分かれの仕方そのものを確率で切り換えたりすることでこの独自性を表現できる。

多様性を与えるために乱数要素を付加する

このSTOCHASTIC L-SYSTEMの概念を導入することで、1つの種から同じものができるのではなくて、1つの種から成長と共に個体差が出てくるということが表現できるようになるのだ。

ここまで示してきた図は2Dの平面のものなので、3Dグラフィックスとして利用するにはこれをさらに3Dへと次元を1つ増やす必要がある。

ラジコンの要領で進ませる絵筆の方向を平面から立体の三次元へ拡張し、さらには生成される枝の直径の概念も登場する。また、生成するのは枝だけではなく葉も必要になる。ちなみに、葉については葉の形状を同様なL-SYSTEMで記述して、これをポリゴン化して用いることが多いようだ。

描画軌跡の管理を3Dへと拡張する

具体的な例(下図)を1つ示すとしよう。

L-SYSTEMを三次元に拡張して立体的な植物モデルとする

この図のp1は3つの小枝に分岐することを表しており、葉っぱLが生え、新たな成長点Aが誕生する。Fは末端。「&」や「^」、「/」は絵筆を3D的にどの方向に制御するかの記号になる。「!」は枝の直径を減算する意味合いとなっていて、「'」は色に変化を与える演算子となっている。

全体としてみると3つの小枝に分かれ、各枝には葉、直径をすぼめた新たな成長点、さらに孫枝と葉を付ける……といった法則で成長を続けるモデルになっている。(続く)

(トライゼット西川善司)