Houdini 20.5 SolarisとKarma Karmaユーザガイド

Karmaユーザガイド サンプリング

On this page

概要

サンプリングは、現代のレンダリングエンジンの中核です。 サンプリングとは、レンダリングされる画像の各ピクセルの色を決定するために、Karmaがシーンに送信する模倣された光の光線のことを指します。 この章では、Karmaがどのようにサンプリングを実行しているのかに関して詳細を説明しています。

Tip

サンプルパス光線 という用語は、一般的にパストレースについて話す時に同じ意味で使用されています。

まず最初にKarmaはカメラからサンプルを送信し、そのサンプルをシーン内のオブジェクトに当てます。 このサンプルが プライマリサンプル です。 このプライマリサンプルがオブジェクトに当たると、Karmaはそのオブジェクトのプロパティ(サーフェスの向き、マテリアルなど)を使用して セカンダリサンプル を送信します。 これらの追加の光線が他のサーフェスやライトに当たって、ピクセルの最終的な色が決定されます。

プライマリ
セカンダリ(直接)
セカンダリ(間接)

Tip

プライマリサンプル のこの挙動のことを パストレースサンプル とも呼びます。

プライマリサンプル

  • シーン内のオブジェクトに当てるピクセルとカメラ間の光線。

  • 以下によるノイズ/アーティファクトの解決に使用されます:

    • ジオメトリおよびカーブのディテール

    • ディスプレイスメント

    • 被写界深度

    • モーションブラー

セカンダリサンプル

  • プライマリサンプルが当たった位置から、シーン内の別方向に放射される光線。

  • 直接サンプル (位置からライトへの光線):

    • ライトサンプル

  • 間接サンプル (位置から位置への光線):

    • ディフューズ

    • 反射

    • 屈折

    • サブサーフェススキャタリング

    • ボリューム

オーバーサンプリング(特定の品質レベルで必要以上に光線を送信すること)やサンプリング不足(送信する光線が少なすぎて特定の品質レベルに達しないこと)は、レンダリングの低速化やノイズの原因となります。 プライマリサンプルとセカンダリサンプルの違いを理解すれば、Karmaをより効果的に使用できるようになります。

光線数の推定

プライマリサンプルとセカンダリサンプルの関係性を理解すると、レンダリング時にKarmaが使用する光線の最大数を 推定 しやすくなります。 ユーザ設定、オブジェクト単位のオーバーライド、アルゴリズムが絡むと、その正確な数を予測することは不可能です。 これらのパラメータがお互いにどのように影響を与えるのか理解することがパフォーマンス問題のデバッグに役立ちます。

Karmaが使用する光線の数は、各ピクセルに対して送信されるプライマリサンプルとセカンダリサンプルの合計数で決まります。 選択した Convergence Mode もこの推定値に影響しますが、 Pixel Oracle はプライマリサンプルの数にのみ影響します。

Automatic Convergence
Path Traced Convergence

Rays Cast per Pixel

=

[Primary Samples] + [Secondary Samples]

Secondary Samples

=

[Primary Samples] *
([Max Direct Samples] + [Max Indirect Samples])

Max Direct Samples

=

[Number of Lights Sampled] *
[Light Sample Quality] * [Max Secondary Samples]

Max Indirect Samples

=

[Max Secondary Samples] * [Diffuse Quality] +
[Max Secondary Samples] * [Reflection Quality] +
[Max Secondary Samples] * [Refraction Quality] +
[Max Secondary Samples] * [Volume Quality] +
[Max Secondary Samples] * [SSS Quality]

Rays Cast per Pixel

=

[Primary Samples] + [Secondary Samples]

Secondary Samples

=

[Primary Samples] *
([Max Direct Samples] + [Max Indirect Samples])

Max Direct Samples

=

[Number of Lights Sampled] *
[Light Sample Quality]

Max Indirect Samples

=

[1 Randomly-Chosen Indirect Sample]

オーバーサンプリング(指定した品質レベルに必要な光線数よりも多くの光線が送信されている)とアンダーサンプリング(指定した品質レベルを達成するには光線数が少なすぎる)は、レンダリング速度が低下する原因です。 プライマリサンプルとセカンダリサンプルの違いを理解することで、Karmaをより効果的に活用できるようになります。

プライマリサンプル

Karmaがカメラからシーンに送信する光線のことを プライマリサンプル と呼びます。 プライマリサンプルは、小さいジオメトリディテール(カーブやディスプレイスメントなど)、被写界深度、モーションブラーなどのアンチエイリアシングのアーティファクトを解決します。 ピクセルサンプルが十分であれば、全体の鮮明さや画像品質を向上させることができます。

Tip

プライマリサンプルは、特に他のレンダラーでは カメラレイAAサンプルピクセルサンプル などと呼ばれることもあります。

1つのピクセルサンプル。エッジがギザギザしている
複数のピクセルサンプル。スムーズな結果になる

プライマリサンプルが1つだと、粗い結果になりやすく、デバッグが目的の場合を除きお勧めできません。 ピクセルサンプルを増やすと、シーン内の形状はもっと滑らかな外観になります。 これによりセカンダリノイズでさえも品質が向上しますが、プライマリサンプルはセカンダリサンプルに対する乗数となっているため、サンプリングが過剰になってしまいます。 Karmaでのピクセルのオーバーサンプリングを防ぐには、Pixel Oracleが役に立ちます。

Pixel Oracle

Karmaは、Pixel Oracleを使用して、 適応した プライマリサンプルに対応しています。 Pixel Oracleは、Karmaが各ピクセルから光線を放射するときに使用するロジックを表現します。 現在のところ、Karmaには、 VarianceUniform の2つのPixel Oracleが同梱されています。

Note

Houdini20.5以降のKarma XPUは、 Pixel Oracle を介して、適応パストレースサンプルに対応しています。

デフォルトでは、Karmaは Variance Oracle を使用します。このVariance Oracleは、隣接ピクセル間の差異を検出します。 これによって、追加の各サンプルが最終ピクセルカラーにほとんど影響しなくなった時点でプライマリサンプルの送信を停止することで、プライマリサンプルの過剰な送信を防ぎます。 Karmaは少数のプライマリサンプルを送信し、その後、Variance OracleがピクセルとOracleの Variance Threshold の比較を開始します。 現行ピクセルと隣接ピクセルの前のサンプル間のバリアンス(差異)がその閾値内に収まると、Karmaはそのピクセルに対してプライマリサンプルの送信を停止します。

Uniform Oracle は、単純にシーン内のすべてのピクセルから同じ数のプライマリサンプルを送信します。 極端な被写界深度(DOF)やモーションブラーが画像を支配しているような時はUniform Oracleに切り替えると良いでしょう。 そのような場合だと、Karmaは結局のところすべてのピクセルを完全にサンプリングすることになるので、バリアンス測定はただオーバーヘッドを増やすだけです。

セカンダリサンプル

プライマリ光線がオブジェクトと交差すると、Karmaは各プライマリ光線が当たった場所から セカンダリサンプル を放射します。 すべてのヒット位置で、Karmaは 直接 および 間接 セカンダリサンプルを送信します。 直接 サンプルはライトに向けて送信されます。 間接サンプル は、ヒット位置でジオメトリおよびシェーダが決定した方向に向かって送信されます。 セカンダリサンプルには、ディフューズ光線、反射光線、屈折光線、サブサーフェス光線、ボリューム光線があります。

ボリュームオブジェクトは、サーフェスとは少し異なる方法で処理されます。 Karmaは、1箇所のヒット位置のみをサンプリングするのではなく、光線に沿って、ボリューム内の複数のポイントをサンプリングします。 光線に沿った各位置で、直接光線と間接光線がシーン内に送信されます。 ボリューム内のすべての位置が使用されるのではなく、サンプリングする位置のサブセットをKarmaが賢く選択します。

Convergence Mode(収束モード)

Convergence Mode (収束モード)は、Karmaがセカンダリサンプルをシーンに送信するタイミングを決定するのに使用される策略です。 Karma CPUは AutomaticPath Traced の2つの収束モードに対応しているのに対して、Karma XPUは Path Traced モードしか対応していません。 コンバージェンスモードはセカンダリレイに特に影響しますが、特にKarma CPUの場合、必要なプライマリレイサンプルの数にも影響を与える可能性があります。 Convergence Mode は特にセカンダリ光線に影響しますが、必要となるプライマリサンプルの数に影響する可能性があり、特にKarma CPUがそうです。

次の章では、特にKarma CPUとKarma XPUの収束モードについて詳しく説明します。

制限

Diffuse, Reflection, Refraction Limits: 1
Diffuse, Reflection, Refraction Limits: 3
Diffuse, Reflection, Refraction Limits: 5
Diffuse, Reflection, Refraction Limits: 11

光線が永遠と進んでしまうのを回避できるように、Karmaはタイプ毎の“バウンス”制限を備えています。 Karmaで求めるルックを得るのに十分な間接サンプルを取得できるようにするには、これらの制限を上げる必要がある場合もあります。 ガラスや液体のマテリアルを含んだシーンの品質を向上させたい場合、通常、屈折の制限を上げると効果的です。 また、ボリュームでも制限を上げた方が、ボリュームライティングの微妙な効果を捉えられるようになります。

制限を上げると、レンダリング時間が大幅に増加してしまう可能性があり、 ノイズを解消するのにはさらに多くの光線が必要になってしまいます。 目的のルックを得るのにどうしても必要な時にのみ制限を上げるように注意してください。

ライトツリー

Karmaは、ライトの多いシーンのレンダリングを効率化するために、 ライトツリー を自動的に構築します。 このライトツリーのおかげで、最もサンプリングが必要なライトやもっと早く解決できそうなライトをKarmaが効率的に判断することができます。 ライトの数が以下の数に到達すると、Karmaは自動でライトツリーを構築し、自動でそのライトツリーにライトを追加します:

Karma CPU

10個のライト

Karma XPU

2個のライト

ドームライト/ディレクショナルライト、ライトフィルターが追加されたライトなど、ライトがライトツリーに追加されない場合もあります。 Light Sampling Mode を使用すると、この挙動を変更したり、Karmaにシーン内のすべてのライトをサンプリングするよう指示することができます。 細長い矩形ライトは、ライトツリーには良くありません。 これは内部的には境界球を使ってライティングを表現しているので、このようなライトが原因でライトツリーにノイズが追加されてしまいます。

Karmaが特定のヒット位置でサンプリングするライトを決定すると、 Light Sampling Quality パラメータによって、そのライトに向けて放射される光線の数が決まります。

ローカルのサンプルオーバーライド

各レンダーデリゲートのサンプリング設定の多くは、シーン内のオブジェクト上にも設定することもできます。 ライト毎の設定とオブジェクト毎の設定は、通常ではグローバル設定の乗数です。 プロパティの説明に“scale”や“multiplies”の記載がない場合、そのプロパティは、それに呼応するグローバルプロパティをオーバーライドします。

また、レンダーデリゲートまたは収束モードが特定のサンプリングスタイル/機能に対応していなかった場合、オブジェクト毎のオーバーライドは効果がないことに注意してください。

Note

Karmaは、プライマリサンプル/パストレースサンプルに対してオブジェクト毎のオーバーライドに 対応していません

サンプリングとノイズをもっと理解したいのであれば、あなたが選定したレンダーデリゲートの次の章に進んでください。

Karmaユーザガイド

Appendices