2014年08月21日

ノーマルマップとは!part3 さらに深く知ろう!

Part2では簡単な作り方を書きましたが、今回はそれぞれの工程で陥りやすいところをあげていきたいと思います。もし試してみてうまくいかなかった場合、このなかに回答があるかもしれません。
後半はマップのクオリティを上げるための方法を紹介します。

モデルファイルの出力時の設定
今回はOBJモデルを使用して書き出しましたが、
OBJの「法線」の設定によってはノーマルマップがうまく焼けないことがあります。
オブジェクトの種類によって書き出す法線の設定を試行錯誤する必要があると思います。
経験上比較的どんなものでもまずまずきれいにでるのがソフトエッジ
ロボや機械などの面の精度を特に出したいものにはハードエッジかと。
ハードエッジへの焼きこみはUVの段階から工夫が必要な上、後のテクスチャ作業がやりにくい場合もあるので
注意が必要です。
ちなみにxNormal上で無理やり法線の設定を上書いて出すこともできます。
export.jpg
しかし、これを使い法線を変更したモデルでベイクしてしまうと、元のモデルに貼り付けた時に結果がよろしくないことになります。おすすめしません。Use exported normalsにしてください。
・OBJモデル書き出しポリゴン数の限界
ZbrushからObjモデルを書き出す場合、現状32bit環境では出力ポリゴン数に限界があります。
それぞれのマシンの性能にもよるとはおもいますので、事前にどれ位が限界は簡単なモデルでテストすることをおすすめします。
一生懸命になって作って完成!出力!書き出せない!ということになればまた面倒な工程が増えてしまいます。

形状の限界
ノーマルマップはハイ、ローの形状の差を画像に変換しています。
その際に表現できる形状に限界があります。
元の形状に対して極端に凹、凸があるような形状は良い結果になりません。
その際には元のローポリの形状をハイモデルに近づけるような努力をする必要があります。
また、ノーマルマップはポリゴンモデルを変化させているわけでなく、
擬似的?に見た目を変えているため、アウトラインに影響がでません。
そのため、正面からみたときにはガチャガチャしてるのに、
シルエットになったらやたら粗く見えることがあります。
その際にも、ローポリの方のシルエットが複雑に見えるように工夫する必要があります。
outline.jpg

UVレイアウト
ノーマルマップを焼く際にはローポリのUVをみてその形通りに焼かれていきます。
この際にUVが重なっていたりするとよろしくない結果になります。
テクスチャ面積を有効につかうために左右対称モデルでUVを左右で同じにし、
同じ位置に重ねてレイアウトされていたりすると思います。
それが原因でうまくいかないことが多々有ります。
その際にはUV空間上でUなりVなりに-1でも移動させておけば問題なくなります。
しかし、たまに重なっていてもうまくいくことも…^^

軸向き
・ノーマルマップはデコボコをRGBに変換してそれを画像にしています。
さらに詳しくいうとRGBそれぞれがXYZの軸のどれかに対応しています。
「どれか」といったのにはわけがあります。
実はツールよってその対応する軸と色に差があることがあります。
なのでpart2でやった設定でそのまま見た目問題なく、
ご自身の使用しているツールで見れた人はラッキーかもしれません。
もし、デコがボコにみえる、光があたっている方向が変!という方は、
xNormalにも設定がありますので設定しなおしてください。
axis.jpg

ここからは精度の高いノーマルマップを書き出すxNormalの機能を紹介します。
・レイの距離を設定する。
難しくなりそうなのでやることを簡単に言いますと、
ローポリとハイポリの形状の差を明確にして正確な差を出す。かなぁ...
ちなみに設定はここにあります。
dist.jpg
ここの値をかえてあげると良い結果にもっていくことができます。
しかし、ただ闇雲にやっても意味が無いので計算するツールもついています。
ToolsタブのRay distance calculatorです。

cal.jpg
ボタンを押すとシンプルな別ウィンドウがでてきます。ボタンは3つ、Close GO! copy results
使いかたはまずGo!を押します。するとハイポリが読み込まれます。
そのあと5秒、10秒とほっとくとfMin、fMax....の値が変化していきます。
どうやら距離を調べてくれているみたいです。
10秒ほどで十分ですので値が変化したらStop!をおしてください。
そののちCopy resultsを押せばなんと!
先ほどのMaximum frontal ray distanceなどに値がコピーされます。
この状態で生成すると割りと結果がよくなります。
ただ必ずよくなるわけではなく、他に悪くする原因があるかもしれないので過信しすぎないでください。
試しにデフォルトの値と計算後の値を入れたもので比較してみるのも良いと思います。

・解像度をあげる。
もし使用するテクスチャサイズに制限が無いのであれば、
ノーマルマップは解像度を出来るだけあげることをおすすめします。
特にハードサーフェスのモデルの場合エッジがジャギることが多いです。
その際一段階解像度を上げるだけでびっくりするほど良くなったりします。
ちなみにxNormalは最大32k(32768*32768pix)まで出力できます。
だれが使うかわかりませんが…
とりあえず目安として1k、2Kぐらいで出してみてはいかがでしょうか。

・xNormalに固執しない
今回はxNormalの紹介ですが、あえてここでは別の方法を取ることもおすすめします。
いままで何回も何回もベイクしてきましたが、必ずxNormalがベストというわけではないです。
ほかのツールのほうがキレイにいくときもあります。しかも簡単に。
どう設定してもうまくいかない場合は、別のツールがあるということをどこかで覚えていてください。
ときにはフォトショップで手書きする時だってあるのですから!


とりあえず以上でひとつ終わりと致します。
実はもっと精度を上げる方法とかはあるのですが、
それはこのブログ等で、実例有りで要望があがった時などに紹介したいと思います。
今回はいわば入門編です!
是非他のツールなども試して楽しいノーマルマップライフをお送りください!
機会があればそのうち画像からノーマルマップに変換する方法なども紹介していけたらと。

自分の解説はゆるいので、より知識を正確に深めたい方におすすめのページを見つけてきました。
図が多くとてもわかり易いので余力あればどうぞ。
Normal mapping in Blender

お疲れ様でした!
posted by momo at 00:55| Comment(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: