H16 新機能 – Nested dielectrics


こんにちは、篠島です。今回はH16のシェーダーに追加された Nested dielectrics という機能を説明します。

 

Nested dielectrics って何だ? という思うかもしれませんが、Dielectrics は誘導体で、メタル以外の物質を指すようです。物理ベースのレンダラーに物理ベースのシェーダーで、色々と物理の用語が使われるようになりましたね。ようはメタル以外の普通のオブジェクトを Nested (入れ子にする)という事ですね。

ヘルプを見るとわかりますが、物理的に正しい結果を得るにはオブジェクトごとに表面をモデリングしないとならないのが、この Nested dielectrics の機能によってモデリングを簡略にすることができるようになりました。オブジェクトがオーバーラップしているところはシェーダーの設定により、どのシェーダーを優先して適用するかを設定できます。

 

Principled Shader の Trancparency の中に Surface Priority というのがあります。ここを設定することでオーバーラップしているジオメトリがある場合、どのシェーダーが優先的に使われるのかを指定できます。数字が低いほど優先度が高くなります。

下の図のように、Surface Priorityの数字の低いオブジェクトのシェーダーが優先的に使われます。

 

そして Mantra ROP で Shading タブの中にある Enable Absorption and Nested Dielectrics をONにします。Physically Based Rendering の場合はこのプロセスは必須です。Micropolygon Rendering と Ray Tracing の場合はこのオプションがOFFでもきちんとレンダリングされました。

 

 

試しにオブジェクトを2つ作り、色の付いたグラスのマテリアルを適用してみました。オーバーラップした状態でシェーダーがどの様に適用されるかを表したのが下です。ここで注意したいのが、Surface Priority が 0 のままだと Nested dielectrics は動作しないという事です。数字が低いほど優先度が高いと書きましたが、0 だと無効になってしまうので、1 が一番優先度の高い数字となります。実際に試してみましたが、グラスの中に異なるグラスが入っているオブジェクトはめったに見たこと無いので物理的にどれが正しいのかは自分は判断しかねます・・・。