displacement shading

Material Palette にあるマテリアルには大抵 Displacement タブ以下にディスプレイスメントマッピング用の設定がある。例えば、球を作成、Material Palette で Houdini 15から搭載された Principled Shader をアサイン、Displacement のタブで Enable Noise Displacement をオンにすれば、Displacement がかかる。

ここでは、この設定を自分で作成したシェーダに組み込むための簡単な手順を紹介する。

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

1. シーンの設定

元になる簡単なシーンを作成する。

  1. Create シェルフの Sphere ツールを Ctrl キーを押しながらクリックし、半径 0.5 (デフォルト) の球をを原点に作成。
  2. Network パネルで /shop に行き、TAB メニューから Material Shader Builder を選択。

    vopmaterial1 というマテリアルが作成される。
  3. このマテリアルを sphere_object1 にアサインする。sphere_object1 のMaterial タブ以下の Material 部分に /shop/vopmaterial1 をアサイン。

    フィールド横の Operator Chooser ('+' みたいなアイコン) から /shop/vopmaterial1を選択。

    マテリアルのアサイン方法はこちらを参照。
  4. ビューポート左のツールバーから Render Region を選択、球の周りにバウンディングボックスを描けば、描画した枠の中でレンダリングが行われる。

    ただし結果は陰影なしの真っ白。そこでシェーダの設定を行う。

2. シェーダの設定

  1. ネットワークパネルで /shop に戻り、vopmaterial1 を選択。i キーを押すなり、ダブルクリックするなりして中に入る。中には以下の5つのノードがある。

    この初期構成に関する詳細はこちらを参照。
  2. TAB メニューから Principled Shader を実行。

    自動的に必要な接続が行われ、レンダリング結果に陰影とデフォルトカラー(青)が反映される。

    ここからディスプレイスメントを行っていく。

3. ディスプレイスメントの設定

  1. 最初に、次の3つのノードを作成する。作成順は関係ないが、後ほどもう一つ作るので、これで終わりではない。
    • Rest Position (restpos1): ジオメトリ変形時にテクスチャが崩れないように配置する。設定はデフォルトのまま。
    • Anti-Aliased Noise (aanoise1): 実際のランダムノイズを発生させるノード。Signature を 3D Input, 3D noise に。
    • Displace (displace1): ディスプレイスメントを演算するノード。Offset を 0.01, Effect Scale を 0.2 に。
  2. 下記図の通りに接続する。
    • displacement_globals の P 出力を restpos1 の P 入力に。
    • restpos1 の restP 出力を aanoise1 の pos 入力に。
    • aanoise1 の noise 出力を displace1の value 入力に。
    • displace1 の outP 出力を displacement_outputの P 入力に。
    • displace1 の outN 出力を displacement_outputの N 入力に。
    レンダリング結果は以下の通り。

    ジオメトリに穴が開いているのとエッジに沿って薄い溝が出来ているのがわかる。これを修正しなければならない。
  3. TAB メニューから Properties ノードを作成する。
      出来たノード (properties1) にはパラメータが無い。よって、ギアアイコンから Edit rendering Parameters... を実行。
      1. 左下の Filter 部分に displace と入力して、表示されるパラメータの数を限定する。
      2. root -> Mantra -> Shading とフォルダを開きながらたどり、Shading をハイライト選択。
      3. Shading 以下のパラメータをすべて矢印を使って この Properties ノードにコピー。
      4. Accept を押してパネルを閉じる。
  4. properties1 の出力を output_collect の shader3 に接続。
  5. properties1 の Displacement Bound の値を 0 (デフォルト) から 0.1 に変更する。

    これにより穴やすじの無いディスプレイスメントマップが出来た。

3. ディスプレイスメントの値

複数のノードで構成されているため、どのノードのどのパラメータをいじればどうなるか最初のうちはまごつく。以下簡単な結果。数値の書いてないものは上記のまま。

AA Noise
3D Frequency を変更。 Amplitude = 1.0
2, 2, 2
4, 4, 4
8, 8, 8
16, 16, 16
Amplitude を変更。 3D Frequency = 1, 1, 1
2
4
8
16
Displace
Effect Scale を変更、Offset = 0.01
0.2
0.4
0.8
1.6

まとめ

  • ディスプレイスメントマッピングをシェーダに組み込むには、最低限以下4つのノードとプロパティの設定が必要。
    • Rest Position: ジオメトリ変形時にテクスチャが崩れないように配置する。
    • Anti-Aliased Noise: 実際のランダムノイズを発生させるノード。Anti-Aliased Noise でなく、Turbulent など別のノイズノードでも可能。
    • Displace: ディスプレイスメントを演算するノード。
    • Property : ディスプレイスメントの追加設定を露出するためのノード。Displacement Bound を 0以上にする必要がある。
  • P と P、N と N など、globals と別のノードとの間で入力と出力のラベルが同じ場合、接続する必要がない場合もある。
  • 反対に P と pos など、意味が同じに見えてラベルが異なる場合、みなしの接続はされないし、間に (rest positionなど) 別ノードがあると良い場合が多い。
  • 上記の設定をおさえておけば、他のノードと組み合わせてさらに複雑な効果を生成することが可能。
  • シーンファイル:


Happy Halloween!

0 件のコメント:

コメントを投稿