超雑訳 Weighted Blended Order-Independent Transparency

どうも、こんちにわ。Pocolです。新年最初の投稿です。
今日は,
[McGuire 2013] Morgan McGuire, Louis Bavoil, “Weighted Blended Order-Independent Transparency”, Journal of Computer Graphics Techniques, Vol.2, No.2, 2013
を読んでみようと思います。
いつもながら、誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘して頂けるとありがたいです。


※図は,[McGuire 2013]より引用

Abstract

多くのレンダリング現象は、部分的なカバレッジでモデル化できます。炎、煙、髪、雲、適切にフィルタリングされたシルエット、屈折しないガラス、力場や魔法などの特殊効果などです。これらのレンダリングにおける課題は、複数のサーフェスによって部分的にカバーされるピクセルの値が、サーフェスの深度順序に依存することです。プリミティブやフラグメントの保存と並べ替えのコストを回避する1つのアプローチは、合成演算子を順序に依存しないように変更し、純粋なストリーミングアプローチを可能にすることです。
 我々は、ブレンドされた次数に依存しない透明性を実現するための2つの方法について説明し、それから派生した2つの新しい方法を紹介します。どちらの新しい手法も、背景を正しくカバーすることを保証し、従来の手法よりも色表現を厳密に改善します。これらは古典的なOpenGLスタイルのブレンディングと制限されたメモリしか必要としないため、モバイル機器やコンソール、その他の制約のあるレンダリング環境では、A-bufferのような方法よりも好まれるかもしれません。パーティクルシステムやヘアのような、サーフェスの順序が不連続に変化して飛び出すように知覚されることが望ましくなく、サーフェス間の遷移がソフトであることが好ましいモデルには、すべてのプラットフォームで魅力的です。

1. Partial Coverage

サーフェイスは、光の周波数に関係なく、屈折することなく光の一部を透過するとき、その境界を部分的にカバーすると言われています。このようなサーフェイスは、光を放出したり反射したりすることもあります。パーシャルカバレッジは、不透明度マップを持つ正方形としてモデル化された植物の葉のような切り抜きを持つサーフェスのモデリング、そのようなサーフェスに適用されるMIPマップや拡大フィルタ(バイリニア補間など)、窓のスクリーンやその他のほとんど知覚できないディテール、合成用のレイヤーイメージ、サーフェスの境界やストロークされた線のアンチエイリアス、髪の毛や煙のような微細な不透明構造と空の領域の両方からなるボリュームに便利です。パーシャルカバレッジだけでは、着色ガラスや屈折ガラスを正確にモデル化することはできませんが、実際にはガラスを近似するためによく使用されます。詳細な議論については、パーシャルカバレッジを定式化したPorterとDuffの代表的な著作[1984]、写真からパーシャルカバレッジを計算するSmithとBlinの手法[1996]、および多くの現象に対するブレンド手法を調査したMcGuireとEndertonの付録[2011]を参照してください。
 部分的な被覆を示すサーフェイスを、スカラーカバレッジ\(\alpha\)と、そのカバレッジで事前乗算された色\(C\)(ほとんどの用途で目に向かう放射輝度を表す)でモデル化します。値\(\alpha=1\)はサーフェスがその境界を完全にカバーすることを示し、\(\alpha=0.5\)はサーフェスがエリアの半分をカバーすることを示し、\(\alpha=0\)はサーフェスがエリアを全くカバーしないことを示します。非エミッシブサーフェスの場合、各色チャンネルの\(\lambda\)は\(C[\lambda] \leq \alpha\)となります。 エミッシブサーフェスの場合、色はカバー範囲を超えることがあります。
 別の方法としては、乗算されていないカラー\(U\)とカバレッジ\(\alpha\)をモデル化し、\(C=U\alpha\)とする方法があります。2つの理由から、乗算済みカラーを使用することをお勧めします。これにより、カバレッジが0のサーフェスでも、エミッションによってシーンに強度を与えることができます。これは、ライト (“ゴッド”) レイや可視ライトコーン、特殊効果に役立ちます。また、バイリニアおよびトライリニアフィルタリングとMIPマップ生成のための望ましいカバレッジ加重フィルタリングを与え,\(\alpha=0\)領域からカバー領域へのカラーブリーディングを回避します。
 フォーグラウドサーフェイス1によって部分的に覆われたバックグラウンドサーフェイス0の最終的な正味の結果\(C_f\)は、PorterとDuffの事前乗算被覆のOVER演算子によって与えられます.

\begin{eqnarray}
C_f = C_1 + (1 – \alpha_1) C_0 \tag{1}
\end{eqnarray}

これはグラフィックスに広く浸透しており、単に「バック-トゥ-フロント アルファブレンディング」または「コンポジット」と呼ばれることが多いです。この方法は、複数のサーフェスを合成するために、後ろから前への順序で繰り返し適用することができます:

\begin{eqnarray}
C_f = \left[ C_n + (1 – \alpha_n) \cdots \left[ C_2 + (1 – \alpha_2) [C_1 + (1 – \alpha_1) C_0] \right] \cdots \right] \tag{2}
\end{eqnarray}

 PorterとDuffは、OVER合成オペレータが、部分的に覆われた位置がサーフェス間で統計的に独立した方法で分布していると仮定していることに注意した。例えば、図2aでは、それぞれが\(\alpha\)のカバレッジを持つ、正確に整列した\(n\)個の窓スクリーンが連続していますが、これはこの仮定に反しています。この図では、OVERが予測する\(1 – (1 – \alpha)^n)\)ではなく、背景の正味のカバレッジは\(\alpha\)です。対照的に、図2bの任意にずれたスクリーンはOVERの仮定を満たしています。図2cに示すように、不透明部分が整列した有限数のレイヤーのみで、背景を100%カバーすることも可能であることに注意してください。巨視的な「不透明度」ではなく、個々の光子の相互作用や分子による被覆を考慮しなければなりませんが、ガラスや煙の体積についても同じ整列論が成り立ちます。ソートされたOVER演算子は任意のアライメントの仮定に依存しているので、OVER合成は部分的なカバレッジのためのグランドトゥルースの解ではありません。したがって、OVERの結果(例えば図1)との違いは必ずしもエラーではありません。ソートされたOVER合成と比較するのは、それが業界で認められた近似値であり、新しい解はグランドトゥルースと同様にそれからの逸脱についても評価されるからです。

※図は,[McGuire 2013]より引用

 なぜかというと,OVER演算子は可換ではないので、これを評価するには、ピクセルをレイトレースするか、ラスタライズによって深度レイヤーを連続的に「ピール」するか[Everitt 2001; Bavoil and Myers 2008]、ラスタライズのためにプリミティブを分割してから前後順にトラバースするか[Fuchs et al 1980]、フラグメントのリストを蓄積して[Carpenter 1984; Mark and Proudfoot 2001]、その後のソートと合成を行う必要があります[Carpenter 1984; Mark and Proudfoot 2001]。これらにはそれぞれ時間とメモリーのコストがかかり、場合によってはリアルタイムのレンダリングのために特別なハードウェア[Salvi et al. 2011]が必要となるケースもあります。

2. Order-Independent Transparency

明示的な順序付けなしに合成を近似するために、多くのアプローチが開発されてきました。これらは一般にorder-independent transparency(OIT)法と呼ばれています。これらの手法の異なるファミリーが利用するいくつかの重要なアイデアは以下の通りです:

  • \(\alpha\)をバイナリー・カバレッジに変換し、ピクセルごとに多くのサンプルを保存する [Young 2006; Enderton et al 2010].
  • 最も近いサーフェイスのサブセットを格納する[Jouppi and Chang 1999; Bavoil et al. 2007; Myers and Bavoil 2007; Maule et al. 2013]
  • 深度に対する密度の連続モデルを形成する[Lokovic and Veach 200; Sintorn and Assarsson 2009; Jansen and Bavoil 2010; Salvi et al. 2011]
  • 合成演算子を再定義して、その引数が変換されるようにします。これをblended order independent transparencyと呼びます。

 最初の3つのカテゴリーについては、すでに多くの研究がなされています。これらは、比較的高度なGPUを使用する場合の画質に重点を置いています。最後のカテゴリーは、代わりにシンプルさを追求しています。代用する合成オペレータは、必然的に順序付けられたOVER合成とは異なる画像を作成しますが、それと引き換えに、いくつかのアプリケーションやターゲットプラットフォームで必要とされる機能を獲得します:

  1. 特別なハードウェアは必要ありません。必要なのはrender-to-textureと従来のブレンディングだけです(これらはWebGL、モバイルGLES、および現行のすべてのコンソールでサポートされています)。
  2. 必要なメモリが少ない:使用する追加スペースが限られており、小さい(1つまたは2つのテクスチャに3~5つの追加スカラー)。
  3. サーフェス同士が交差するときに、ポッピングすることがない

SintornとAssarsson [2009] が最も先進的なGPUでも重要であると指摘した最後の機能の単純な例は挙げていません。パーティクルシステムとしてモデル化され、A-bufferを使用してレンダリングされる煙について考えてみます。A-buffer [Carpenter 1984] は、部分的なカバレッジに対して正しい結果を示します。不透明度の高い暗いパーティクルがビューアから離れて明るいパーティクルを通過すると、A-bufferを解決した後、そのパーティクルがカバーしていたピクセルの色が瞬時に暗い色から明るい色に切り替わります。理想的には、煙のモデルは煙の分子1つにつき1つのパーティクルで構成されるはずです。理想的には、煙のモデルは煙の分子1つにつき1つの粒子で構成されるはずです。しかし、実用的なモデルであれば、実際の煙よりもはるかに少ない、はるかに大きな粒子が存在します。このようなモデリングの制限のもとでは、貧弱なモデルを正確にレンダリングすることは望ましくありません。blended OIT法のいずれかによって生成されるような、時間的に首尾一貫した結果が望ましいです。滑らかな遷移は、シーンモデルの限界を忠実に露呈するよりも、意図されたシーンをよりよく近似します。細いチューブの集合としてモデル化された髪の毛や毛皮も同じ性質を持っています。なぜなら、モデルには通常、実際の頭や毛皮に見られるよりもはるかに少ない個々の毛があるからです。

3. Blended OIT

3.1. Meshkin’s Method

Meshkin [2007]は、代用合成演算子を定式化することで、blended OITを最初に導入しました。彼の2つの演算子のうち、より高品質で単純なものは「重み付き和」です。

\begin{eqnarray}
C_f = \left( \sum_{i=1}-N C_i \right) + C_0 \left( 1 – \sum_{i=1}^n \alpha_i \right) \tag{3}
\end{eqnarray}

これは、OpenGLのようなグラフィックスAPIで実装することができます:

※図は,[McGuire 2013]より引用

負の値のブレンドをサポートしないレンダーターゲットの場合、正の項と負の項を別々のパスで処理するか、\(\alpha\)値を別のパスで累積することができます。
 \(\alpha\)が小さく、すべての色が類似している場合、結果は前後方向に並べ替えられたOVER合成に近くなります。\(\alpha\)が大きい場合、背景の強度と正味のカバレッジはOVER演算子から大きく逸脱する可能性があります。図1に示すように、それらは元の表面と背景色の色域外にあることさえあります。

3.2. Bavoil and Myers’ Method

BavoilとMyers [2008]は、Meshkinの演算子を改良し、カバレージとカラーの両方をよりよく近似しました。彼らの “加重平均 “オペレータ

\begin{eqnarray}
C_f = \frac{ \sum_{i=1}^n C_i }{ \sum_{i=1}^n \alpha_i } \cdot \left( 1 – [1 – \frac{1}{n} \sum_{i=1}^n \alpha_i]^n \right) + C_0 [ 1 – \frac{1}{n} \sum_{i=1}^n \alpha_i ]^n \tag{4}
\end{eqnarray}

は,次のように実装できます:

※図は,[McGuire 2013]より引用

3.3. A New Blended OIT Method

式4の演算子は、合成されたすべての面のカバレッジ値を平均化します。これは、\(C=0\), \(\alpha=0\)のサーフェスを導入すると、完全に見えなくなるはずのサーフェスが、より高いカバレッジを持つサーフェスの色を上書きすることによって、結果の画像を変えてしまうことを意味します。我々は、背景の正確なカバレッジを計算するために前の演算子を拡張し、色の項も改善しました。新しい演算子は次の通りです。

\begin{eqnarray}
C_f = \frac{\sum_{i=1}^n C_i}{ \sum_{i=1}^n \alpha_i} \left( 1 – \prod_{i=1}^n (1 – \alpha_i) \right) + C_0 \prod_{i=1}^n (1 – \alpha_i) \tag{5}
\end{eqnarray}

次のセクションでその実装を説明します。背景の正味のカバレッジは、PorterとDuff(ただし、明示的な順序付けを必要とせずに得られる)と同じであり、SintornらとEndertonら(ただし、ジオメトリ上のシングルパスで得られ、かつ、順序付けなしで得られる)と同じです。

3.4. Depth Weights Improve Occlusion

式5の部分的なカバレッジを組み合わせたサーフェイスの色は、深度の順序のどこに表示されるかにかかわらず、常に最も高いカバレッジを持つサーフェイスが支配的です。また、異なる色と同様のカバレッジを持つ複数のサーフェスは、順序に関係なく、その平均色が得られます。暗い雲の前を白い雲が通過する場合を考えてみましょう。この場合、より白い雲に近い結果を望み、深度が交換された場合はその逆となります。
 この目標を達成するために、カメラからの距離に応じて減少する色の重みを持つ新しいブレンド方法を拡張します:

\begin{eqnarray}
C_f = \frac{ \sum_{i=1}^n C_i \cdot w (z_i, \alpha_i) }{ \sum_{i=1}^n \alpha_i \cdot w (z_i, \alpha_i) } \left( 1 – \prod_{i=1}^n (1 – \alpha_i) \right) + C_0 \prod_{i=1}^n (1 – \alpha_i) \tag{6}
\end{eqnarray}

\(z\)はカメラ空間の値で、投影の中心ではゼロで、カメラから離れるにつれて\(-\infty\)に向かって減少すると仮定します。\(w(z, \alpha)=|z|^{-k}\)や\(w(z, \alpha)= z- z_{\rm far}+ \epsilon\)のような、予想される深度範囲上の\(|z|\)の単調減少する非ゼロ関数は、より近い面に高い重みを与えます。したがって、透明なサーフェス間にオクルージョンキューが作成されます。線形カメラ空間\(z\)の代わりに、均一クリップ空間\(z\)値の関数を選択することもできます。ウェイト関数とは無関係に、バックグラウンドのネットカバレッジは正確に維持され、カラーは常に透明なサーフェスからのカラーの補間になります。透明なサーフェスを超えて補間されることはないので、結果は常に妥当なものになります。\(w(z, \alpha)=1\)を選択すると、式6が式5に戻ります。
 重み関数は、各サーフェスのオクルージョンを推定するような働きをし、サーフェスとビューアの間にある他のサーフェスが一様に分布していると仮定することで、それらのサーフェスに関する明示的な(次数に依存する)情報がなくても、サーフェスが自身の寄与を緩和することを可能にします。この推定が正しくない場合(例えば、他のサーフェスがないため)、正規化項が正味の寄与を修正します。このように、これは、Endertonら[2010]の確率的視認性推定器に匹敵する、真の視認性関数を近似するステートレスヒューリスティックです。彼らの表記に合わせるために\(v()\)と呼ぶことも考えましたが、合成時に正規化を必要とする任意のスケールであるため、このファクターを可視性ではなく重みと呼ぶことにしました。媒質の密度が均一であるという仮定のもとでは、正しい可視性のヒューリスティックは、(大気の遠近法と同様に)Beer-Lamberの法則に従った指数関数的なフォールオフです。図のように、少数の離散的なサーフェイスや煙の塊があるシーンは、密度が均一ではありません。さらに、真の指数関数の値は、カメラの近くの16ビット浮動小数点バッファで利用可能な精度をオーバーフローし、カメラから遠い精度をアンダーフローします。そこで、より遅い漸近成長を示す有理多項式の重みを推奨します。
 重み関数が\(z\)のみに依存する場合、カメラに非常に近く、順序付けられた合成中に知覚できないほどカバー率が低いサーフェイスは、遠くの不透明なサーフェイスに望ましくない色を付ける可能性があります。したがって、重み関数をカバレッジとともに減少させることをお勧めします。我々は、低カバレッジパーティクルがすでに非常に小さな色寄与を持つ、事前乗算カバレッジを使用していますが、多くの重み関数は、カメラの近くで非常に大きい。ウェイトとカバレッジの積は、ウェイトが非常に低いアルファ値で明示的に落ちない限り、まだ大きすぎる可能性があります。
 本論文の個々の結果の図には、それらのシーン用にチューニングした重み関数を示しています。また、大きな深度範囲を持つ任意のシーンに適した3つの一般的な重み関数を推奨します。我々は、\(0.1 \leq |z| \leq 500\)の16ビット浮動小数点累積バッファでうまく動作するようにこれらをチューニングしました:

\begin{eqnarray}
w(z, \alpha) &=& \alpha \cdot {\rm max} \left[10^{-2}, {\rm min} \left[3 \times 10^3, \frac{10}{10^{-5}+(|z|/5)^2+(|z|/200)^6 } \right] \right] \tag{7} \\
w(z, \alpha) &=& \alpha \cdot {\rm max} \left[10^{-2}, {\rm min} \left[3 \times 10^3, \frac{10}{10^{-5}+(|z|/10)^3 + (|z|/200)^6} \right] \right] \tag{8} \\
w(z, \alpha) &=& \alpha \cdot {\rm max} \left[10^{-2}, {\rm min} \left[3 \times 10^3, \frac{0.03}{10^{-5}+(|z|/200)^4} \right] \right] \tag{9} \\
w(z, \alpha) &=& \alpha \cdot {\rm max} \left[10^{-2}, 3 \times 10^4 \cdot (1-d(z))^3 \right] \tag{10}
\end{eqnarray}

指数はすべて繰り返し積で評価することができます。式 10 では、\(d(z)\) は OpenGL フラグメントシェーダ実行中の gl_FragCoord.z の値です。

\begin{eqnarray}
d(z) = \frac{ (z_{\rm near} z_{\rm far} / z – z_{\rm far} }{ z_{\rm near} – z_{\rm far} } \tag{11}
\end{eqnarray}

ここで\(z\)の値はカメラ空間ではすべて負です。カメラのビュー軸に平行なビルボードの一般的なケースでは、これらの重み値の高価な部分は、\(z\)に関して均一であるため、ピクセルごとに1回ではなく、頂点ステージでビルボードごとに1回計算できることに注意してください。
 これらの関数で範囲クランピングを行わないと、アンダーフローによってアルファが小さく\(|z|\)が大きい部分が過度に暗くなります。オーバーフローすると、\(|z|\)が小さいところでは無限大(ほとんどのGPUでは黒としてレンダリングされる)になります。有限の16ビット浮動小数点数の最大値は\(6.55 \times 10^4\)なので、クランプを使っても、カメラに近いレイヤーを20枚ほど重ねると飽和してしまい、コンポジット時には、リスト3に示すように、累積されたウェイトの結果をクランプする必要があります。

※図は,[McGuire 2013]より引用

 リスト3は、両方の新しいブレンド方法の実装を示しています。ここでは、”revealage”(“coverage”に対して反対) テクスチャが露呈した背景の量を追跡します。すべてのDX 11クラスGPUは、実装に必要なレンダーごとのターゲットブレンド関数をサポートしています。独立したブレンドを持たない古いデバイス(例えば、DX 9世代の一部のコンソール)の場合、リスト4は、アルファチャンネルの個別のブレンドを持つ単一のブレンド関数を指定できるように、テクスチャストレージをリファクタリングします。
 モノクロの透明サーフェス(ニュートラルライトの窓ガラス、霧、煙など)の場合、帯域幅を削減したり、複数のレンダーターゲットを許可しないプラットフォームをサポートするために、リスト4のvec4(vec2(Ci.r, ai) * w(zi, ai), 0, ai)のように、すべての値を1つのレンダーターゲットにまとめることができます。
 図1に示すように、いくつかのシーンでは、この新しい深度重み付きブレンドOITは、ソーティングを適用したOVERオペレータに極めて近いです。並べ替えを必要としないことに加え、ピクセル単位で操作でき(分割を伴わないプリミティブ並べ替え自体がすべてのケースで正しいとは言えないため)、透明なサーフェイスが互いに通過するときに滑らかに遷移するというさらなる利点があります。

※図は,[McGuire 2013]より引用

※図は,[McGuire 2013]より引用

 

 パーティクルシステムとヘアーの場合、多くのビデオゲームでは、シーンごとに複数のパーティクルシステムとヘアシステムを使用し、それぞれを独自の描画コールで送信することに注意してください。この場合、GPU上でシステム全体を粗くソートし、システムごとに1回の透過レンダリングと合成パスを作ることができます。そのパスの中で、深度ウェイト付きblended OIT は、個々のパーティクルやヘアをソートする必要性を排除します。個々のシステムの深度範囲は小さく、既知であるため、この場合、非常に効果的な深度重み付け関数を調整できます。

3.4.1. Limitations

深度の重みを使った新しい手法の近似の品質は、1回のレンダリングパスで佐文っとされた、色の異なる透明な面の密なクラスターを含む、深度の範囲が大きいシーンで最悪となります。この場合、クラスタ間だけでなくクラスタ内も識別できる深度重み関数を選択するのは困難です。しかし、この場合でも、結果は頑健で、従来のblended OIT法よりも厳密により正確です。
 深度ウェイトなしのblended OITの結果とは異なり、深度ウェイトありの結果はサーフェス順に依存しませんが、深度軸に沿った並進不変性はありません。例えば、シーン全体を異なる深度範囲に移動させると、その色が変わることがあります。これは、オブジェクトが\(z\)方向に移動すると色の遷移がゆっくりと起こるため、アプリケーションによっては許容されます。さらに、我々が説明する重み関数を用いてレンダリングした場合、結果は距離において我々のブレンド手法の結果に近づき、前景において最高のオクルージョン識別を与えます。
 どのような場合に我々の方法が満足のいく結果をもたらさないかについて、その暗黙の前提を説明します:

  • レイヤー間で部分的に覆われた場所同士は相関しない(PorterとDuffの仮定)
  • サーフェイスが同じような色をしているか、深度方向に比較的均一に分布している。
  • 色の精度は近接したサーフェイスで最も重要ですが、深度範囲全体を通して精度が重要である。

これらを「暗黙的」と呼ぶのは、導出に使用しなかったからです。

3.4.2. Upsampling

パーティクルシステムやライトレイなど、ボリュームをモデル化した透明なサーフェスでは、これらのサーフェスから独自のカバレッジを持つ低解像度の画像を計算し、それを不透明なサーフェスの画像を含むフレームバッファにアップサンプルして合成するのが一般的です[Nguyen 2007]。深度バッファをバイラテラルキーとして使用するバイリニアバイラテラルスキームやガウシアンバイラテラルスキームが一般的な選択肢です。Tatarchukら[2013]は最近、より洗練された深度分散メトリックを導入しました。
 blended OITを使用する場合、アップサンプリングの重みを適用する前にカバレッジの正規化処理を行うことが重要です。これは、リスト3の2番目のシェーダを使用して、accumTextureと revealageBufferを明示的にテクスチャに解決し、そのテクスチャをアップサンプリングして合成するか、または各値が読み込まれるときに正規化をアップサンプリングプロセスに直接統合することによって行うことができます。カバレッジの正規化がアップサンプリング後に間違って実行されると、ボ リュームのエッジが暗くなりすぎます。
 すべてのパスでアルファテストを有効にすると、ほとんどのGPUで初期深度テストと階層深度テストを無効にする代償として、必要なフィルレートを減らすことができます。

4. Examples

図1は、従来のblend OIT手法と比較して、我々の新しい手法の両方の色とカバレッジの精度が向上していることを示しています。このシーンのビルボードは、1~5シーンユニットの明確な深度範囲内にあり、遠景は約100ユニットです。これは深度重み付け関数を調整するのが簡単なケースで、これらの重みにより画像(e)はグランドトゥルース画像のオクルージョン順序に近似することができます。重み関数として\(w(z) =[|z|+5]^{-2}\)を選びました。例えば、1/2と1/3の差は1/99と1/100の差よりはるかに大きいので、2乗はより遠い値の識別に役立ちます。

※図は,[McGuire 2013]より引用

図4はSan Miguelのシーンで、透明なサーフェイスが多いです。このシーンでは、ガラスの花瓶や銀製食器、ワイングラス、窓ガラス、水、ガラスの吊りランタン、ランタンの中のガラス電球が見えます。

※図は,[McGuire 2013]より引用

 図5は、テーブルの配置のひとつをクローズアップしたもので、何層もの透明層があります(背景の窓もガラス)。図の左は、深度ウェイトのないblended OITを示しています。詳細を拡大すると、遠くのテーブルセッティングの花瓶が、近くのガラスによって十分に遮蔽されていないことがわかります。図右は、同じシーンを\(w(z) = z^{-4}\)でレンダリングしたものです。遠くのガラスが近くのガラスによってより減衰され、より強い近接の手がかりを与えているため、ディテールでは、近くのガラスの反射がより鮮明になっています。

※図は,[McGuire 2013]より引用

 図6は、色のついた煙のようなカバー率の低い粒子が密集している難しいケースにおいて、深度重み付けがどのように正しいオクルージョンの手がかりを与えるかを示しています。2つの煙は1つのパーティクルシステムからのものです。長い廊下の反対側から見ると、異なる色の結果が得られます。

※図は,[McGuire 2013]より引用

 図7の左の画像は、我々の重み付けなしアルゴリズムの失敗例を示しています。この図は、太陽光線に照らされた霧で満たされたSponzaモデルを示しています。フレームの中央付近では、霧を通して遠くの吊り鉢とアーチが誤って見えています。このアルゴリズムでは、これらのオブジェクトの100%カバレッジが正しく計算されます。しかし、これらのオブジェクトは深度バッファ内のいくつかの暗い霧粒子をブロックしているため、ブレンドされた色はそれらのシルエットの内側では外側よりも明るくなります。このため、オブジェクトの形が見えてしまいます。 右の画像は、深度重み付けをした同じビューを示しています。この場合、シルエットは見えません。

※図は,[McGuire 2013]より引用

 図8aは、同じようなシナリオがゲームプレイにどのような影響を与えるかを示しています。この画像は、プレイヤーの一人称視点で、彼の武器と、陰影のある濃い煙に覆われたもう一人のキャラクターを見たものです。このシーンは Unreal Engine 3 でレンダリングされています。ターゲットとなるキャラクターは画面中央付近にいます。シルエットがわずかに見え、この「隠された」キャラクターの位置が明らかになっていることに注意してください。このような煙の中に隠れることが戦術として意図されているゲームでは、これは明らかに受け入れられません。図8Bは、奥行き重み付けを追加することで、この問題をほぼ完全に修正できることを示しています。参考のため、図8cは、煙の粒子を奥から手前に並べ替え、堆肥化することによってレンダリングされたグランドトゥルース画像です。色調は深度重み付けブレンドの場合とは若干異なるが、シルエットは同じように隠されています。

 キャラクタシルエットの問題を解決するもう1つの方法は、透明なサーフェスのシェーディングバリエーションを減らすことです。図9 aは、濃淡の変化がほとんどない濃密な煙雲のための非加重ブレンドアルゴリズムを示している。煙のパーティクルカラーはすべて類似しているため、カラーはシルエットの内側と外側で類似しています。これにより、ウェイトを使用しないアルゴリズムは、参照OVERのback-to-front合成アルゴリズムを使用してレンダリングされた図9 bに匹敵する結果を生成できます。図10は、このシーンの別の場所を示しています。煙雲の半分の中に車両があります。右上と左下のサブフィギュアはウェイト\(w(z, \alpha) = 10/(1 + 10|z \cdot k|^5)\)でレンダリングされます。煙にはシェーディングの変化がほとんどないため、\(k\)を変更したり\(w(z, \alpha\)=1\)に設定したりすると、理想的なソートされた合成参照イメージに匹敵する結果が得られます。

※図は,[McGuire 2013]より引用

※図は,[McGuire 2013]より引用

 図11に示すように、このシーンにスモーク・セルフシャドウイングによる陰影の変化を導入することで、ブレンド関数の影響を受けやすくなります。この場合、ブレンディングの重みがない、またはブレンディングの重みが不適切に調整されていると、右の列の画像に見られるように、車のボンネットに沿ってシルエットのアーティファクトが発生します。適切に調整されたブレンドウェイトは、左下の画像に示すように、ソートされた参照画像とほぼ完全に一致させることができます。

※図は,[McGuire 2013]より引用

 図12は、透明ガラスのチェス駒の深度の複雑さが高いシーンの2つのビューを示しています。深度の重み付けにより、駒間のオクルージョンの手がかりを得ることができ、特に下の図では、個々のピクセルが3つの駒の両面から6面ものサーフェイスで覆われている可能性があります。
 

Acknowlegements

OITについて議論し、本稿の改善を提案してくれたVicarious VisionsのVisual Alchemyチームに感謝します。同様に、JCGTの匿名レビュアーの方々からも、非常に優れたフィードバックをいただき、今あなたが読んでいるヴィジョンを大きく改善することができました。Crytek Sponzaのシーンは、CrytekのFrank Meinlによってモデル化されました。San MiguelのシーンはGuillermo M. Leal Llangunoによってモデル化された。どちらのシーンも http://graphics.cs.willams.edu/data から利用可能です。

References