Houdini 19.5 Solaris Karmaユーザガイド

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

On this page

概要

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

Tip

サンプルパス光線 という用語は、一般的にこのプロセスと同じ意味で使用されています。

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

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

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

プライマリサンプル

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

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

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

    • ディスプレイスメント

    • 被写界深度

    • モーションブラー

セカンダリサンプル

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

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

    • ライトサンプル

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

    • ディフューズ

    • 反射

    • 屈折

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

    • ボリューム

プライマリサンプルとセカンダリサンプルの関係性を理解すると、レンダリング時にKarmaが使用する光線の最大数を 推測 しやすくなります。 この関係性から、次のようなパラメータ同士の影響もわかります。

[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]

Note

Max Indirect Samplesは、 パストレース 収束では異なります:

[Max Indirect Samples] = [1 Randomly-Chosen Indirect Sample]

これらの式は、Karmaのサンプリングを推測するガイドラインにすぎません。 各ピクセルで放射される光線の正確な数は、次のような様々な要因によって変わります:

  • ライト毎またはオブジェクト毎の設定によって、サンプリングの数が乗算されたり上書きされます。

  • Pixel Oracleにより、ピクセルが放射するプライマリサンプルの数を減らすことができます。

  • バウンス制限は、間接光線を制限することができます。

Note

Karma XPUは独自のレンダリングエンジンであり、Karma CPUのプレビュー版ではないことを忘れないでください。

プライマリサンプル

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

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

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

Tip

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

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が効率的に判断することができます。 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モードとは異なるため、混乱しないよう、別のパラメータ名を用いています。

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

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

  • 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でのインタラクティブな操作性が向上します。

Local Sample Overrides

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

Note

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

次のステップ

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

Karmaユーザガイド

リファレンス