はじめに
この記事は
の続きです。
前回の記事はColorMap、NormalMapを出力しましたがEmission Mapは使用していませんでした。
本記事では、EmissionMapを使ってみようと試行錯誤した記録と結果を書いていきます。
EmissionMapを得るためにPackedMapを出力
TextureSheetsノードの設定をし、PackedMapを出力します。
- Render Emission Layerにチェック
- Channel Pack Normal, Emission, Alphaにチェック
- Render Packed Mapで出力
すると、PackedMapが出力されます。
こちらは名前の通り、複数の情報(法線、エミッション、アルファ)が1つのテクスチャに書かれたもので、どのチャンネルに何の情報が書かれているかをChannel Packing タブから確認・変更できます
BlueのチャンネルにEmissionの情報が書かれていることがわかります。
RedとGreenにNormalの情報が書かれているんですが、X,Y成分のものしか書かれていません。
一見これでええんか?と思いますが何とZを復元できるらしいです・・!詳しくは次のシェーダーを作る過程でみていきたいと思います。
VFX Graphで使うShaderの実装
ここで得られたのはPackedMapなので、NormalMap、EmissionMapと分解されているわけではありません。
なので、自分でShaderを実装して利用することにします。
1. Shader Graphの作成
VFX Shader Graphを作成し、デフォルトで生成される出力用ノード(Visual Effect Masterノード)の設定を変更。Litにチェックをつけておきます。
これで、NormalやEmissionを設定できるインプットが出現しました。
2. flip bookの設定
とりあえず、NormalやEmissionは置いておいてメインのテクスチャをアニメーション可能にしていきます
FlipBookPlayerの現在のインデックスの値は「texIndex」というプロパティで取得できます。この値をShader Graphの入力として与えています。
3. Normal Mapの設定
次に、Normal Mapを復元し設定していきます。RとGがNormalの情報(X,Y成分)に相当することがわかっているので、これらの値を利用します。
で、Z成分の復元なんですがこれには「Normal Reconstruct Z」というノードがあるのでこれを利用することで復元できます。
復元式は以下。
Z成分は1.0が基準であり、xyベクトルの大きさが大きいとZ成分は小さく(凹凸が大きく)なり、小さいと大きく(凹凸が少なく)なるので、感覚的には納得です。
4. Emission Mapの設定
BチャンネルがEmissionの情報になっているので、これを利用します。 ネットワークは以下のようにしてみました。あってるのかは正直わからん。 間にカラーをブレンドして発光色を決められるのかな。
EmissionMapでは黒い部分ほど発光度が下がります。
結果はこんな感じ。