transfer normalmap

ノーマルマップの作成 (2)

低解像度ジオメトリと高解像度ジオメトリを用意し、高解像度ジオメトリのディテールを低解像度ジオメトリのノーマル情報として転写する方法を紹介。

使用バージョン: Houdini FX 14.0.310
シーンファイルへのリンクは一番下にあり。

I. 元形状

こちらのシーンファイルを開き、低解像度ジオメトリ (ポリゴン平面) と高解像度ジオメトリを用意。

このシーンには

  • pyramids: 高解像度ジオメトリ
  • grid_object1: 低解像度ジオメトリ
  • cam1: カメラ
  • distantlight1: ディレクショナルライト
がある。

II. マテリアルの作成およびアサイン

低解像度ジオメトリに法線情報を受け取るマテリアルを作成しアサインする。

  1. Material Palette へ行き、左側のマテリアルリストから Mantra Surface ノードを右側の /shop エリアにドラッグ&ドロップする。
      mantrasurface ができる。
  2. /shop エリアの mantrasurface をビューポート内の grid_object1 上にドラッグ&ドロップする。
      これでマテリアルがオブジェクトにアサインされる。 確認するには、/obj/grid_object1 の Material タブをみる。
      Material が /shop/mantrasurface となっているはず。
  3. Jump to Operator (矢印) をクリックし、mantrasurface のパラメータを表示。
  4. Settings タブに行き、Normal Map Export 以下の Source をGeomtry Difference にする。

高解像度ジオメトリに対してはマテリアルの設定は不要。

III. ノーマルマップ出力ノードの作成

ノーマルマップの出力には Mantra ノードを使う。

  1. /out 以下に Mantra ノードを作成。Render->Create Render Node->Mantra とするか、TAB -> Render -> Mantra などとする。
      mantra1 ができる。
  2. Override Camera Resolution をオンにし、Resolution Scale を User Specified Resolution に、Resolution にテクスチャ解像度を設定する (例 512x512など)。
      これでレンダリング解像度が決まる。
  3. Images タブ以下 Extra Image Planes タブに行き、Extra Image Planes の数を 0 から 1 に、追加されたイメージプレーンの VEX Variable を export_normals にする。
      この設定で法線情報がパスとして書き出される。
  4. Rendering タブに行き、Rendering Engine を Micropolygon Rendering にする (必須)。
      しないとノーマルマップがレンダリングされない。
  5. 同 Rendering タブ以下の Render タブの UV Render Object を Operator Chooser を開いて、/obj/grid_object1 に設定。
      こうすることで uv attribute も uv と設定されるはず。
  6. Render View で Output Driver を mantra1 に設定、レンダリングを実行。
      最初に表示されるのは カラー (C) チャネル。
  7. Render ボタン真下の太いところをクリックすると View Bar が表示される。C から先ほど定義した export_normals に変更。
      ノーマルマップが表示されているのがわかるはず。
  8. 一度のレンダリングにかかる時間は、Windows Experience Index が 6.6 の PC (Dell M4700 Windows 7) で、3 秒弱。ただ見たところ、精度はあまり良くない。
  9. 精度を向上するには、Dicing タブの Shading Quality Multiplier を 1 (デフォルト) から、4 などにあげる。
    • レンダリング時間は4秒強に増えるがエッジの精度は格段に向上する。
    • Sampling の値をあげてもレンダリング時間が増える割には効果は少ない。

注意: ノーマルマップの生成には Micropolygon Rendering を使用する。Ray Tracing、PBR などは使用できない。RenderView で確認をする場合、Preview はオフにする。Preview がオンだと Render Engine の設定に関わらず Ray Tracing レンダリングが実行される。

IV. ファイルの書き出し

Render View から簡単にノーマル情報だけを書き出すにはこちらの方法を取る。

まとめ

  1. 高解像度ジオメトリから低解像度ジオメトリに法線情報を写すには、低解像度ジオメトリのマテリアルのNormal Map Export 以下の Source をGeomtry Difference にする。
  2. テクスチャ UV の設定は Vertices (面単位頂点) で行う。Points (共有頂点)ではうまく行かない。
  3. 法線情報は export_normals VEX Variable (パス) を使って書き出す。
  4. カメラからではなく UV 空間にレンダリングするには UV Render Object にオブジェクトを指定する。
  5. ノーマルマップ生成の Rendering Engine は Micropolygon Rendering 。

注意点まとめ

  • mantra: Unable to find UV object '/obj/grid_object1'
    というエラーが出る、またはレンダリング画像が真っ黒。
    • UV Project の Group Type を確認。必ず Vertices であること。
  • Rendering Engine の設定が Micropolygon Rendering にもかかわらず、
    mantra: UV rendering unsupported with ray tracing.
    というエラーが出る。
    • Render View を使用している場合、Preview の設定を確認。オンの場合、オフにする。
    • Preview がオンだと Render Engine の設定に関わらず Ray Tracing レンダリングが実行される。

シーンファイル:

0 件のコメント:

コメントを投稿