ネストされた誘電体(ネストされた誘電体を使用したガラスの泡)。

dielectric_priority: ガラス: 1、泡: 2 (正しい)。イメージの上にカーソルを合わせると、両方とも、物理的に正しくない値 0 (既定)で表示されます。

泡でネストされた誘電体を Arnold でレンダリングする方法を紹介するビデオ チュートリアルは、こちらにあります。

 

現実の世界では、屈折率(IOR)が異なる 2 つの誘電的な(透明な)媒体の境界に光が当たると、光は屈折して反射します。たとえば、次に示すグラスの液体では、空気、ガラス、液体、氷の間のさまざまな境界で光が屈折します。

 

dielectric_priority: ガラス: 3、氷と泡: 2、液体: 1。

イメージの上にカーソルを合わせると、dielectric_priority: 0 の場合が表示されます(物理的に正しくない)。

 

このようなシーンをレンダラで作成するには、通常、ガラスと水を、フラッシュ、交差、またはエアーギャップのある閉じたメッシュ(IOR が一定のマテリアルで塗り潰されている)としてモデル化します。また、レンダラによっては、接触面の両側に IOR をフラグ設定して、IOR が変化する各接触面を明示的にモデル化しなければならない場合があります。このようなシーンを、IOR が大きく変化する個々の接触面に手動で分割すると、非常に不便です。また、ジオメトリをフラッシュまたはエアーギャップのあるジオメトリとしてモデル化すると、さまざまなアーティファクトが生成されます。

 

したがって、Arnold (およびその他の多くのレンダラ)では、ネストされた誘電体を使用する方法が採用されています。この方法では、誘電体オブジェクトをオーバーラップさせることによって、シーンを作成します。オブジェクトがオーバーラップしている空間の領域では、マテリアルが優先順位の高いシステムを介して、オーバーラップしている誘電体の 1 つに解決されます。これにより、光線が屈折してリアルなレンダリングが行われるときの IOR の変化が正しく追跡されるようになります。

従来のモード(屈折が正しく計算されないモード)に戻す必要がある場合は、options.dielectric_priorities を使用して、誘電体の優先順位解決システム、および物理的に正しい IOR のトラッキングをグローバルに無効にすることができます(レンダリング設定の Advanced の Nested Dielectrics)。

優先順位が必要な理由

水の入ったグラスの例

これらの概念を明確にするために、グラス 1 杯の水を例に使用しましょう。この例には、4 つの透明な媒体(ガラス、水、氷、および周囲の空気)が含まれています。これらはすべて、屈折率(IOR)によって定義されます。もちろん、グラスが置かれている金属製のテーブルなど、その他の非誘電体媒体がシーンに存在することがあります。

 

誘電体媒体の境界では、IOR は通常、光線が接触面を通過するときに、1 つの値から別の値に大きく変化します。このオブジェクトをレンダリングすると、光線は各誘電体の境界で反射または透過し、各サーフェスのフレネル係数と屈折方向は、境界の両側の IOR の比率によって決まります。

では、レンダラではこの設定がどのように行われるでしょうか。まず、Arnold では使用されない方法をいくつか比較してみます。

明示的な IOR の変化 (error)

上記の方法の 1 つは、さまざまな接触面を明示的にモデル化することです。これにより、各接触面の外側と内側の両方で IOR を指定します(下図を参照)。この場合、各接触面でオブジェクトを個別のメッシュに分割したり、面に何らかの方法でタグを付けたりします。レンダラによってはこれが正しい方法ですが、ジオメトリが複雑な場合やアニメートされている場合などでは、明らかに、この方法がアーティストにとって非常に不便になることがあります。

エアーギャップまたはフラッシュのある接触面 (error)

別の方法として、IOR が適切に定義された、閉じたメッシュをモデル化し、接触またはオーバーラップしないように、メッシュ間にエアーギャップを設定することができます(以下を参照)。この方法は、接触面によってモデルを分割する方法よりも若干便利である可能性がありますが、エアー ギャップ内で相互反射が生成されるため、物理的に正確ではありません。もう 1 つの不適切な方法は、サーフェスを完全なフラッシュとしてモデル化することですが、この場合は、数値的に不正確になるという問題が生じます。

Arnold の方法 – ネストされた誘電体 (tick)

Arnold が採用してる方法は、2002 年の論説「Simple Nested Dielectrics in Ray Traced Images」(Schmidt 氏と Budge 氏の共著)に基づいていて、他の多くのレンダラでも使用されています。この方法(一般的な名称はネストされた誘電体)では、誘電体は、オーバーラップできる閉じたサーフェスとしてモデル化されます。ただし、オーバーラップしている誘電体のうちのどれが指定した領域内に存在するのかを指定するには、優先順位を割り当てる必要があります。つまり、下図のように、それぞれの誘電体媒体に整数の優先順位を割り当てて、オーバーラップする領域内に優先順位が最も高い媒体のみが存在すると見なされるようにします(空気は媒体がないものとして扱うことができるため、優先度が低いことに注意してください)。優先順位が解決されると、光はシーン内でバウンスして、存続している接触面で反射および屈折されるようになります。媒体の IOR 光線は、伝播されるのに伴い、正しく「追跡」されるようになります。

これで、物理的に正確になっただけでなく、比較的簡単に設定できるようになりました。つまり、グラス内の水プロキシ メッシュの境界が「不活性」になり、この境界を越えて実際の IOR が大きく変化することはなくなりました。Schmidt 氏と Budge 氏は、これらの境界を「疑似接触面」と呼んでいます。このような優先順位が低い疑似接触面は、ブール演算と同様に、実質的には切り離されます。これらの接触面ではシェーディングは行われず、光は相互作用しないで単に通過します。光は、切り離されていない実際の接触面でのみ反射および透過します。

誘電体の優先順位

Arnold では、誘電体媒体(ガラス、水など)は、主に transmission で指定された standard_surface シェーダを使用して作成されます。ただし、誘電体の IOR は specular_IOR パラメータで指定されることに注意してください。したがって、優先順位は必然的に standard_surface シェーダのパラメータ(dielectric_priority)になります。上記のとおり、誘電体オブジェクトがオーバーラップしている場合、優先順位の高いオブジェクトによって優先順位の低いオブジェクトがオーバーライドされます。空間の指定領域内に存続している最も優先順位が高い媒体によって、この領域内の誘電体のプロパティ(IOR とボリューム散乱のプロパティ)が指定されます。

( standard_surfacetransmission にある) dielectric_priority は、正または負の値を取ることができる整数(既定は 0)です。高い優先順位によって、低い優先順位がオーバーライドされます。 したがって、たとえば、優先順位が 2 のガラスが、優先順位が 1 の水の上にオーバーラップしている場合、オーバーラップ領域内ではガラスのみが残ります。優先順位に負の値を使用できるため、たとえば、優先順位が -1 のオブジェクトは優先順位が 0 のオブジェクトによってオーバーライドされます(負の優先順位を使用すると、既定の 0 より低い優先順位の媒体を指定できるので、便利なことがあります)。

その他のレンダラの中には、値が小さいほど、優先順位が実質的に高くなるものがあります。これは不必要な混乱を招くため、値が大きいほど優先順位が高くなり、低い値はオーバーライドされるものとします。

 

優先順位の最も基本的な効果は、内部散乱が発生する媒体を含む、このようなオーバーラップしているガラス球で見られます。

内部吸収または内部散乱が発生する媒体を含む誘電体の場合は、transmission_depth を設定する必要があることに注意してください。たとえば、後述するオレンジ ジュースの例を見てください。

優先順位が等しい誘電体がオーバーラップしている場合、内部プロパティはマージされます。つまり、IOR の平均と内部ボリューム媒体が混合されます(したがって、優先順位が等しい 2 つの同等な誘電体がオーバーラップしている場合は、実質的にマージされます)。

ネストされた誘電体 dielectric_prioritys を無効にするグローバル スイッチがあります。無効になった誘電体の優先順位は、「優先順位なし」になることがあります。この場合、サーフェスは除去されません。サーフェスが埋め込まれている可能性のある周囲の誘電体は無視されて、外側は真空として扱われます。これは、非物理モード(従来のモード)として機能します。IOR トラッキングが導入される前は、このモードではシーンの外観が保持され、トラッキングが有効な場合よりもレンダリング時間が短縮されることがありました。

dielectric_prioritys: 無効

 

ウイスキーがグラスに入っている場合は、周囲のガラスと重なるようにウイスキーのメッシュを拡張して、ガラスよりも低い優先順位をウイスキーに与えます。ガラス内のウイスキーの境界は、優先順位が低いウイスキーが存在することを示す「プロキシ」メッシュとしてのみ機能します。同様に、ウイスキーの優先順位は氷よりも低いため、氷によってウイスキーはディスプレイスメントされます。たとえば、優先順位が示されている場合、これは空間内の各ポイントで正しい IOR を定義します。

液体(1)dielectric_priority氷と泡(2)よりも小さい。ガラス(3)の優先順位が最も高い。

 

誘電体媒体を指定する

上記のとおり、優先順位の低い「疑似」接触面は切り離され、事実上、光は影響を受けることなく接触面を通過します。したがって、粗さなどのすべてのシェーディング パラメータは、実際の接触面でのみ有効になります。ただし、すべてのシェーディング パラメータが、疑似接触面で完全に無視されるわけではありません。誘電体媒体の内部を定義するシェーダ パラメータは、光線が誘電体媒体に入っても考慮されません(standard_surface シェーダによって、誘電体に「埋め込まれた」内部散乱媒体も指定できるため)。これらのパラメータは、次のとおりです。

ネストされた誘電体の内部プロパティを決定する standard_surface シェーダ パラメータは、次のとおりです。

  • specular_IOR
  • transmission_color
  • transmission_depth
  • transmission_scatter
  • transmission_scatter_anisotropy
  • transmission_dispersion

上の例の水にこれらのパラメータを設定すると、グラス内の水の接触面が疑似である場合でも、水の内部にこれらのプロパティが割り当てられます。


たとえば、グラス 1 杯のオレンジ ジュースをレンダリングする場合(下の例を参照)、ガラス メッシュとオーバーラップしている液体メッシュは優先度が低くなります。ただし、ジュースの内部「容積」におけるベールの法則の吸収がオレンジ色で表されるように指定するには、両方の transmission_color をオレンジに設定し、transmission_depth を設定する必要があります(さらにいくつかのオプションの transmission_scatter を指定します)。

オレンジ ジュース ジオメトリ(dielectric_priority: 1)に割り当てられた standard_surface に追加された transmission_scatter

transmission_depth (既定)をゼロにした場合、transmission_color はサーフェスの色調としてのみ機能します。この状況はグラスとオーバーラップしている液体の境界上で発生するため、このプロパティは無視されて、澄んだジュースが生成されます。

誘電体に内部吸収/散乱を発生させる場合(オレンジ ジュース、ワイン、ハチミツ、濁った水などの場合)は、transmission_depth がゼロ以外の値に設定してください。

ただし、粗さなどの純粋なサーフェス プロパティ(テクスチャまたは定数)は、優先順位が解決された後も存続する実際の境界に適用された場合にのみ、有効になることに注意してください。

誘電体媒体の内部プロパティをコントロールしない standard_surface シェーダのパラメータを、優先順位が低いオブジェクトの疑似接触面に適用すると、パラメータは無視されます 。たとえば、グラス 1 杯のオレンジ ジュースの transmission_depth を 0 (既定)に設定した場合、transmission_color はサーフェスの色調としてのみ機能します。この状況はグラス内のジュースの疑似境界で発生するため、ジュースの内部「容積」ではこのパラメータは無視されて、不適切な外観になります。

 

泡のレンダリング

泡(グラス内)のレンダリングを行うには、泡ジオメトリにガラスよりも高い優先度を設定し、泡の内部の IOR (例: 空気の場合は specular_IOR = 1.0)を指定します。次の例では、specular_IOR がガラスと気泡の両方に正しく設定されています(値はそれぞれ 1.5 と 1)。dielectric_priority は、ガラスの場合は 1気泡の場合は 2 に設定されています。


 

dielectric_priority: ガラス: 1、泡: 2.

ガラスや水の中の泡は非常に明るく、周囲に総内面反射(TIR)のリングが形成されるため、完全に反射します。

ガラス内の泡をレンダリングするときに、法線を反転させて泡を真空で満たすという従来の手法が機能するのは、ネストされた誘電体を使用しない場合、つまり dielectric_prioritys が無効な場合に限られます。

 

レイ深度

複雑なジオメトリでリアルな反射と屈折をレンダリングする場合は、発生する可能性のある内部反射が多数存在するため、レイ深度を大きくする必要があります。

鏡面反射/透過/合計のレイ深度が十分大きいことを確認してください。十分に大きくないと、液体/ガラスが暗くなる可能性があります。

specular_ray_depth: 1 (既定値)。イメージの上にカーソルを合わせると、5 の場合を確認できます。

specular_ray_depth の値を大きくすると、レンダリング時間が大幅に長くなる可能性があります。

  • No labels