Houdini 20.0 Solaris Karmaユーザガイド

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

On this page

概要

サンプリングは、現代のレンダリングエンジンの中核です。 サンプリングとは、レンダリングされる画像の各ピクセルの色を決定するために、Karmaがシーンに送信する模倣された光の光線のことを指します。

Tip

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

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

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

Tip

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

プライマリサンプル

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

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

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

    • ディスプレイスメント

    • 被写界深度

    • モーションブラー

セカンダリサンプル

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

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

    • ライトサンプル

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

    • ディフューズ

    • 反射

    • 屈折

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

    • ボリューム

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

Convergence Ray Counts

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

Karmaが使用する光線の数は、各ピクセルに対して送信されるプライマリサンプルとセカンダリサンプルの合計数で決まります。 さらには、使用するエンジンと収束モードを知っている必要があります。

CPU - Automatic Convergence
CPU - Path Traced Convergence
XPU - Path Traced

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]

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 CPUとAutomatic Convergenceが有効になっています。 以下のことを考慮していくつかテストをしてから、どのエンジン/収束モードを使用するべきなのか検討すると良いでしょう。

エンジン

理由

Karma CPU

  • Mantraからの既存VEXシェーダ/機能にまだ依存することができます。

  • プライマリサンプリングとセカンダリサンプリングを細かく制御することができます。

  • 収束モードとPixel Oracleに対応しています。

Karma XPU

  • レンダリングにCPU/GPUを有効活用したい。

  • UsdMaterialXベースのシェーディングを使用したい。

  • ノイズを解決するのにもっと単純な手法が選べます。

Karma CPUでのサンプリング

Karma CPUは、Karma XPUと比較して、はるかに幅広くサンプリングコントロールが用意されています。 Karma CPUはPath Traced収束に対応しています(以下参照)が、プライマリ光線とセカンダリ光線の両方に対して洗練された適応サンプリング手法がデフォルトになっています。

プライマリサンプル

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

Tip

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

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

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

Pixel Oracle

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

デフォルトでは、Karmaは Variance Oracle を使用します。 これは、隣接ピクセル間の差を検出し、各追加サンプルが最終的なピクセルカラーにほとんど影響しない場合にプライマリサンプルの送信を停止することで、過剰なプライマリサンプルの送信を防ぎます。 Karmaは少数のプライマリサンプルを送信し、その後、Variance OracleがピクセルとPixel Oracleの Variance Threshold との比較を開始します。 現在のピクセルと隣接ピクセルの前のサンプル間の差が閾値内である場合、Karmaはそのピクセルのプライマリサンプルの送信を停止します。

Uniform Oracle は、シーン内のすべてのピクセルから同じ数のプライマリサンプルを送信します。 極端な被写界深度(DOF)やモーションブラーの影響が大きい画像では、Uniform Oracleに切り替えることをお勧めします。 このような場合、Karmaはすべてのピクセルを完全にサンプリングするため、差を計測してもオーバーヘッドが増加するだけだからです。

Warning

現在のところ、Karma XPUは、GPUまたはCPUデバイスに対してPixel Oracleに対応していません。 Karma XPUは、すべてのピクセルから同じ数のパストレースサンプルを放射します。

セカンダリサンプル

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

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

制限

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

制限を上げると、レンダリング時間が大幅に増加してしまう可能性があります。 目的のルック得るのに必要な分だけ制限を上げるようにしてください。

ライトツリー

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

Karma CPU

10個のライト

Karma XPU

2個のライト

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

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

Convergence(収束)モード

収束モードは、Karmaがシーンにセカンダリサンプルを送信するために使用する戦略です。 Karmaは、 AutomaticPath Traced の2つの収束モードに対応しています。 収束モードによってセカンダリ光線が決まりますが、この選択はシーンに必要なピクセルサンプルの数にも影響します。

Note

Karma CPUはAutomaticモードとPath Tracedモードの両方に対応しているのに対して、 Karma XPUはPath Traced収束のみ対応しており、Pixel Oracleには対応して いません

Automatic

デフォルトでは、Karmaは Automatic 収束モードを使用するよう設定されています。 一般的に、この設定の方が最終レンダリングが綺麗になります。 また、コントロールがより多く用意されており、レンダリング領域をオーバーサンプリングすることなくノイズを軽減することができます。

プライマリサンプルコントロール

セカンダリサンプルコントロール

  • Primary Samples

  • Pixel Oracle

  • Min/Max Secondary Samples

  • Indirect Samples Quality(ローブ毎の品質)

  • Light Sampling Quality

Karmaは、オブジェクトに当たったすべてのプライマリサンプルに対してセカンダリサンプルを放射します。 Karmaは、シェーダが生成するローブタイプ(diffusereflectionrefractionsssvolume)毎に少なくとも1本の光線を追跡します。 Karmaは、 Max Secondary Samples 値に達するまで、または、差が閾値内になるまでセカンダリ光線を送信します。

Karmaには、追加のIndirect Sample Qualityコントロールセットが用意されています。 これらを使用して、特定のローブのノイズを軽減することができます。 値は Min/Max Secondary Sample 値の乗数ですが、特定の各光線タイプにのみ適用されます。

Path Traced

Path Traced収束モードでは、 Path Traced Samples コントロールしかりません。 ここでは、Karmaが放射するプライマリサンプルの数を設定します。 見込まれる値の範囲がAutomaticモードとは異なるため、混乱しないよう、別のパラメータ名を用いています。

1個のパストレースサンプルだとエッジがギザギザです。
複数個のパストレースサンプルだと滑らかな結果になります。

プライマリサンプルコントロール

セカンダリサンプルコントロール

  • Path Traced Samples

  • Pixel Oracle (Karma CPUのみ)

  • Light Sampling Quality

このモードでは、プライマリ光線がオブジェクトに当たると、デフォルトではKarmaは 2 個のセカンダリサンプルを送信します。 1 個はライトに向けた直接サンプルで、もう 1 個はシーンに放射される間接サンプルです。 このようにシンプルであることから、初期段階ではPath Traced収束は非常に高速でインタラクティブですが、シーン内の特定のセカンダリ光線タイプからのノイズを解決できる制御はほとんどありません。 Light Sampling Quality は各ライトをサンプリングする回数を決定しますが、Karmaは Light Sampling Mode に基づいてサンプリングするライトの数を決定します。 またKarmaは、間接サンプルローブをランダムに選択します。

Note

インタラクティブなビューポートレンダリングでは、Karmaは最初の数サンプルに対してパストレーシングを行なった後、Automatic収束に切り替えます。 これにより、Solarisでのインタラクティブな操作性が向上します。

Karma XPUでのサンプリング

Karma XPUがカメラからシーンに送信するプライマリ光線のことを パストレースサンプル と呼びます。 パストレースサンプルは、小さなジオメトリの細部(カーブやディスプレイスメントなど)、被写界深度、モーションブラーからのアンチエイリアス状の乱れを解決します。 Karma XPUでは、 Path Traced Samples コントロールのみが対応しています。 これは、XPUエンジンが各ピクセルに対して送信するプライマリサンプルの数を設定します。

Tip

現在のところ、XPUは適応パストレースサンプルに対応していないので、primarysamples AOVの値は、画像内のどのピクセルにおいてもpath traced samples値と同じになります。

Primary Sample Controls

Secondary Sample Controls

  • Path Traced Samples

  • Light Sampling Quality

このモードでは、光線がオブジェクトに当たると、デフォルトではKarmaは 2本 のセカンダリサンプルを送信します: その1本目 がライトの方へ送信される直接サンプル、 もう1本目 がシーン内に送信される間接サンプルです。 この単純さによって、初めからPath Traced収束が非常に高速で双方的になりますが、シーン内の特定の二次光線タイプからのノイズを解決するためのコントロールがほとんどありません。 Light Sampling Quality は、各ライトがサンプリングされる回数を決めますが、Karmaは、 Light Sampling Mode に基づいてサンプリングするライトの数を決めます。 また、Karmaは間接サンプルローブをランダムに選択します。

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

サンプリング設定のほとんどは、シーンのオブジェクトにも設定することができます。 ライト毎およびオブジェクト毎の設定は、たいていの場合、それに呼応するグローバル設定の乗数です。 プロパティの説明に“scale”または“multiplies”と記載されていない場合、それに呼応するグローバルプロパティをオーバーライドします。

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

Note

Karmaは、Primary/Path Traced Samplesに対してオブジェクト毎のオーバーライドに対応して いません

次のステップ

Karmaでのサンプリングの仕組みを理解したら、次はレンダリングのノイズを減らすための実用的なTipsを見ていきます。

Karmaユーザガイド

リファレンス