サンプリングとは?

Arnold のようなレンダラを使用して作業する場合、レイトレース レンダリングの中核となる原則を基本的に理解しておくと役立ちます。仮想シーンのリアルなイメージを作成するには、シーン内での光源からカメラまでのライトの伝播をシミュレートする必要があります。各イメージ ピクセルの色を決定するために、Arnold はシーンのジオメトリ、シェーダ、ライトなどから情報を収集し、ピクセルを通して表示されるオブジェクトを光源につなぐ多数のランダムな光の移動パスをトレースします。このプロセスを「サンプリング」と言います。生成されるイメージの品質は、ピクセルごとに生成されるパスつまりサンプルの数によって大きく異なります。

イメージをレンダリングする場合、Arnold はシーンを調べて、各ピクセルの色の値を決定する必要があります。Arnold はこれを行うために、多数のレイをシーン内のオブジェクトに当たるまでカメラの位置から送信します。レイがオブジェクトに当たるたびにいくつかの計算が実行され、最終的にオブジェクトに関する情報の一部(たとえば、色など)が返されます。基本的にこのプロセスは、仮想カメラのイメージ プレーンでピクセルを「サンプリング」するプロセスであると言うことができます。

レンダリング計算の際に各ピクセルのサンプルの数が少ないと、ノイズが多くなる可能性があります。ピクセルごとのサンプルの数を増やすと、実際のシーンの表現により近いノイズの少ないイメージが生成されます。以下のイメージは、シーン内のカメラ(AA)のサンプルの数を増やしたときの比較を示すものです。カメラ(AA)のサンプルを増やすと、エイリアシング ノイズを減らすだけでなく、二次レイのサンプルがさらに追加されてライティングのノイズも削減されます。

Camera (AA) が 1: ピクセルごとに 1 x 1 = 1 個のサンプル(ノイズの多いイメージが表示される) Camera (AA) が 6: 6 x 6 = 36 (ノイズが削減される)

カメラ(AA)のサンプリング

では、カメラ サンプリングとは何でしょうか? 基本的には、多数のレイがカメラからレンダリング画面ウィンドウの必要な各ピクセルを通してシーンに投射されることを指します。これは「一次レイ」と呼ばれますが、レンダリング ビューから投影されるため、「Eye」または「カメラ線」(カメラ(AA) (アンチエイリアシング))とも言います。「ピクセル サンプル」と呼ばれることもあります。

カメラ(AA)の値は、ピクセルのスーパーサンプリング レート、つまりカメラからトレースされる 1 ピクセルあたりのレイの数をコントロールします。サンプル数が多いほど、アンチエイリアシングの品質は向上しますが、レンダリング時間が長くなります。

これらのサンプリング レートについて言えば、取得されるサンプルの実際の数は入力値の 2 乗になるため、このプロセスは直線的にならないことに注意してください。  たとえば、カメラ(AA) サンプルの数が 3 である場合、3 x 3 = 9 個のサンプルがアンチエイリアシングに使用されるということになります。拡散反射光サンプルの数が 2 である場合、2 x 2 = 4 個のサンプルが拡散反射光 GI で使用されます。同じことがその他の値にも適用されます。

これらのカメラ(AA)を一次レイ(またはピクセル サンプル)と言い、レンダリングされるイメージの全体的な品質を決定します。カメラ(AA)サンプルを増やすと、イメージの全体的な品質は向上しますが、すべてのもののサンプリング レートが大きくなるため、無駄が生じる可能性が高くなります。ノイズの原因をシーン内で特定できる場合、その特定のレイの数だけを増やすようにサンプリングの値を設定すると効率的です。たとえば、モーション ブラーが多いシーンがある場合、より大きいカメラ(AA)サンプルが必要であるため、その他のサンプル値を小さくできます。同様に、カメラ(AA)を増やすと間接光にも効果があります。そのため、それほど多くの拡散反射光サンプルは必要ありません。しかし、キャラクタの肌のノイズを削減しようとする場合、SSS サンプルの値を高くし、カメラ(AA)サンプルの値はそれほど高くしない方が効率的です。

ライト サンプリング

直接光レイとは、ライトを処理するレイのことです。これらのレイは、シーン内の位置からさまざまな光源に向かって移動します。これらのレイは、サーフェスがシャドウの中にあるかどうかを判断し、シャドウの中にない場合は、ライティング情報を計算できます。

ライトからのノイズの診断が難しい場合があります。特にライトの範囲またはサイズが大きい場合には、診断が難しくなります。これらのケースでは、間接拡散反射光ノイズと間違えることがあります。このことから、さまざまなタイプのノイズの原因となるレイをテストする必要のあることが分かります。問題がシャドウ ノイズである場合、Arnold のレンダリング設定でシャドウを無視するように切り替えるだけで、ノイズの問題は完全に解決されます。 下のイメージは、Arnold でライトをトレースする方法について示しています。

オブジェクトに当たっている光線と当たっていない光線 Arnold でのライト サンプリング

前に説明したのと同じノイズの問題が、直接レイと間接レイで発生する可能性があります。直接的な光源からのノイズは、通常、エリア ライトから鏡面反射光ハイライトまたは大きくて柔らかいシャドウで表示されます。このような場合は、ライト サンプルの数を増加する必要があります。下のイメージは、ライト サンプルの数を 1 個から 3 個まで増やした場合のシャドウ ノイズの違いを示しています。

1 個のライト サンプル。ノイズがたくさんあります。 3 個のライト サンプル。ノイズが改善されています。

シーン内のノイズを評価する場合、ノイズの原因を互いに分離することが役立つ場合があります。 拡散反射光レイを無効(0)にすると、存在しているノイズのタイプを特定するのに役立ちます。拡散反射光レイの数を増やすのではなく(レンダリング時間は拡散反射光サンプルごとに 2 倍になります)、シーン内の間接拡散反射光レイの数を最適化する場合は、まずノイズの原因を分離する必要があります。

ライト ノイズと拡散反射光ノイズの両方(両者を見分けるのは困難です)。 diffuse が 0 (無効)に設定されています。ライト ノイズを識別しやすくなります。

拡散反射光レイのサンプリング

放射する緑色の立方体からの間接光(拡散反射光) 直接光のみ(diffuse_samples: 0)

間接拡散反射光レイとは、オブジェクトおよびそのサーフェス シェーダと相互作用するレイです。したがって、レイはシーンの中をオブジェクトに割り当てられたシェーダによって決定される方向に移動します。透過レイはオブジェクトを通過します。 レイが鏡などの反射オブジェクトに当たると、1 つの反射レイだけがそのポイントから入射レイによって決定される方向にトレースされます。対照的に、拡散反射光レイはヒット ポイントの周囲にある半球体上でランダムにサンプリングされます。

拡散反射光レイが Arnold のレンダリングで伝播する様子を示す図。

鏡面反射光レイのサンプリング

光沢のある鏡面反射光サーフェスをレンダリングする場合、拡散反射光レイと同様にノイズが問題になることがあります。明るいホットスポットでは、間接鏡面反射光サンプルにノイズが生じる可能性があります。たとえば、小さな明るいライトによる鏡面反射光が広範囲にわたる場合などです。問題が鏡面反射光ハイライトのノイズである場合は、原因が直接光であり、二次レイ タイプ(鏡面反射光など)ではないことを確認する必要があります。これは簡単に行うことができます。GI_diffuse_depthGI_specular_depth をゼロに設定するだけです(この設定により、基本的にすべてのグローバル イルミネーションがオフになります)。それでもノイズが存在する場合、それがイルミネーション モデルの直接鏡面反射光コンポーネントであることがわかります。 ほとんどのケースでは、鏡面反射光サンプルの数を増やすことで解決できます。

1 (サンプルが不十分です) 4 (サンプルが十分です。ノイズが削減されています)

ボリューム

ボリュームをサンプリングする場合、直接カメラ(AA)レイがボリュームを通過する際に、直接(AA)レイによってボリュームが何度もサンプリングされます。間接レイ(volume_indirect)も同様に動作し、レイがボリューム オブジェクトを「段階的に」通過すると(ボリュームの step_size)、何度も送信されます。したがって、ボリュームをサンプリングすると、サーフェスをサンプリングするよりも計算に時間がかかります。

ボリューム サンプリング。直接光(緑)。間接光(青)。

レイが通過する各ステップで、シェーダが評価され、ボリュームの密度が累積されます。これらの密度値がボリューム全体で不安定になる場合は、近接するレイが大幅に異なる値を計算して、レンダリングにノイズを生じさせている可能性があります。この場合、より多くのライト ボリュームのサンプルを使用してレンダリングするか、またはボリュームのステップ サイズを小さくする必要があります。 サンプリング値を小さくしても、ボリュームを使用してクリーン イメージをレンダリングするには手間がかかる可能性があります。

ライト ボリュームのサンプル: 1 ライト ボリュームのサンプル: 6

ボリュームをレンダリングする場合は、レイマーチング、直接光のサンプリング、および間接光のサンプリングの 3 つの点を考慮する必要があります。これらのサンプリング設定はすべて異なります。

ステップ サイズ

レイ マーチング プロセスの step_size です。サンプリング レートが小さ過ぎると、ボリューム レンダリングによってボリュームの小さなディテールが失われます。そのため、ノイズが多くなったり、ボリュームが実際より低密度になったり、火砕雲のような「ソリッド」ボリュームの「サーフェス」の正確な位置を誤って見積もったりすることになります。不正なステップ サイズには雪玉効果があり、残りのサンプリング プロセスのノイズが多くなる可能性があります。これをテストするのはとても簡単です。アルファ チャネルを調べるか、またはボリュームにいくつかの発光を追加してすべてのライトをオフにしてください。目的のカメラ(AA)設定で発光/アルファ チャネルのノイズが多い場合は、step_size が大き過ぎる可能性があります。

適切な step_size step_size が大き過ぎるため、アルファにアーティファクトが発生

step_size は実際にはオブジェクト空間にあり、ワールド空間にはありません。これは、ボリュームのトランスフォームのスケーリング時に、サンプリング精度が維持されるようにするためです。ただし、ステップ サイズを過度に大きくすることは避ける必要があります。そうしないと、ボリュームの密度が低くなり、色あせて表示されます。下のイメージの例では、この効果を強調するために、ボリュームが最大 100 単位まで拡大されています(1/25/50 がこのボリュームのサイズに対する相対値です)。

1 25 50

一般的に、step_size は、視覚的に目立つアーティファクトが現れる前まで、できる限り大きくする必要があります。 ステップ サイズを小さくすると、レンダリング時間が長くなります。 たとえば、ステップ サイズが 0.1 で、ボリュームの大きさがワールド空間で 10 単位の場合、約 100 個のプライマリ サンプルが存在することになります。したがって、ボリュームシェーダは 100 回呼び出されます。

直接光

ステップ サイズが正しい場合、ノイズは直接光か間接光のどちらかから出ている可能性があります。直接光を検出するのはとても簡単です。間接光をオフにする必要があります。また、レンダリングにノイズがある場合、ノイズの原因である光が検出されるまで、それぞれの光を一度に 1 つずつレンダリングする必要があります。それから、volume_samples の値を大きくします。volume_samples を大きくしても直接光のノイズがそれほど減少しない場合、おそらく、step_sizeが小さ過ぎることが原因です。または単にライトの相互作用(異方性の高いボリューム、テクスチャが重いメッシュ ライト、二次減衰など)をサンプリングするのが難しいためですこの場合、クランピングまたはフィルタリングを使用してサンプルを取り除くこと以外にできることはありません。

間接光

間接的なノイズを識別することも簡単です。ノイズの多いボリュームの GI_volume_depth を無効にする必要があります。それで、レンダリングのノイズがなくなった場合、問題は間接サンプリングになります。品質を改善する必要がある場合、volume_indirect_samples の数を大きくする必要があります。この数を大きくしてもノイズが減らない場合、光の相互作用(多重散乱、異方性のあるボリューム、ボリュームに埋め込まれた光など)を抽出するのが困難になる可能性があり、前述のようにクランピングまたはフィルタリングを使用してサンプルを取り除くこと以外にできることはありません。

ボリュームのレイ深度

volume_ray_depth を大きくすると、ボリュームの外観に大きな変化を与えることができます。ただし、ボリュームのレイ深度を大きくすると、ボリューム内の多重散乱のバウンドの数が増えるため(既定値は 0)、レンダリング時間が大幅に増加することに注意してください。

0 6

Pepe モデルの出典: Daniel M. Lara (Pepeland)