Houdini 20.0 レンダリング

Mantraのレイトレースシェーディングを理解する

Mantraがどのようにレイトレースを使って、シーン内のオブジェクトをシェーディングしているのか、その背景の詳細を説明しています。

On this page

BSDF

双方向散乱分布関数 (BSDF)は、サーフェスが光を反射する方法を制御します。

BSDFは、 確率論モデル です。入射角を指定すると、BSDFは、光線が特定の方向でサーフェスから跳ね返る確率を計算します。

BSDFは、 双方向 です。つまり、光源からのライトの光線がサーフェスからどのように跳ね返るのか、また、カメラからサーフェスへの光線を指定すれば、逆にサーフェスから光源までの角度を計算するように動作すること できます。

Houdini13からは、MantraのシェーディングモデルがBSDFベースになっています。つまり、すべてのレンダリングエンジンがBSDFを使い、Mantraシェーダネットワークの標準の最終結果はBSDFです(とはいえ、Output VOPは、今でもCfOfを受け入れます)。

Mantraがサーフェスをレイトレースする方法

  1. Mantraは、1ピクセルあたりに特定の数の プライマリ光線 (通称、 直接光線 )を放射します( Pixel Samples パラメータで設定)を放射します。

    デフォルトの Pixel Samples は、1ピクセルあたり3×3の9本のプライマリ光線が設定されています。

  2. プライマリ光線がサーフェスに当たると、Mantraは、 セカンダリ光線 (通称、 間接光線 )を放射します。

    セカンダリ光線の数も Pixel Samples で設定します。 Ray Variance Antialiasing がオンの時、光線がもっと必要な箇所に基づいてMantraが計算した値でサンプル数が乗算されます。最小乗数が、 Min Ray Samples パラメータ(デフォルト値は1。つまり Pixel Samples の値を使います)で、最大乗数が Max Ray Samples (デフォルト値は9。つまり、 Pixel Samples の値の 9倍 )です。

    Mantraは、各サーフェスシェーダのBSDFを逆に実行し、カメラ角度から光源へ逆方向に戻ろうとします。BSDFは、カメラ角度に基づいた複数の解がありえる結果の角度をもちます。Mantraは単にBSDFの確率論モデルに従ってランダムに角度を選択します。光線が多いほど、このランダムによって発生したノイズが均一化されます。

    複数のBSDFコンポーネントを持つサーフェスシェーダ(これが一般的なケースです)に関しては、例えば、サーフェスシェーダに1つ以上の反射コンポーネント、ディフューズコンポーネント、サブサーフェススキャタリング(SSS)コンポーネントがあるとします。この場合、Mantraは、シェーダ内のすべてのBSDFを満足させることができる一番良い光線の分布を計算します。

  3. 各セカンダリ光線に対して、Mantraは3Dツリー検索アルゴリズムを使って、BSDFで計算した角度に 一番近い サーフェスやライトを検索します(物理ベースのレンダリングでは、エリアライトがもっとも効率的です。つまり、エリアライトが検索しやすいです)。

    光線がサーフェスに当たる時:

    • サンプルはシャドウ内にあるとみなされます(シェーダにIs Shadowノードを使えば、これをテストすることができます)。

    • このタイプの光線がバウンス制限にまだ到達していないなら、Mantraは再度、セカンダリ光線を送信して、処理を繰り返します。反射、ディフューズ、屈折で送信される光線には、別々のバウンス制限があります(Mantraノードの Properties ▸ Shading タブ)。デフォルトの Diffuse Limit0です。これは、光線が最初のサーフェスに当たった時に光線が停止します(つまり、この制限を上げない限り、オブジェクトは、他のオブジェクトを映し込みません)。

    光線がライトに当たる時:

    • サンプルは、シャドウがないとみなされます(シェーダにIs Shadowノードを使えば、これをテストすることができます)。

    • Mantraは、すべての値を集計して、ライトカラーと当たったサーフェスすべてのカラーに基づいて、ピクセルカラーを計算します。

デフォルトの1ピクセルあたりの3×3=9のサンプル数で始めれば、各バウンスは、9つ以上の追加光線を送信し、許容されるバウンスの数を上げれば(例えば、ディフューズバウンスを許容する)、光線の数が増えるのでレンダリングが遅くなることに注意してください。もっとバウンスが必要であれば、基本の Pixel Samples を減らして、 Max Ray Samples の値を上げてみてください。そうすれば、Mantraは、単純な場合には少ない光線を使い、バウンスが必要な箇所には多くの光線を使います。または、レンダリング時間を気にしないのであれば、 Pixel Samples を12×12に設定して、 Ray Variance Antialiasing をオフにすることで、全体が均一的に非常に高品質なレンダリングをすることができますが、レンダリング時間が非常に長くなります。レンダリングパラメータを調整して、スピードと品質のバランスを良くするには、レンダリング品質と速度を参照してください。

ボリュームのレイトレーシング

Mantraはボリュームをサーフェスと同様に扱います。Mantraはボリュームをマイクロポリゴンに細分化します。光線は、マイクロポリゴンのどれかに当たった時に停止、または追加で光線を送信します( Shading ▸ Volume Limit パラメータに基づきます)。

シェーダにBSDFを使う

MantraはBSDFを第一級オブジェクトとして扱います。Reflect VOPなどの特定のVOPがBSDFを生成し、AddMultiplySubtractのVOPを使ってBSDFを結合します。

BSDFを生成するVOPすべてには、 Label パラメータがあります。これは、名前をBSDFが表現するシェーディングコンポーネント(例えば、ディフューズ、反射、屈折、サブサーフェススキャタリング)と関連付けることができます。それらのラベルを2通りの方法で使うことができます:

役立つ情報

  • シェーダにコースティクスや自己発光(サブサーフェススキャタリングを含む)を使うなら、Mantraノード上の Properties ▸ Shading タブで Allowable Paths を“All”に設定します。

レンダリング

Mantraユーザガイド

基本

ライティング

次のステップ

導師レベル

他のレンダラー