PxrVCM

PxrVCM

これは、RISシステムのコアとなる最終品質のインテグレータです。 これは、双方向パストレーシングをプログレッシブフォトンマッピング(またはバーテックスマージとも呼ばれる)と組み合わせています。 これらの技術はいずれも、純粋なフォワードパストレーシングアルゴリズムよりも、光輸送経路の一定範囲を効率的にキャプチャする機能を備えています:

  • 双方向パストレーシングは、室内のシーンや間接照明が多いシーンでは、フォワードパストレーシングよりも高速に収束することができます。特に、フォワードパストレーシングでは、主要光源までの間接経路を簡単に見つけることができない時、双方向パストレーシングであれば、その主要光源がシーンを照明するに"1バウンド"足りない場合に特に役に立ちます。また、双方向パストレーシングは、光源からの経路と視点からの経路の間で複数のコネクションを作成して、シェーダの評価を再利用することができるので、一般的には間接ライティングを高速にすることもできます。(フォワードパストレーサは、跳ね返り毎にシェーダを実行しなければならないので、シェーダ評価を再利用することができません。)このメリットは、パターン評価が重い時に顕著になります。つまり、パターン入力を持たないBxdfではこの恩恵がありません。
  • プログレッシブフォトンマッピングは、特に比較的小さい光源を処理する時に、スペキュラー-ディフューズ-スペキュラーのライティング(コースティクスの反射または屈折)に対して収束が速くなります。

これらのサンプリングテクニックは、多重な重要度サンプリングを使って、(視点を光源に直接接続する)直接ライティングと組み合わせています。これは、組み合わせたアルゴリズムが、それ自身の技術だけを使用するよりも、本質的に強力で、広範囲のショットに対して高速に収束するという方法をとっています。

PxrVCMインテグレータでは、デフォルトモードのオペレーションで、これらのすべてのテクニックが有効になりますが、必要であれば、純粋な双方向パストレーサーや純粋な片方向パストレーサとして動作させることも可能で、 さらに、mergePathsconnectPathsのパラメータによるマージおよび/または接続を無効にすることで、純粋なプログレッシブフォトンマッピングも使用することができます。

images/skulls_small_spt.png

ピクセルあたり512サンプルで、フォワードパストレーシング(mergePaths=0、connectPaths=0)のみでレンダリングしたサンプルです。 コースティクスは、強いスペキュラーのメタリックな頭蓋骨が原因でライティングの統合が難しいため、ノイズが目立ち、ファイヤフライも多く見られます。

images/skulls_small_vcm.png

ピクセルあたり512サンプルで、完全なバーテックス接続およびマージアルゴリズム(mergePaths=1、connectPaths=1)でレンダリングしたサンプルです。 ファイヤフライはほとんど見られず、コースティクスはかなりうまく処理されています。

直接イルミネーションでは、PxrVCMは、光源の数 vs. Bxdf直接イルミネーションサンプルを決定するために、numLightSamplesnumBxdfSamplesのパラメータの値を見ます。 ノイズを最も少なくするには、numLightSamplesnumBxdfSamplesを同じ値に設定してください。 より深いレイデプスおよび/またはより低いスループットでの直接イルミネーションサンプルの削減はデフォルトで有効で、使用するスキームは、reduceDirectSamplesパラメータで制御することができます。

PxrVCMは、ボリュームのマルチスキャッタリングを完全にサポートしています。 特に双方向パストレーシングは、ボリュームのマルチスキャッタリングによく適しています。 PxrVCMは、現段階ではボリューメトリックフォトンに対応していません。 結果として、ボリューメトリックコースティクスのようなエフェクトは収束が遅くなることがあります。

このインテグレータとPxrPathTracerに関して、注目すべき重要な相違点がいくつかあります:

  • PxrVCMは、コースティクスライトパスをオフにする機能をサポートしていません。 PxrVCMからの結果を一致させるには、PxrPathTracerにより生成された画像を、allowCausticsを1に設定してレンダリングしてください。
  • PxrVCMは、PxrPathTracerと比べると、numLightSamplesnumBxdfSamplesの差異に関して許容度が低くなります。 (ほとんど)常にその2つを同じ値に設定する必要があります。値が異なると、不要なノイズが現れることがあります。
  • 双方向パストレーシングの性質上、PxrVCMは、間接レイサンプルに対して何の制御も持ちません。 つまり、すべての頂点は、最大限でも1つの間接レイを生成します。
images/hexmaze.png

詳細については、関連資料を参照してください:

パラメータ

mergePaths

"頂点マージ"を使用するかどうかを制御します。 頂点マージにより、別のプログレッシブフォトンマッピングが有効になり、スペキュラー-ディフューズ-スペキュラー(コースティクス)ライティングに対してパストレーシングより収束が速くなります。 一般的には、頂点マージを有効にすることを推奨しますが、フォトンに対して追加の時間やメモリのオーバーヘッドが発生するため、スペキュラー-ディフューズ-スペキュラーのトランスポートがあまりないシーンでは不要かもしれません。 このパラメータを、0(頂点マージオフ)または1(頂点マージオン)に設定します。 デフォルトでは、頂点マージは有効です。 尚、フォトン生成には、IncrementalフラグをHiderに対してオンにする必要があります。 つまり、現在のインクリメントで生成されるフォトンが、次のインクリメントでのフォトンマップとして使用されます。

頂点マージがオフで、パス接続が有効の場合、VCMが双方向パストレーサとしてのみ機能します。

connectPaths

"頂点接続"を使用するかどうかを制御します。 フォワードパストレーシングに対する双方向パストレーサの強みは、完全に結合したパスまで間接寄与を繰り返して再利用する機能にあり、目と光源のパス間を繰り返し接続し、重要な間接イルミネーションのある室内シーンで、収束が高速に行なわれます。

頂点マージと頂点接続がどちらも無効の場合、VCMが片方向パストレーサとしてのみ機能します(ライトパスは生成されません)。

頂点マージが有効で、頂点接続が無効の場合、VCMは、異なるタイプの双方向プログレッシブフォトンマッピングを実行します。 このモードは一般的には推奨しません。視点と光源間を直接接続せず、結果として、他のすべてのモードよりも直接ライティングの収束が遅くなることが多いからです。

このパラメータを0(頂点接続オフ)または1(頂点接続オン)に設定します。デフォルトでは、頂点接続は有効です。

mergeRadiusScale

頂点マージで使用する半径の倍率を指定します。 デフォルトでは、VCMインテグレータは、視線パスに沿って計算されたレイ微分に基づいて、頂点マージに対する自動半径を計算します。 このパラメータは、デフォルトで計算された半径に適用される追加倍率を指定します。 倍率を大きくすると、より広い領域でフォトンの影響にブラーがかかり、ノイズの多いコースティクスの削減に役立つことがあります。 しかし、半径を大きくすると、同時に、マージの速度が下がり、プログレッシブフォトンマッピングの主要バイアスが大きくなるため、バイアスのない結果に到達するには多数の反復が必要になります。 デフォルト値の5.0では、ノイズが大幅に減少しますが、いくつかの初期バイアスを小さくするには多くのサンプルを使用することになります。 少数のサンプルの使用時に、これらのバイアスアーチファクトが好ましくない場合、mergeRadiusScaleを小さくすると、ノイズは多くなりますが、これらのアーチファクトが減少します。

timeRadius

マージさせるフォトンに対して、シャッターの間隔を小数点レベルで、最大の時間差を指定します。 timeRadiusのデフォルトは1.0です:つまり視点は、放射されたフォトンといつでもマージすることができます。 これは、オブジェクトの移動によってコースティックスに不正確な結果(つまり、時間内でシミができます)が起こることがあります。 timeRadiusを小さい値に設定すると、マージできるフォトンに対して、時間内の検索半径が狭くなり、モーションブラーのかかったコースティクスには良い結果になりますが、 止まったオブジェクトに関しては、コースティクスを解消するために多くのフォトンが必要になります。

maxPathLength

接続レイなどの結合した光源と視線パスの最大長を制御します。 例えば、4の値は、大域照明のバウンスを3回まで許可します。 このパラメータの1の値は、直接照明のみを許容します。 これは、ライトパスが何も生成されないということです(視線パスの頂点は常に光源に接続しているため)。 このパラメータのデフォルト値は10です。

numLightSamples

視線パス上にある頂点毎の直接イルミネーションに対する光源サンプル数を制御します。 デフォルトは1です。 ノイズを最も少なくするには、numLightSamplesnumBxdfSamplesを同じ値に設定してください。

numBxdfSamples

視線パス上にある頂点毎の直接照明に対するBxdfサンプル数を制御します。 デフォルトは1です。 ノイズを最も少なくするには、numLightSamplesnumBxdfSamplesを同じ値に設定してください。

rouletteDepth

全体のパスの長さを短くするために、インテグレータがロシアンルーレットを実行し始める時点でのパスの長さを制御します。 デフォルトは4です。 尚、ロシアンルーレットは、目とライトパスの両方に別々に適用されます。

rouletteThreshold

その値よりも小さい場合にロシアンルーレットを実行し始めるパスのスループットの閾値を制御します。 デフォルトは0.2です。 閾値を上げると、パスの長さが短くなり、全体的に速度は上がりますが、ノイズが大きくなります。

clampDepth

clampLuminanceパラメータの値を指定すると、clampDepthは、レイ毎の輝度に基づいてクランピングを始める時点でのレイデプスを制御します。 例えば、このパラメータを2に設定し、clampLuminanceの値を4に指定すると、 各レイが寄与する輝度は、すべての間接照明に対してわずか4であり、直接照明に影響を及ぼさず、直接照明のクランピングも実行されません。 デフォルトは2です。

clampLuminance

デフォルトでは、PxrVCMインテグレータは、どのようなテクニックによって輝度が計算されていても、頂点でその輝度を最大限でも10.0にクランプします。 しかし、clampLuminanceパラメータに別の値を指定することで、この挙動を変更することができます。 clampLuminanceパラメータに比較的小さい値(例えば、2から20の間)を指定すると、収束の速度を大幅に上げることができます。 間接照明のライトパスが、クランピングにより著しく暗くなる場合がありますが、これが許容範囲である場合もあります。 このパラメータを(例えば1e30のような)かなり大きい数字に設定すると、すべてのクランピングを効率的に無効にすることができます。 デフォルトは10.0です。