2009.06.01
テクスチャマッピングができた!Sunflowの「UVマッピング」指定に大ハマり
少しずつ勉強しているSunflowで、ようやくテクスチャマッピングができた!



テクスチャマッピング
http://ja.wikipedia.org/wiki/%E3%83%86..

<テクスチャマッピング (Texture mapping) とは、3次元コンピュータグラフィックスで作成された3Dモデル表面に質感を与えるための手法。テクスチャ (texture) とは元来、織物の質感を意味する>。

Sunflowの場合、貼り付ける画像の指定は、シェーダ(shader)の定義時に画像ファイルを指定するだけなのでカンタンなのだが、貼り付けたい立体を自分で作った場合(「generic-mesh」typeのオブジェクト)、その立体の各面について「方向」を定義しなければならない。

これが3D初心者の私には難しく、おまけにSunflowはあまりドキュメントが充実していないのもあって、相当苦労した。いろいろ調べまくって、以下のページにいいコード例を見つけた。

Texture Mapping in Structure Synth / SunFlow
http://www.flickr.com/photos/syntopia/3501664249/

これこそ私のやりたいこととほぼ同じだ!と喜んだのだが、「uvs facevarying」のところに書いてある、「1 1 0 1 0 0」といった数字の羅列の意味がわからない。Sunflowの関連ページでも、これの解説が見つからない。

これがどうやら「UVマッピング」という方式による指定だということはわかり、さらにいろいろ調べつつ、この「1 1 0 1 0 0」といった数字の列をどう解釈すれば辻褄が合うかというのをさまざまに試して、ようやく意味がわかった(注)。

まるで古代文字を解読したような感じで、わかってしまえば大したことないのだが、わかるまでは気が狂いそうなほど苦労して、それゆえに達成感も大きい。

テクスチャマッピングは、私が3Dでぜひやりたいことのひとつだったので、これが「できる」ようになった、という喜びがまず大きい。それに加えて、「UVマッピング」というものの理屈や、なぜそれが必要なのかといった動機も理解できるので、技術体系・手法などが「わかる」という喜びもある。

注)テクスチャを貼りたい立体の各面(立方体の場合、6つの正方形を2つずつに割った計12個の三角形)のそれぞれについて、テクスチャ画像の2次元平面(これを元の3次元空間と区別するために「uv座標」と呼ぶようだ)ではそれがどこに対応するかを指定。立方体の場合は三角形12個なので、三角形1つについてuv平面での2次元座標が3点必要になり、これが12個分必要。ちなみに、Sunflowではなぜか立方体が組み込みで入っていないので、自前で作る必要がある。


関連エントリ:
「光」がこんなに面白いものだったとは
http://mojix.org/2009/05/26/sunflow_light
「現実は光でできている」 グローバル・イルミネーションの威力
http://mojix.org/2009/05/24/reality_light
タグ: