よくわからないノーマルマップ講座 実践編 その1

いよいよ実践編に入りたいと思います。
使用するソフトは
・Blender(バージョンは不問。今回は2.71)
・xNormal(これもバージョン不問)

今回はxNormalの使い方に重点を置きますが、自分が普段使っているやり方ではないのでご容赦を。

まずは今回使用するモデルについて少し説明しておきます。
画像


画像


画像


メッシュ自体は4つのオブジェクトで構成されていて、グリップにはMirror、すべてのパーツでEdge Splitを用いてシェーディングの処理と三角ポリゴン化とUV展開まで済ませてあって、Hard Surface ModelでポイントとなるMirrorとHard Edgeの2つが含まれています。

1.エクスポート

xNormalで扱うことの出来るファイル形式はいくつかありますがblendファイルは扱えないのでobjファイルに変換する必要があります。
変換する前にまずはすべてのオブジェクトを十分に離しておきましょう。今回使用するナイフのようなモデルならやらなくても実用上十分使用に耐え得るNormal Mapが出来ますがクオリティをあげる為に必要なので手間はかかりますがやっておきましょう。

画像


ただし銃のようなモデルの場合、アニメーションの際に動くパーツ(マガジンやボルト等)は必ず離しておかなければいけません。まぁモデルの種類にかかわらずすべてのオブジェクトを離しておけば間違いありません。
今回のノーマルマップ講座とは直接は関係ありませんがAmbient Occlusion MapをBakeする時は逆に アニメーションの際に動くパーツ以外は離してはいけません。離してしまうとテクスチャを描く時に手間が増えてしまうからです。なのでNormal Map用とAmbient Occlusion Map用の2種類のobjファイルを用意することになります。

話が横道に逸れました。

画像


まずはハイポリ用の出力設定です。これに関しては特に難しく考えることはありません。すべてのオブジェクトを選択した状態で画像の設定通りに出力すれば大丈夫です。

画像


次にローポリ用の出力設定です。まずはApply Modifierのチェックを外しています。本来ならチェックを入れた状態で出力すべきですがどうにも出力結果が安定しないので手動でApplyします。ただしMirror ModifierはApplyせずに削除します。
画像ではTriangulate Facesにチェックが入ってませんが、手動での三角ポリゴン化(ラスタライズ)が面倒臭ければここにチェック入れて出力しても構いません。

2.xNormalでの設定

xNormalを起動したら最初にPlugin Managerを起動してGraphics Driverを確認しましょう。確かインストール時のデフォルトだとDirect3D 9.0になっていたはずです。何故未だに9.0がデフォルトなのか謎ですがDirect3D 10.0に変更しましょう

画像


メッシュの読み込みは特に難しいことはありません。ただしMesh Scaleは10~20ぐらいに変えておきます。もちろんハイポリ・ローポリのMesh Scaleは揃える必要があります。

Baking Optionsでは色々と設定することがあります。出力先のディレクトリと出力するマップのサイズは任意で構いません。
Edge Paddingですが、これは人によって様々で0にする人もいればかなり多めに設定する人もいるのでなんとも言えないところですが、大体の目安としてマップサイズ1k(1024)毎に4位らしいです。つまり4kのサイズだと16ってことになります。
Rendererはデフォルトが一番安定しています。他のRendererだとレンダリングにかかる時間は比べ物にならない位短くて済むんですが、どうにも出来がイマイチだったりするのでデフォルト推奨です。
AntialisingはNormal Mapの場合は4、Ambient Occlusion Mapの場合は1にしています。というのもAmbient Occlusion Mapはレンダリングに時間がかかるのと、テクスチャを描く時に素材として使うので多少の粗があっても問題無いからです。
次にNormal Mapの詳細設定ですが、Swizzle Cordinatesは前回説明した座標系のことなので自由に決めてもらって構いません。Tangent Spaceにチェックが入っていればTangent-Space Normal Map、入っていなければObject-Space Normal Mapが生成されます。

画像


ここまでがxNormalでBakeする時の共通項です。xNormalでNormal MapをBakeするには3通りの方法があってそのうちの2つを今回は紹介します。

3.Bake

1つ目は上の設定を済ませたらあまり深く考えずに右下のGenerate Mapsのボタンを押すだけです。とりあえずBakeしてみてエラーが発生しているならMaximum frontal ray distanceとMaximum rear ray distanceの数値を調整するか、Toolsタブ内にあるRay distance calculatorを使えば大丈夫です。Ray distance calculatorはGo!ボタンを押した後数値が安定するまで待って(10~20秒ほど)Copy Reesultsボタンで計算結果を反映させるだけです。

画像

画像


2つ目はxNormalに組み込まれているCage Editorを使用する方法です。イメージとしてはローポリモデルから生成したCageでハイポリモデルの法線を捕らえる感じでしょうか。
とりあえず3D ViewerタブからViewerを起動してみましょう。

画像


Viewer内での操作方法は右下のほうに書いてありますのでそこを参照して下さい。
とりあえずローポリモデルは必要ないのでShow lowpoly meshesのチェックを外して非表示にします。それとLock light to cameraのチェックを入れると影で見難くなる事が無くなるので入れておいた方が無難です。
Show cageにチェックを入れるとEdit cageの項目が出てくるのでチェックを入れてCageの編集を始めます。必要ならCage colorを調整してCageを見やすい色にして下さい。
あとはCageを押し出してハイポリモデルをすっぽり覆うようにCageを編集するだけです。Cage global extrusionはすべての頂点の押し出し、Selection extrusionは選択した頂点のみの押し出しです。特に難しいことは無いですね。
Cageの編集が済んだら左上のSave meshesでSBM形式かOVB形式で保存します。保存したら自動的に読み込んだメッシュファイルが置き換わるのでそのままBakeすればOKです。

画像


2つの方法でBakeしたNormal Mapを比較してみましょう。

画像


手前が奥が1つ目の方法で、手前が2つ目の方法でBakeしたものなんですが、ぶっちゃけ今回のナイフのようなシンプルな形状だとそれほどそれほど差は出ません。ただしこれらの方法だと共通した問題が出てきます。それはEdge Splitを適用した部分に不自然な線が現れることです。

画像


この問題の原因を説明するのに2つ目のCageの方が分かりやすいのでこっちで説明します。
最初にこのモデルではシェーディングの処理にEdge Splitを用いていると話しましたが、Edge Splitを使うと文字通り辺が分離して重複頂点が出来ます。Cageを押し出す際には頂点法線の向きに従って頂点が移動するのでEdge Splitを適用した部分の辺は離れてCageに隙間が出来ます。そうするとこの隙間を通るハイポリの法線は当然の如くNormal Mapには反映されないのでその結果不自然な線が現れるわけです。

画像


結論としてはHard Edge部分にEdge Splitを使った場合は、どちらの方法もあの不自然な線が現れてしまうので別の方法でBakeしなければいけません。逆にEdge Splitを使っていない場合は、シンプルな形状なら1つ目の方法で、複雑な形状であれば2つ目の方法でBakeすれば良い訳です。
Edge Splitを使った場合に生じる不自然な線の原因は、Edge Splitを使った辺の周辺で法線を拾いきれないからですがこの問題を解決できる方法を次回に説明します。

そして最後にMirror Modifierを用いた場合のエクスポート方法ですが、Bake用のメッシュファイルとしてExportする際にはMirror Modifierを削除してExportしていましたが、実際にゲーム内等で使用するメッシュファイルとしてExportする場合は、Mirror ModifierをApplyした後に対称の中心軸上にある頂点をすべてSplitしてローポリモデルの設定でExportすればOKです。

画像


こうしないと画像のようにおかしなことになりますのでSplitを忘れない様にして下さい。

画像


ではかなりざっくりした説明でしたが今回はここまでとします。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 3

なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
ナイス

この記事へのコメント

この記事へのトラックバック