PxrVolume

PxrVolume

images/bxdfball_volume.png

PxrVolumeは、広範囲な関与媒質(participating media)のレンダリングに使用できるマテリアルです。 このスキャッタリングモデルは、異方性媒体によく使われるHenyey-Greensteinフェーズ関数を使用しますが、 等方性スキャッタリングも効率的に扱うことができます。 不均一および均一ボリュームのほか、複数のスキャッタリングエフェクトも扱います。

PxrVolumeのユーザは、均一ボリュームと不均一ボリュームの違いについて注意してください。 均一ボリュームには一定の密度およびカラーがあり、どちらの項目も単一の浮動小数点(密度の場合)または単一のカラー値で簡単に表現することができます。 不均一ボリュームには、可変密度および/またはカラーがあり、通常、これらの項目はテクスチャにより決定したり、OpenVDBのような関連するプリミティブ型変数データから決定します。 PxrVolumeは、特に均一ボリュームに対して最適化されています。 Density(密度)やDiffuse Color(ディフューズカラー)のノブに接続して使用すると、ボリュームが不均一になります。 このようなボリュームは、通常、均一ボリュームよりもレンダリングがはるかに遅くなります(ノイズも多くなります)。

PxrVolumeは、RiVolumeだけでなく、閉じた、密閉されたどのようなサーフェスにでも、特定の注意を払えば接続することができます:

  • (前述したように)均一ボリュームに対して非常にうまく作用します。
  • ビルトイン以外に3Dプリミティブ型変数が不要な場合に限り、不均一ボリュームにも問題なく作用します。 他の3Dプリミティブ型変数が、パターングラフの実行に必要な場合、RiVolumeを使用してください (サーフェスは、3Dプリミティブ型変数のソースとして使用できないため)。
  • ボリュームは、そのエンベロープが、他のボリュームなど、他のジオメトリに一致しないようにモデリングしてください。この制限は、RiVolumeに対しては、完全には適用されません:RiVolumeは、他のRiVolumeと一致する面を共有することができます。RiVolumeは、20.0の今後のパッチで、他のジオメトリに一致する面を持つことができるようにもなります。
  • カメラは任意のサーフェスの内側に配置することができません。RiVolumeの内側にのみ配置することができます。
  • 双方向パストレーシングの使用時、ライトは任意のサーフェスの内側に配置することができません。

パラメータ

Diffuse Color

ボリュームのカラー。デフォルトはホワイト(1,1,1)。 このパラメータに接続すると、不均一ボリュームが作成されます。

スキャッタリング係数、吸収係数、減衰係数に詳しいなら、ここでのディフューズカラーはscattering albedoであることに気づいてください。 これは、減衰係数で割ったスキャッタリング係数です。

images/pxrVolume/pxrVolumeDiffuseColor.png

左から右へ、赤、緑、青のdiffuseColor

Emit Color

ボリュームの放出カラー。 リン光性の霧や炎のような効果のモデリングに便利です。 デフォルトは、ブラック(0,0,0)、つまりボリュームは光を放出しません。
images/pxrVolume/pxrVolumeEmitColor.png

左から右へ、赤、緑、青のemitColor

Density Color

ボリュームの密度は、ボリュームによる光の減衰の仕方を直接制御します。 つまり、ボリュームが影を落とす方法に直接影響します。 Density Colorパラメータは、そのDensity Colorがデフォルト値から変化した場合に、そのDensity Floatを上書きします。 ボリュームからのカラーシャドウが不要な場合、そのDensity Floatパラメータを設定して、そのDensity Colorパラメータはそのままにしておいてください。 これで、ボリュームのレンダリングがより効率的になります。

このパラメータに接続すると、不均一ボリュームが作成されます。

PxrVolumeでは、その密度が減衰係数(吸収係数とスキャッタリング係数の合計)です。

images/pxrVolume/pxrVolumeDensityColor.png

左から右へ、[1 0.5 0.5], [0.5 1.0 0.5], [0.5 0.5 1.0]のdensityColor

Density Float

ボリュームの密度は、ボリュームによる光の減衰の仕方を直接制御します。 つまり、ボリュームが影を落とす方法に直接影響します。 Density Floatパラメータは、そのDensity Colorがデフォルト値から変化した場合に、そのDensity Colorによって上書きされます。 カラーシャドウが不要な場合、Density Colorパラメータではなく、このパラメータを設定するようにしてください。 これで、ボリュームのレンダリングがより効率的になります。

このパラメータに接続すると、不均一ボリュームが作成されます。

PxrVolumeでは、その密度が減衰係数(吸収係数とスキャッタリング係数の合計)です。

images/pxrVolume/pxrVolumeDensityFloat.png

左から右へ、2.0, 0.5, 0.25のdensityFloat

Anisotropy

ボリュームが光を散乱させる方向を制御します。 Anisotropyの範囲は、-1から1で、 そのデフォルトが0(等方性)です。 anisotropy0の値は、ボリュームが等方性であることを意味します。 要は、光が同じ確率で全方向に散乱します。 0より大きい値は、ボリュームが前方に散乱することを意味します。 要は、入射光が同じ方向に(つまり、入射光から離れて)散乱する機会が多くなるということです。 0未満のanisotropyの値は、ボリュームが後方に散乱することを意味します。 要は、入射光が逆方向に(つまり、入射光の方向に向かって逆に)散乱する機会が多くなるということです。

尚、等方性ボリュームのほうが、異方性ボリュームよりレンダリングが速く、ノイズが少ないです。

images/pxrVolume/pxrVolumeAnisotropy.png

左から右へ、-0.8, 0, 0.8のanisotropy。パス長を4に、multiscatterをオンの状態でVCMを使ってレンダリング

Max Density

Max Densityパラメータは、不均一ボリュームだけに使用され、ボリュームのサンプリングに使用するステップサイズを制御します。 正しくバイアスのないレンダリングを行なうために、Max Densityはボリュームの内側で遭遇するどの密度よりも大きくする必要があります。 Max Densityの値を大きくすると、ボリュームのサンプリングに要するステップ数が多くなるため、レンダリングが遅くなります。 Max Densityの値を小さくすると、レンダリング速度は上がりますが、同時に、ボリュームの高密度領域のサンプリングが不十分になるため、レンダリングが不正確になります。 Max Densityのデフォルト値は1.0です。

Multi Scatter

ボリュームが、ボリュームの内側の間接イルミネーションを計算するかどうかに関するヒントとして使用します(光がボリュームの内側で2回以上散乱するため、 multiple scatteringとも呼ばれています)。 Multi Scatterパラメータを0に設定し、インテグレータがこのヒントを考慮に入れた場合、PxrVolumeは、single scatteringのみを実行します。 つまり、ボリュームの内側のポイントは、光源により直接照らされるだけです。 1に設定すると、ボリュームの内側のポイントは、間接イルミネーションによっても照らされます。

異方性の高い高密度のボリュームの場合、光は、目に入る前にボリュームの内側で何度も散乱するケースがよくあり、マルチスキャッタリングのみが正確なルックを実現する方法になります。 また、ボリュームコースティクスのような特定の効果を正確にレンダリングする唯一の方法でもあります。 一方で、マルチスキャッタリングは非常に処理が重くなることがあるため、パラメータのデフォルトは0(オフ)になっています。 さらに、均一ボリュームのレンダリング時に、マルチスキャッタリングをオフにすると、ボリュームの背後にある直接照らされたサーフェスのノイズが少なくなります。

尚、これらのアルゴリズムの性質により、インテグレータによっては(特に、PxrVCMのような双方向パストレーサ)、ボリュームのマルチスキャッタリングを実行するしか選択肢がないため、このヒントは無視されます。

images/pxrVolume/pxrVolumeMultiScatter.png

左側: Multi Scatterをオフ。右側: Multi Scatterをオン。