どうも篠島です。今回はGameDev Texture Sheet について説明したいと思います。
GameDev Texture Sheetとは
GameDev Texture Sheet は基本的に特定のフレームレンジの連番画像をレンダリングし、内部COPネットワークによりスプライトシートを作成するものです。スプライトシートを作成する段階でRGBAチャンネルを色々と加工して出力しています。
デフォルトでは下の様な情報が書き出されます。なんで法線のZを犠牲にするのか?と思うかもしれませんがUnrealにDeriveNormalZというノードが有り、シェーダー内部で法線のXY情報を元にZを構築することが出来るらしいです。自分はゲームは詳しくないのですが、色々なテクニックで不要な情報をどんどん削っていく部分が非常に面白いですね。
- R:法線のX情報
- G: 法線のY情報
- Z:Emission情報
- A:アルファ情報
ちなみにUnrealのDeriveNormalZノードがしてる事は下の計算です。これが分かればUnityでもスクリプトで同じことが出来るのではないかと思います。でも破棄したZは完全に再現できないと思うのですが・・・、擬似的にそれっぽく再現しますよという感じなのでしょうか。勉強しながらブログを書いているので詳しくわかったら書きたいと思います(Houdiniとあまり関係ないですが・・・)。
Emission情報をテクスチャに入れることで、シェーダー側でリアルタイムにグローを調整でき、さらに炎の部分がどのくらいまで広がるかなどいろいろ設定ができます。素晴らしいですね・・・。
使い方
とりあえず重要な所だけ、
Settings
ここでレンダリングするフレームレンジを指定します。うまく正方形のテクスチャになるようにフレームレンジと、Images per Lineで1つのラインで何枚の画像を使うかを指定します。
Node to Render
レンダリングするオブジェクトを指定します。
Export Normal
法線用のスプライトシートを出力します。
Render RGB Lights(Normals)
RGBライトを使って法線のデータを作成します。
Blend N and RGB Lights
通常はボリュームのGradient情報を元に法線を計算しているのですが、レンダリング結果がかなりノイズが乗ってしまうために、RGBライトを使った法線をブレンドして両方のいいとこ取りをするパラメーターです。値が0でボリューム自体の法線情報、値が1だとRGBライトだけによる法線が出力されます。
Override Camera Resolution (Based on Atlas Settings Below)
Resolutionの部分に最終的なスプライトシートのテクスチャのサイズを指定できるのですが、このオプションをONにすると連番画像をレンダリングする時に必要以上にレンダリングサイズを増やすこと無く、タイルした時にうまく最終的な解像度とピッタリ合う様に連番画像のサイズを調整してくれます。
Render
そして左上のRenderボタンを押せば連番画像を吐き出した後に、スプライトシートを自動的に生成してくれます。テクスチャの保存先を指定する横にあるRenderボタンを押すことでそのテクスチャだけをレンダリングすることが出来ますが、真ん中にあるColor Map、Normal Mapはスプライトシートの画像を指定する部分なので、横にあるRenderボタンを押しても元になる連番画像がないとスプライトシートは作成されません。
いろいろ検証しててちょっと気になるところが合ったのですが、それはまた次回にでも・・・。