アルファブレンディングの調査


~ survey of alpha blending ~






■はじめに

所用で半透明合成の方法を調べていたら、結構あったので、書き出してみました。
ただ、まだまだ最近のものも出てきています、ご注意を。


■一般的な話

Compositing digital images (Thomas Porter, Tom Duff, 1984) :半透明は後ろから描きましょうと言った論文
RealityEngine Graphics(Kurt Akeley, 1993) :Alpha to Coverage の源論文。RealityEngineでは、不透明度に応じて擬似乱数で描画するサブピクセルを変えているそう。
Survey on Order Independent Transparency Techniques :手法のまとめ的論文(Per-Pixel Linked Listがないころ)
Transparency and Anti-Aliasing Techniques for Real-Time Rendering(Marilena Maule, Joao L. D. Comba, Rafael Torchelsen, Rui Bastos, 2012) :手法のまとめ的論文

■ 擬似半透明系

Sort-Independent Alpha Blending(Houman Meshkin, 2007) :順序に依存する項を落として描画。透明度が高いときに良い近似になっている。
Hair Self Shadowing and Transparency Depth Ordering Using Occupancy maps(Erik Sintorn, Ulf Assarsson, 2009) :髪のような同じ物が多く重なるときに、透明度を補正して半透明を順序非依存で近似する。
Stochastic Transparency(Eric Enderton, Erik Sintorn, Peter Shirley, David Luebke, 2010) :フラグメントごとにピクセルのサブサンプリングパターンを変えて不透明描画で擬似半透明描画を行う。
Stratified Sampling for Stochastic Transparency(Samuli Laine, Tero Karras, 2011) :stochastic transparency のノイズを削減。zテストによるカバレッジを考慮。普通のシェーダとしては実行できない。
Weighted Blended Order-Independent Transparency(Morgan McGuire, Louis Bavoil, 2013) :深度とalpha値に基づく加重平均で透明度を近似計算。[shikihuikuさん解説]

■ Depth Peeling系

Interactive Order-Independent Transparency (Cass Everitt, 2001) :Depth Peelingの源論文。まだ描画されていない深度の最奥を抽出して、深度のフラグメントを描画する。全体的に奥のほうから描画できるので、半透明を正確に計算できる。
Order Independent Transparency with Dual Depth Peeling (Louis Bavoil, Kevin Myers, 2008) :手前と奥の両面から攻めるdepth peeling。
Bucket depth peeling(Fang Liu, Meng-Cheng Huang, Xue-Hui Liu, En-Hua Wu, 2015) :8MRTで32byteの情報を出力できることを利用して、depth peeling を32倍高速化

■ 深度に応じた減衰率の作成系

Adaptive order independent transparency: A fast and practical approach to rendering transparent geometry(Marco Salvi, 2011) :ピクセルごとに距離に応じた減衰率を計算する。重なりが多くなったら、距離差分と減衰率変化の積が小さなデータを削除して、少ないメモリサイズで減衰率変化を計算。
Multi-Layer Alpha Blending(Marco Salvi, Karthik Vaidyanathan, 2014) :色、透過率、深度のリストをピクセルごとに保持。データが増えたら、遠くのデータ2つをまとめてデータ容量を一定以下に抑える。[shikihuikuさん解説]
Hybrid Transparency(Marilena Maule, João L. D. Comba, Rafael Torchelsen, Rui Bastos, 2013) :前の部分(core)と後ろの部分(tail)に分け、coreは、k-bufferで正確に描画し、tailは、Dual Depth Peelingの論文の重みつき平均で計算。

■ k-buffer系

The A-buffer, an antialiased hidden surface method(Loren Carpenter, 1984) :1ピクセル内のたくさんの情報を事前に保存しておいて、後からまとめる手法。
Z3: An economical hardware technique for high-quality antialiasing and transparency(Norman P. Jouppi, Chun-Fa Changy, 1999) :ピクセルごとにzと勾配を複数もって、サブサンプリング情報を高圧縮で格納して、同時に複数のフラグメント情報を持つ。
Hardware-assisted visibility sorting for unstructured volume rendering (Steven P. Callahan, Milan Ikits, Joao L. D. Comba, Claudio T. Silva, 2005) :k-bufferでのボリュームレンダリング
Multi-fragment effects on the gpu using the k-buffer (Louis Bavoil, Steven P. Callahan, Aaron Lefohn, João L. D. Comba, Cláudio T. Silva, 2007) :k-bufferによる半透明描画
FreePipe: A Programmable, Parallel Rendering Architecture for Efficient Multi-Fragment Effects(Fang Liu, Mengcheng Huang, Xuehui Liu, Enhua Wu, 2010) :アトミック関数を使ったピクセルごとのマルチフラグメントのソートであるmulti-depth テストと、アトミックインクリメントを使ったa-bufferで書き込みのハザードをなくした1ジオメトリパスのアルファソートのシステムを提案。
Toward Accurate and Efficient Order-Independent Transparency(Ethan Kerzner, Chris Wyman, Lee Butler, Christiaan Gribble, 2013) :シェーディングの結果を別バッファから参照することにして、A-bufferをコンパクトにした
k+-buffer: Fragment Synchronized k-buffer(Andreas A. Vasilakis, Ioannis Fudos, 2013) :ジオメトリソートなし、メモリ最大使用量あり、メモリの頻繁な読み書きなし、事前z有効な改良
Memory-Hazard-Aware K-Buffer Algorithm for Order-Independent Transparency Rendering(Zhang N, 2013) :エラー補正符号化でメモリの読み書きのハザードを減らした。

■ Per-Pixel Linked List系

Real-time concurrent linked list construction on the GPU(Jason C. Yang, Justin Hensley, Holger Grün, Nicolas Thibieroz, 2010) :OpenGL 4.0 や DirectX 11のatomic命令を使ってのper-pixel linked listの効率的な実装。[AMD資料]
Fragment-Parallel Composite and Filter (Anjul Patney, Stanley Tzeng, John D. Owens, 2010) :半透明のコンポジットの処理に関して、ピクセルごとに処理を行うのではなく、描画しうるフラグメントを密にフラグメントシェーダに流し込むことによって、GPUの利用率を上げる。
Memory-Efficient Order-Independent Transparency(Marilena Maule, Joao L. D. Comba, Rafael Torchelsen, Rui Bastos, 2012) :ベースアドレスとデータ個数の2つのバッファ(Dynamic Fragment Buffer)についてPrefix sumを使って、per-pixel linked listを高速にGPU実装した論文。
Order Independent Transparency In OpenGL 4.x (Christoph Kubisch, 2014) :手前のk個のフラグメントを保持し、ソートして描画。atomic loop を使うことで、リンクをたどるよりも高速に順序付けが可能。
Backwards Memory Allocation and Improved OIT(P. Knowles, G. Leach, F. Zambetta, 2013) :重なりを最初に計算し、Linked-listに必要なメモリをピクセルごとに計算することで、メモリ効率化を図った。

■さいごに

いやぁ、いっぱいありますね。
間違いや重要な欠落がありましたら、教えてください。





もどる

imagire@gmail.com