MMEでのノーマルマップ

MMEを利用した材質の拡張の一種です。
ノーマルマップ(法線マップ)というのは法線の向きを画像マップに従って指定することで、材質表面に奥行きがあるかのように印影を描画する、凹凸感を出すとかそういうものだそうです。やってみるとわかるんですが、光源に対する反応とかが単純なテクスチャとは違います。

  • ノーマルマップ自体は出ないですが、シェーダについて色々参考になるのでギブソンさんの講座はひととおり見るといいです

使用するMMEファイル

Furiaさんの配布ページ
http://flammpfeil.appspot.com/trinketbox/
にある

  • advancedTextureMapping2.zip

及び

  • ToonMaster0.3.8+2.zip

を使います。
ToonMasterの方は狭車ひろむさんのToonMasterを視差マップ対応したもので、理由があって私が頼んで作っていただいたものです。

GIMPでノーマルマップを作成

適当なグレースケール画像を作成。黒が低くて白が高い。
http://gyazo.com/91dd7ecf286457757a99a6b85140bb5c.png
ノーマルマッププラグインを使います。解説はこちらが詳しい。
GIMP の Normalmap プラグインを試す - WebOS Goodies


■ノーマルマッププラグインのダウンロード場所
http://registry.gimp.org/node/69


プラグインの動作

http://gyazo.com/635c613f542378766a7e461180f25bf4.png
ノーマルマッププラグイン。左が"3D Preview"。
いじっているのは

  • Fillter

…画像からの変換方式。プレビューを見ながらこれを変更してしっくりくるのを選ぶ。

  • Scale

…彫りの深さ

  • 3D PreviweのObject type

…Teapotがわかりやすい。また左の電球を選択すると光源を動かせる。


プレビューで確認したら、"Inver X", "Inver Y"にチェックを入れます。
プレビューだと彫りが逆転しますが、MMDでは軸が逆になるのこうします。OpenGLDirectXの違いとかですかね?
http://gyazo.com/5639cfc95bebe59bccf63f74e0bd3a97.png


ノーマルマップの仕上がり
http://gyazo.com/9e3f2446310bf3e5151333da303ca57e.png

ザックリと効果解説

デフォルトのグレーの箱と玉です。スペキュラー反射あり。
http://gyazo.com/b522df59a6907df5ec79bd6083110f74.png


ノーマルマップ適用。法線が変化しているのでスペキュラとシェードが載ってますね。
http://gyazo.com/22558b5eb02dfd03faf7d44a7acedc46.png


スペキュラ反射がないと、トゥーンシェードの2段階階調ということもあり起伏にとぼしいです。スペキュラありでも、陰になっている部分はそうですね。
http://gyazo.com/f371071d93df9b3a1ea91e674db84b6a.png



MMD標準のmetal.sphを適用したもの。
http://gyazo.com/46a4acf83ee66d120e518381f8e14bba.png
環境マップも影響を受けるので、これを併用するとかなり起伏が出ます。


また、full+NormMap.fxではデフォルトはテクスチャフィルターがオフになっているため、表面テクスチャを使う場合は下記のように書き換えるとテクスチャ処理がキレイになります。(その分処理は重くなります)

//テクスチャフィルタ一括設定////////////////////////////////////////////////////////////////////
//異方向性フィルタ(なめらか表示&遠くても綺麗 ※TEXFILTER_MAXANISOTROPYも設定しましょう)
#define TEXFILTER_SETTING ANISOTROPIC
//バイリニア(なめらか表示:標準)
//#define TEXFILTER_SETTING LINEAR
//ニアレストネイバー(くっきり表示:テクスチャのドットが綺麗に出る)
//#define TEXFILTER_SETTING POINT


//異方向性フィルタを使うときの倍率
//1:Off or 2の倍数で指定(大きいほどなめらか効果・負荷大)
//対応しているかどうかは、ハードウェア次第(RadeonHD機種なら16までは対応しているはず
#define TEXFILTER_MAXANISOTROPY 16

視差マップの作り方

GIMPだと、advancedTextureMappin2の視差マップ用のマップ画像はある問題があってうまく作れないことがあるので、ToonMaster0.3+2.fxを使います。
視差マップとは、ノーマルマップにさらに高さ情報を加えてより奥行きのある陰影表現を可能にしたものです。
この場合は、最初に作ったグレースケールをハイトマップにするだけでオーケー。
ハイトマップについては、最初に作ったグレースケールの白黒を逆転すればオーケー。白いところが低くて黒いところが高くなります。ん、というか最初からそういうふうに作ればノーマルマップも逆転しなくてすんだような…。

上が視差マップ、下がノーマルマップ。動くとより違いが出る。
http://gyazo.com/4bf5c28e9aa750b152b1ecb780131011.png

ToonMasterの視差マップも、このあたりのint Miplevelsを16とかにすると精度は上がります。テクスチャフィルタ設定も各所にあるような?

//視差マップ用テクスチャ/////////////////////////////////////////////////////////
//視差マップの凹み具合
#define HeightFactor 0.008f


texture NormalTex1 <
string ResourceName = "Parallax0.png";
int Miplevels = 16;
>;
sampler NormalTexSampler1 = sampler_state {
texture = ;
MINFILTER = ANISOTROPIC;
MAGFILTER = ANISOTROPIC;
MIPFILTER = LINEAR;
AddressU = WRAP;
AddressV = WRAP;
MAXANISOTROPY = 16;
};


texture HeightTex1 <
string ResourceName = "HeightMap1.png";
int Miplevels = 16;
>;
sampler HeightTexSampler1 = sampler_state {
texture = ;
MINFILTER = ANISOTROPIC;
MAGFILTER = ANISOTROPIC;
MIPFILTER = LINEAR;
AddressU = WRAP;
AddressV = WRAP;
MAXANISOTROPY = 16;
};


また、陰の処理がtoon.bmpの2階調なのが不満だったので、パラメータをいじることでシェードをグラデーション上などの処理ができるようになっています。このためにToonMasterとの統合をお願いしました。まだ実験中ですが…。
http://gyazo.com/0532c07121c06af38dd8d58541b0e447.png

// パラメータ
#define SensitiveShadow false // カメラ追従影強度制御フラグ


#define ToonFactor 1.5f // トゥーンの境界処理(大きいほどシャープ)
#define ToonThreshold1 0.01f // 影閾値
#define ToonThreshold2 0.5f // ハイライト閾値
#define ToonThreshold3 0.20f // 影閾値(カメラ追従光源)
#define ToonThreshold4 0.90f // ハイライト閾値(カメラ追従光源)


#define CameraFactor1 0.80f // カメラ係数(影)


#define Color1 1.2f // 影色調整
#define Color2 1.50f // ハイライト色調整

元になるマップがなくてもこういう一枚画像からでもFiltter等を試してみればかなりそれっぽいものが作れます。
http://gyazo.com/f1bd7207f17532d31911b61974034d41.png


視差マップを作るなら、ハイトマップはものにもよりますがグレースケールで階調反転とかしてトーンカーブコントラスト上げたりとか。
http://gyazo.com/a149b50c23ef908b7c869a73eacea9f7.png


あと、環境系のテクスチャではこのソフトを使うと自動でシームレステクスチャをハイトマップまで作成できたります。かなりオススメ。リアル系で情報量多いので多少の加工をすればオケー。
窓の杜 - 【REVIEW】約千種類もの素材を同梱したテクスチャー画像生成ソフト「Genetica Viewer」


作成上の注意点

GIMPプラグインについてですが、実は高低の向きでかなり混乱しました(というか記事中ですら混乱の一部が…)。
要点は、

  • 3D Previewとは陰影が逆になるので"Invert X", "Invert Y"にチェックを入れ、逆転して適用する
  • ハイトマップでは黒が高く、白が低くなる

ということです。
実際これ、逆になってても案外気づきませんw でもやっぱどこか変だったりはするんですが…。
まあ、うまいこと使ってみましょう。