元記事:
blender.org - QMC Sampling
QMC サンプリング
QMC サンプリングタイプ
多くのレンダリングテクニックでは、複数のサンプルの平均をとることで最終結果を生成しています。例えば、ぼやけた反射は反射レイの周辺から円錐状にサンプル群を取って平均しており、Ambient Occlusion ではシェーディングする場所の周囲の半球からのサンプルの平均を、ソフトシャドウでは、光源の形状と交差した部分のサンプルの平均を取っている、など。
サンプルを取る位置や方向を生成するポピュラーな方法が、'Quasi-Monte Carlo (QMC) Sampling(準モンテカルロサンプリング)'です。モンテカルロサンプリングは、純粋なランダムサンプリングを参照します(カジノの街とチャンスのゲームにちなみ名づけられました)。それに対し、準モンテカルロは、様々な「ほぼランダム」なサンプルを生成する技術を参照していますが、純粋なランダムサンプルより分布が優れています。
ランダムサンプリングでは、サンプルポイントがお互いに非常に近いところに収まり、サンプルされるスペースに大きなギャップが生じてしまうというケースがよくあります。この不均一なサンプルポイントの集合は、
一つのピクセルの一組のサンプルがシーンの一部に大量に集中する一方、次のピクセルではシーンの違う部分に集中するため、レンダリングされた画像にノイズをもたらします。QMC の技術は、サンプルの均一な分布を保ち、決定性のある数列により、このギャップを抑えることを狙いとしています。
現在、Blender には、Halton 列を使用する方法(Adaptive QMC)と、Hammersley 列を使用する方法(Constant QMC)の二つの QMC サンプリング方法があります。
上の図にもあるように、Hammersley列はより均一な分布で、綺麗なサンプルパターンが得られます。しかし、Halton 列には一つ大きな利点があります。それは、計算を付加的に行い、新しいサンプルが追加されるごとにいい分布を保つことができることです。
これは Halton 列をアダプティブ(適応)サンプリングに使用することで可能になります。一方、Hammersley 列では、前もって計算する必要があり、全てが使用されなければなりません。
アダプティブサンプリングとは、画像内の違うシチュエーションに適応し、取得された複数のサンプルが変更可能で、いくつかの状況において、更に効率的になることができるということです。
これは必ずしも 'Adaptive QMC' が常に優れたオプションということを意味しているのではありません。アダプティブサンプリングがあまり適していないようなシーンであれば、'Constant QMC' の改善された分布のサンプルパターンにより、同様の時間でもっといい最終画像が得られるかもしれません。
アダプティブサンプリング
アダプティブ QMC サンプリングは、'Adaptive QMC' が選択され、Threshold が0より上に設定された時に自動的に使用されます。Blender では、現時点ではシンプルな「早期終了」手法を使用しています。これは、サンプリングプロセス中、計算がもっとサンプルを要求しているかを、閾値とは関係なくコードでチェックします。もし、もうサンプルが必要ない判断された場合、UIで設定された値に達するより早くにストップし、次のサンプルの組へと移行します。これにより、サンプルの計算において、あまり多くのポイントがないため(サンプルの計算はレイトレーシングにおいて多大な時間を消費する可能性があります)、もしこれらのサンプルが最終画像の品質にあまり貢献しない場合、レンダリングを大幅にスピードアップできます。
アダプティブサンプリングは現在 Blender の3つのエリアで使用されています。
Glossy 反射・屈折[wiki]-今までサンプリングされた色群の統計による違いが、指定された閾値未満であれば、サンプリングをスキップします。[/wiki]
反射・屈折ソースがフラットカラーの大きな領域を持っていた場合、トレースされたサンプルが類似した物になると予想され、あまり多くを最終カラーに到達させる必要がなくなり、もっとも効果が大きくなります。
レイトレースシャドウ[wiki]-現在のポイントで影の範囲が閾値未満かどうかをチェックし、完全に影になる、もしくは完全に影がないことが決定された場合、サンプリングをスキップします。[/wiki]
これにより、ほとんどの状況で大幅に速度が向上しますが、もっとも有効となるのは、完全に影となる、もしくは影のない大きなエリアがある場合、例えば、広くぼやけた暗部のない、シャープな影などの時です。
Ambient Occlusion[wiki]-カレントに対するすべてのサンプルの平均と、最後にサンプルが取得された以前の、前の平均との違いが閾値未満かどうかという、シンプルなコントラストテストでサンプリングをスキップします。[/wiki]
これは常に劇的な改善が得られるわけではなく、ノイズの原因にもなります。状況によっては、もっとサンプル分布が均等な、Constant QMC を使用する方が効果的かもしれません。いつものように、何が一番効果的かを確認するために、別々の設定でいくつかテストレンダリングでベンチマークを取るといいでしょう。
元記事:
blender.org - QMC Sampling