ノーマルマップの作成 (1)
ポリゴン平面にディスプレイスメントマテリアルをアサインし、それをノーマルマップとしてレンダリングする方法を紹介する。
注意: ワークフローはそれほど複雑ではないが、細かい設定を正しく行わないと期待通りの結果にならない (ある意味落とし穴の多いゲームみたい)。ここではそういった「落とし穴」にはまらない様に留意する。反対に必須でないものは極力排除している。
使用バージョン: Houdini FX 14.0.310
シーンファイルへのリンクは一番下にあり。
I. 元形状の作成
元になる形状 (Grid ポリゴン平面) に UV を設定する。
- Create シェルフから Grid を生成
- grid_object1 をダブルクリックするなり i キーを押すなりして中に入る。
- grid1 の出力から UV Project を接続。ディスプレイフラグ(水色) を設定する。
- uvproject1 の Group Type を Vertices にする。残りの設定はデフォルトのまま。
注意: UV Project の Group Type は必ず Vertices であることを確認して次に進む。
II. ディスプレイスメントマテリアルの作成
法線情報の元となるマテリアルを簡単に作成。
- Material Palette へ行き、左側のマテリアルリストから Mantra Surface ノードを右側の /shop エリアにドラッグ&ドロップする。
- /shop エリアの mantrasurface をビューポート内の grid_object1 上にドラッグ&ドロップする。
- /shop で mantrasurface を選択。
- Displacement タブに行き、Noise-Based Displacement をオンにし、オンにすることによって有効になったTrue Displacement を必ずオフにする。
- Render view パネルに行き、Render ボタンを押してとりあえず一度レンダリングしてみる。
Material が /shop/mantrasurface となっているはず。
注意: True Displacement は必ずオフにしたことを確認して次に進む。
III. ノーマルマップ出力ノードの作成
ノーマルマップの出力には Mantra ノードを使う。先ほどレンダリングしたことにより自動的に、/out 以下に mantra_ipr ノードが作成されたが、これとは別に作った方があとあと楽。いくつでも作れる。
- /out 以下に Mantra ノードを作成。Render->Create Render Node->Mantra とするか、TAB -> Render -> Mantra などとする。
- Override Camera Resolution をオンにし、Resolution Scale を User Specified Resolution に、Resolution にテクスチャ解像度を設定する (例 512x512など)。
- Images タブ以下 Extra Image Planes タブに行き、Extra Image Planes の数を 0 から 1 に、追加されたイメージプレーンの VEX Variable を export_normals にする。
- Rendering タブに行き、Rendering Engine を Micropolygon Rendering にする (必須)。
- 同 Rendering タブ以下の Render タブの UV Render Object を Operator Chooser を開いて、/obj/grid_object1 に設定。
- Render View で Output Driver を mantra1 に設定、レンダリングを実行。
- Render ボタン真下の太いところをクリックすると View Bar が表示される。C から先ほど定義した export_normals に変更。
注意: ノーマルマップの生成には Micropolygon Rendering を使用する。Ray Tracing、PBR などは使用できない。RenderView で確認をする場合、Preview はオフにする。Preview がオンだと Render Engine の設定に関わらず Ray Tracing レンダリングが実行される。
IV. ファイルの書き出し
Render View から簡単にノーマル情報だけを書き出すにはこちらの方法を取る。
まとめ
- テクスチャ UV の設定は Vertices (面単位頂点) で行う。Points (共有頂点)ではうまく行かない。
- 法線情報は export_normals VEX Variable (パス) を使って書き出す。
- カメラからではなく UV 空間にレンダリングするには UV Render Object にオブジェクトを指定する。
- ノーマルマップ生成の Rendering Engine は Micropolygon Rendering 。
注意点まとめ
- mantra: Unable to find UV object '/obj/grid_object1'
というエラーが出る、またはレンダリング画像が真っ黒。- UV Project の Group Type を確認。必ず Vertices であること。
- レンダリング結果の向きがおかしい。
- Noise-Based Displacement を使った場合、True Displacement は必ずオフ。
- Rendering Engine の設定が Micropolygon Rendering にもかかわらず、
mantra: UV rendering unsupported with ray tracing.
というエラーが出る。- Render View を使用している場合、Preview の設定を確認。オンの場合、オフにする。
- Preview がオンだと Render Engine の設定に関わらず Ray Tracing レンダリングが実行される。
シーンファイル:
- normalmap1.zip (96KB)
はじめまして、いつも参考にさせていただいています。
返信削除一点、質問させてください。
こちらに記載されている内容を、H15.5で試してみたところ、
「Ⅲ.ノーマルマップ出力ノードの作成」の項目の
「5.」の画像にあるような「UV Render Object」と「UV Attribute」の入力欄がなく、行き詰まってしまいました…
別のところで指定する必要があるでしょうか?
初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。
よろしくお願い致します。
こんにちは。申し訳ないですがこのページは Houdini 14.0 の頃に書かれたものですが、Houdini 15.0 でこの部分に大幅な改良が加えられ、Houdini15.0以降では、ここで記述された情報は役に立たないかもしれません。
削除最新の方法を理解するのであれば、
http://sidefx.jp/index.php?option=com_content&view=article&id=201
を見ていただくのが良いかと思います。お手数をおかけいたしますが、宜しくお願いいたします。
kenさん ご返答ありがとうございます!
削除動画の方も、最新版(15.5.565)とはプロパティの内容が違っているようで、
色々触ってみたものの、思ったようにいかず…だったのですが、、
もう少し「BakeTexture」のサンプルファイルなど見て、勉強してみます…!