Weighted Blended Order-Independent Transparencyについて

要点だけですが。
例によって、詳しくはオリジナルを参照して下さい。

[参照]
Weighted Blended Order-Independent Transparency

3. Blended OIT

特殊なBufferやSortingを用いずに、幾つかの演算とRenderStateにあるBlendFunctionで、OITを実現する。

3.1. Meshkin’s Method

Pre-Multipliedの半透明オブジェクトの色とAlpha値を、それぞれ全て加算し、その背景となる不透明色と、最後に1度だけAlphaBlendを行う。
Alphaの値が小さく、色が似ている場合の結果は良好(SortしてAlphaBlendした場合に似てる)だが、Alphaの値が大きくなるにつれ、SortしてAlphaBlendした場合との結果の相違が顕著となる。(Eq.3)

3.2. Bavoil’s and Myer’s Method(2008)

上記 Meshkin’s Methodに“weighted average” オペレーターを導入。
(1-(Alphaの平均値))^(半透明の枚数)を、全体の透過度として計算。
半透明色は、Alphaの加重平均で計算し、算出した透過度を基に、 最後に1度だけ不透明色とAlphaBlendする。(Eq.4)

3.3. A New Blended OIT Method

上記の手法は、Alpha=0,Color=0の完全透明オブジェクトが、計算結果に寄与してしまうのが問題だった。
本手法では、(1-Alpha)の総乗を、全体の透過度として計算する。
半透明色は、上記手法と同じくAlphaの加重平均で計算し、算出した透過度を基に、最後に1度だけ不透明色とAlphaBlendする。(Eq.5)

3.4. Depth Weights Improve Occlusion

上記3.3で求められる、半透明オブジェクトのColorは、単純なAlphaによる加重平均なので、深度による順番に関わらず、Alphaの値が高いものが支配的である。
半透明色の計算に、単純なAlphaの加重平均だけではなく、深度値に基づくWeight関数を導入し、同等のAlpha値なら、視点により近いものの寄与度が高くなるように計算する。
具体的には、AlphaとWeight関数を乗じたもので加重平均をとり、半透明色とする。(Eq.6)
論文内ではWeight関数は4種類提案されている。(Eq.7,8,9.10 Fig.3参照)

考察

半透明Sortの手間を省いて、Poppingなどの目立つアーティファクトを回避できるので、有効な手段だと思います。少なくとも、算出される透過度(一番後ろにある、Opaqueの寄与度)の計算については、半透明オブジェクトのAlpha値を、不透明の確率関数的に捕らえた場合はこれで正しい結果になると思います。
半透明オブジェクトの色に関しては、本来Order DependentのものをIndependentにしているので、Approximationが含まれるのは仕方が無いと思います。
Weight関数は深度の関数となっているので、オブジェクトの位置関係が不変でも、カメラの位置が変わり、深度値が変化することで、計算結果が変化するので、静的な半透明オブジェクトの描画には不向きかもしれません。Weight関数をExponential Shadow Mappingの様に、exp()関数を用いれば、カメラとの相対的な位置の変化が起きても、一定の演算結果が得られると思われますが、本論文中では、FP16で扱いやすい範囲に重きを置いて議論されているようです。従って、ハードゥエアの性能や特性などに応じて、Weight関数に関しては考察の余地が残っているかもしれません。