[Away3D] Away3D 2.3 Feature – NormalMapGenerator

2009.02.27

normalMap Test(要:FlashPlayer9)

Away3D 2.1で、すでにサポート済みの normalMap(放線マップ)と関連して、今回新たに実装されたのが「NormalMapGenerator」。3Dアプリなどであらかじめ作成しておいたnormalMapを適用するのが通常なところを、Away3DでnormalMap自体を作ってしまおうというもの。

とにかくやってみたのが、上のデモ。中学校の技術の授業で作った「ミートハンマー」(笑)
ハンマーの細かいデコボコがnormalMapによるもので、実際のメッシュは真っ平ら。ほんとはローポリとはいえ、ある程度のディテール持たせとくのがセオリーだと思うんで、このサンプルはかなりよろしくないですな;背景でビミョーなファインアート化してるのが、Away3Dによって動的に生成されたnormalMap。

手順はだいたい下記のような感じ。

  • normalMap生成用のハイポリモデルと表示用のローポリモデルを作成(それぞれUV指定しておく)
  • ハイポリモデルをNormalMapGeneratorに渡してビットマップ生成(これがnormalMap)
  • 作成されたnormalMapで、Dot3BitmapMaterial作成
  • ローポリモデルにDot3BitmapMaterialを適用

ちょっとハマったのが、Object3DLoaderで読み込んだメッシュのマテリアルを書き換えるところ。Collada.loadで autoLoadTextures を無効化するのと、loader.handleから該当メッシュのみ取り出す必要があるってのがややこしかった。

var loader:Object3DLoader = Collada.load('hoge.dae', {autoLoadTextures:false});

var mesh:Mesh = Mesh((loader.handle as ObjectContainer3D).getChildByName('fuga'));
mesh.material = dot3BitmapMaterial;

※Flash10 branchには、Dot3BitmapMaterialのPixelBender版がある。パフォーマンスにどの程度違いがあるか気になるところ。

なんつーか、単純にローポリモデルのディテール補完したいだけなら、あらかじめ作っておいたほうが楽だなぁ。どっちにしても一度ハイポリモデル作らなくちゃならないってのが、normalMapの難儀なとこ。せっかく動的生成できるなら、もっと変な使い方したい感じ…ちょっと思いつかないけど。
個人的にはこういうハイエンドっぽい方向性より、シンプルなマテリアルのプリミティブで気持ちいい動きとか作るほうが好きだ。

関連する投稿

Trackback URL : http://blog.r3c7.net/wp-trackback.php?p=276

コメントをどうぞ

Powered by WP Hashcash