Maya65_Normalmap_report

      

        Maya6.5ノーマルマップ生成検証報告

                                              2005年6月28日


目次
  1.Mayaにおけるノーマルマップ生成について
  2.Maya6.5でノーマルマップを生成するには
  3.シーフのモデルを使った検証
  4.まとめ


1.Mayaにおけるノーマルマップ生成について

 Mayaにノーマルマップ生成機能が標準搭載されたのはバージョン6からで、Renderモジュールの
 Lighting/Shadingメニューにある Transfer Surface Information から実行できるようになっています。
 バージョン6でのノーマルマップ生成にはいろいろな問題があり、中でも以下の二つは深刻でした。

  ・OBJファイルを読み込むスピードがかなり遅い。
  ・100万を超えるハイポリゴンをシーンに読み込むと、動作が重くなって作業がままならない。
  ・ノーマルマップ生成には非常に時間がかかり、ひどい時は10時間を超える事もあった。

 今回、Mayaの最新バージョンである6.5ではそれらの問題点が解決されたとの事なので、実際に検証してみました。
 同時に、Mayaでクオリティの高いノーマルマップを生成する方法をも紹介します。

2.Maya6.5でノーマルマップを生成するには

 1.まず最初に、プラグインが正確に読み込まれているかどうかを確認します。
  Windowメニュー → Settings/Preferences → Plug-in Manager を開いて「TransferSurfaceInfo.mll」を探し、
  loadauto load にチェックが入っていることを確認します。

 2.シーンにローポリメッシュを読み込みます(Fileメニュー → Import)。
  ノーマルマップはこのメッシュのUVに対して生成されるので、UVは絶対に必要です
      

 3.シーンにハイポリメッシュを読み込みます(Fileメニュー → Import)。
  ノーマルマップ生成においては、このメッシュの形状情報だけが必要なので、UVは必要ありません
      
  なお、ハイポリメッシュは ZBrush のような外部ソフトで作成しても、Mayaのスカルプトツールで
  作成してもかまいません。ただし、元になるローポリから大きくかけ離れた形状にならないように
  注意してください。

 4.ローポリメッシュを選択し、Modelingモジュールの Edit Polygons → Normals → Soften/Harden
  オプションを開き、 All Softボタンを押してからApply ボタンを押します。
  こうすると、法線にスムージングがかかります。
  ただし、意図的にエッジを立たせたい場所がある場合は、そのエッジを選択して All Hardボタン→Applyボタン
  でハードエッジにしてやってください.。LightWaveのように、ポリゴンの接続を切る方法でも大丈夫です。
  ここでの設定は、ノーマルマップにそのまま反映されます
      
       今回は、影響を判りやすく見せるために一部だけハードエッジを設定しました。

 5.同様にして、ハイポリメッシュも法線にスムージングをかけます。
  特にハードにしたいエッジがない場合、全てをソフトエッジ(スムースエッジ)にしておいてください。
  100万を超えるハイポリの場合、細かく設定すること自体が難しいと思います。
  ここでの設定も、やはりノーマルマップに反映されます。インポート直後でハードエッジのままにしておくと、
  全体的にギザギザとしたノーマルマップになりますので、注意してください。
     
     今回は、影響を判りやすく見せるために一部だけハードエッジを設定しました。

 5..シーン上でローポリメッシュとハイポリメッシュが重なった状態になっているはずなので、Windowメニューから
  Outliner を開き、ハイポリ → ローポリ(Ctrlキーを押しながら) の順に選択してから
  RenderモジュールのLighting/Shadingメニューにある Transfer Surface Informationオプション(右端の四角)
  を開きます。
     

  オプションのウィンドゥが開くので、以下のように設定してください。
    ・Transfer       ノーマルマップの種類を指定します。通常は Tangent Space Normals にしておきます。
    ・Map width,height  ノーマルマップの解像度を指定します。5121024を使う事が多いと思います。
    ・FIle name      ノーマルマップを保存する場所と名前を設定します。
    ・File format     ファイル形式を設定します。Photoshop を指定しても、結果は IFF になるので注意してください。
    ・Target UV Set   ローポリがマルチUVの場合、対象となるUVセットを指定します。通常は map1 のままにしておきます。
    ・Shading Network 新しく作成したノーマルマップをどのようにオブジェクト上に表示するかを制御します。
       Preserve current shading network   ノーマルマップを作成するだけで、他には何もしない。通常はこれを指定します
       Attach a color channel preview     ノーマルマップを作成し、それをローポリにカラーマップとして確認のために貼ります。
                                確認するときは、ハイポリを隠してからテンキーの6(テクスチャ表示)を押します。
       Attach a Cg preview network      Nvidiaの一部のグラフィックカードを装着していて、Cgfxプラグインをインストールしている
                                場合のみ使用でき、ハードウェアシェーダでノーマルマップをプレビューできます。


    ・Search Method      ノーマルマップを計算する方法を選択します。通常は Use nearest Intersection を選択しておきます。
        Use outermostintersection       Search depth 以内でターゲットサーフェスから最も遠い交点を見つけるための
                                アルゴリズムを示します。このオプションは、モデルにしたサーフェスの詳細
                                (靴ひも、鎧、ポケットなど)を把握するために選択する必要があります。

            Use nearest Intersection         ソースサーフェス上の最も近い点を使用して、ソースサーフェスに隣接したパーツが
                                    凹サーフェスのギャップに投影されたときに発生するマッピングのアーチファクトを避ける
                                    ためのアルゴリズムを示します。一般的な例は脇の下や指の間で、ギャップの1 つの
                                    "側面" 上のスキンが誤った側面にマッピングされます。最初のオプションを(靴ひもエフェクト
                                    をマッピングするために)使用するときに、適切なSearchDepth 値を選択することによってこの
                                    ようなアーチファクトを取り除くことができる場合があります。


        ・SearchDepth       ハイポリ、ローポリ間で形状に大きな差が出ている時はマップに欠けが生じてしまうので、
                        この値を大きくして計算範囲を広くします。デフォルトは5です。

        ・OverscanPixel Passes 1以上の値を入れると、最終ピクセルがUVアイランドごとに外側に膨張したような結果になります。
                        UVの継ぎ目で欠けが出るときに有効ですが、計算時間が長くなってしまいます。

        ・Texture FIll Pass     オフにすると、ピクセルの無い空の部分がグレーで塗り潰され、非常に見やすいマップになります

 6.Bake and Close ボタンを押すと計算が始まり、カーソルが砂時計に変わります。
  100万ポリゴン以下のものならそれほど時間はかかりませんが、
  あまりにも膨大なポリゴン数の場合は、計算が止まっているのかどうかわからなくなります。
  1時間経っても計算が終了しない時は、ハイポリ側をパーツごとに分割して再計算を行う方が確実です。

 7.ウィンドゥが消え、カーソルが矢印に戻ったら計算終了です。今回の作例ではだいたい17秒でした(解像度は512x512)。
  指定した場所にノーマルマップ画像が作成されているので、Photoshop等で仕上がりを確認してください。
     
     ローポリでエッジを立てた場所には線が入っているのが確認できます。
      ハイポリでエッジを立てた個所(Sのあたり)には、モザイクのような模様が現れているのが確認できます。


3.シーフのモデルを使った検証

 XBox360の映像デモ用に作られたシーフのモデルを使い、Maya6.5でノーマルマップを生成してみました。
 ハイポリモデルは ZBrushからインポートされたもので、22,190,080ポリゴン(Triangles)と膨大なものです。
 ローポリ、ハイポリのどちらにも法線にスムージングをかけていますが、ローポリの片側だけにはしかるべき
 個所にハードエッジを立てています(黄色い線)。
 OBJファイルのインポートは非常に高速で、モデルをインポートした後もMayaは致命的に重くなりませんでした
 ただし、ワイヤーフレーム表示ではなく、シェーディング表示にするとさすがにもたつき感がありました。

     

 このモデルでノーマルマップを生成したところ、以下のような画像が生成されました(左側)。
 以前はおそらく数時間かかっていたと思いますが、今回は約20分程度で計算が終了しました。
 上の画像がMaya6.5、下の画像はXSI4.2です。(まだ標準搭載されていない、
 ベータ版のノーマルマップ機能で生成したものに修正を加えたものです。)
 
 

この画像は1024x1024のマップを50%に縮小したものですが、細かなディティールをきちんと拾っているのが判ると思います。
そして、ローポリモデルにハードエッジをしっかり設定すれば、さらに美しいマップになる事も判ると思います。


4.まとめ

Maya6.5のノーマルマップ生成機能が、スピード&クオリティ面において実作業で使えるものになっているのは確かであると思います。
オプションの数が無駄に多くないので、初めての人にも簡単に使えると思います。

ただし、XSI、ZBrushなど、他のソフトもノーマルマップ生成機能のクオリティアップを計っているそうなので、例え現時点でMayaのノーマルマップ
生成機能が強力でも、すぐに他に抜かれてしまう可能性もあります。これからもしばらくは各ソフトの機能チェックが必要であると思います。

以上で検証報告を終了します。


back
inserted by FC2 system