7 月 25 2008
Lightwaveでシェーディング済みテクスチャを作成する
Lightwave 3D Layout でライティングし、そのシェーディング結果をテクスチャとして利用できるようにしてみます。
今回私は、レースゲームのシェーディング済みテクスチャを用意するためにこの方法を使います。ですので、精度よりも生産性を重視しています。キーワードは2つ。
- Ambient Occlusion(アンビエントオクルージョン)
- Surface Baking Camera(サーフェイスベイキングカメラ)
アンビエントオクルージョンで環境光を模倣
レースゲームのフィールドだから、「影」はくっきりとしたレイトレースのシャドウでも良いのだけれど、環境光を感じるようにするには、やっぱりやわらかい「陰」も必要でしょう。
環境光を再現する方法としてはラジオシティが正確ですが、とっても重い、と。そこでアンビエントオクルージョンを使います。ラジオシティは反射していく光を次々と追ってシミュレートするのに対し、アンビエントオクルージョンは周囲から光がどのくらい遮られるか、という陰係数をもとに計算するそうです。
まずはモデリングをして、UVマップを作成しておきます。
Lightwave v9ではサーフェイスはノード形式で制御できるようになっていて、アンビエントオクルージョンもノードを介して「サーフェイスに」設定してやります。レンダリングはレイトレースを使います。
標準でインストールされるアンビエントオクルージョン・ノードには Occlusion, Occlusion II の2つがありますが、どちらも精度がイマイチ。より細かく設定できるノードプラグイン SG_AmbOccNode を使いました。
サーフェイスのノード設定はこのようにしました。
モデルの大きさがどうなっても困らないよう、ライトはすべて Distant Light を使用します。場合によってはライトのプロパティで Ambient Intensity を高めに設定しちゃっていいかもしれません。
Render Globals のオプションで Ray Trace Shadows にチェックを入れ、レンダリングすると、環境光が再現されていることが分かります。
サーフェイスベイキングカメラでテクスチャ書き出し
ここからが本題ですね。レンダリングした状態のサーフェイスを、テクスチャとして保存します。
Lightwave v9 Layout では Surface Baking Camera というカメラが追加されていて、これは、メッシュとUVマップを指定すると、それに応じたUVテクスチャをレンダリングしてくれるというものです。書き出した画像をテクスチャとして設定すれば、簡単にシェーディング済みモデルの完成です。
やり方はとても簡単。
まずはModelerで、適用させたいポリゴンだけを選択してUVマップを作成し、それらのポリゴンを1つのレイヤーにまとめておきます。
Layoutに移ったら、カメラのプロパティから Surface Baking Camera を選択し、設定で Mesh に先ほどのオブジェクト、UV Map にさっきのUVを指定します。その他の項目を適当に設定し(出力画像のタテヨコ比に注意)、レンダリングすればUVマップ用の画像が取得できるはずです。
低解像度の場合は、UV Border の値を設定して、UVマップの輪郭よりレンダー画像が少しはみ出すようにしてやった方がいいかもしれませんね。詳しいチュートリアルは、公式のデモビデオで取り上げられています。
古いバージョンのLightwaveを使っている場合
アンビエントオクルージョンは、SG_AmbOcc プラグインが利用できます。
ベイキングは Surface Baker (LW_Baker) シェーダが利用できます。チュートリアルはこちら。
でも、どちらも使ったことなくて詳しいことは分かりませんッ。
ゲームで使ってみました
さて、レンダリング済みモデルをCOLLADAに変換し、前回作ったゲームサンプルに読み込ませてみました。
まあ相当荒削りなサンプルですが、少しは空間内の建物として見えてきたでしょうか。
デモをプレイする (要:Flash Player 9.0.115.0以降)



