種を蒔いて育てるプロシージャル・テクスチャ「Cellular Texture」

宮田氏がプロシージャル・テクスチャの例として最後に紹介したのは「Cellular Texture Generation」というメソッドだ。これは和訳するならば「細胞テクスチャ生成」ということになる。

「細胞テクスチャ生成」法の流れ

対象の3Dモデルの表面に"種"となるパーティクルを配置して、そのパーティクルの振る舞い(ルール)を定義しておく。

種パーティクルの振る舞いとは、具体的には、成長したり、死んだり、あるいは増殖したり、食い合ったり、合体したり……といったものになる。実行時は、それぞれの種パーティクルについてその周辺の種パーティクルの関係性に配慮した形で、そのルールを反復的に適用していく。

論文はカリフォルニア工科大学のKurt W. Fleischer氏とDavid H. Laidlaw氏らによって発表されており、カリフォルニア工科大学のサイトには論文がアップロードされている

宮田氏のスライドの上のフロー図のようなものが、その概念を説明している。

ちなみに、ここでいっているCellular Textureの「テクスチャ」は、いわゆる3Dグラフィックスでいうところの「テクスチャ」マップではなく、一般用語の「質感」という意味になっている。だから、この論文を発表したKurt W. Fleischerd氏やDavid H. Laidlaw氏の実装でも、生成した"質感"をジオメトリ化して、これをレイトレーシングでレンダリングしている。リアルタイム3Dグラフィックスで用いるためには、ハイトマップ化してディスプレースメントマッピングを行ったり、ボリュームテクスチャ化して局所的なレイトレーシングを行ったりして実装する必要がある。

講演では、宮田氏は、この技法による「鱗の生成」「棘の生成」「毛の生成」の例を紹介している。

鱗の生成では、まず対象3Dモデルの表皮に対し、種パーティクルを覆うように配置し、若干斜めになるようにこの種細胞を成長させる。3Dモデルの表皮から離れすぎたところで細胞の成長は止まるようにする。

「鱗」を細胞テクスチャ生成法で生成した例

棘の生成自体は種細胞を棘になるような成長モデルで成長させる点は、前出の鱗と同じだ。

なお、この例では、この種細胞の表面上での他者の種細胞との関係性に反応拡散を導入することで棘の生え方にバリエーションを与えられることを示している。左端は、成長した棘の回りには棘が育たないというような反応拡散の結果。中央は、育たなかった棘が密集している例。右端は棘の成長をカールするように仕込んだ例となる。

「棘」を細胞テクスチャ生成法で生成した例

この棘を顔モデルに生やした例

毛の生成は棘の生成の別バージョン的な位置づけのもので細胞の成長をより細く実行したものだ(下図)。図の左は隣接する毛と成長する方向を同じにする調整で生やした毛で、右の方は毛の方向をあえて隣接する毛とは違う方向へ成長させた例になっている。毛の元となる種細胞はこの例では2000個敷き詰めているとのこと。

「毛」を細胞テクスチャ生成法で生成した例。こちらは毛並みの揃っている

こちらは毛並みが不揃いとなっている

細胞テクスチャ生成法は、考え方と実行工程そのものが反応拡散系のプロシージャルと似ているが、種パーティクルを3Dオブジェクト状に配置して3Dで考えている点で、結果がある程度予測できる形となる。反応拡散をある程度手懐けたようなイメージだろうか。

また、テクスチャと3Dモデルを1対1に対応づけて考えられた技法なので、適用したテクスチャが引き伸ばされたりすぼめられたりといった歪みがなく映像としての品質が高い点も特長とされる。DCCツールのプラグインとして実装すれば、かなり便利に使えるかもしれない。