Japanese memo of "Volumetric sort written by iq"
参照
- volumetric sort by iq
概要
- iq さんが書いた "volumetric sort" に関する記事の日本語の簡易メモです.
- αブレンドする際に限定的な条件の下では ランタイムの Z ソートをせずに, 事前にソートされた結果を視点方向に応じて選ぶことで解決できるという手法です.
- アルファブレンドする際にオブジェクトを Z ソートして, 奥から手前の順に描画することがあります.
- その際に以下の条件が満たされているとします.
- オブジェクトの位置が固定
- 2D または 3D グリッドにそれぞれ配置されている
- 下図は 2D での例です.
- 視点の向きがオレンジの場合は矢印がやや傾いているので a,b,c,d,e f,g,h,i,j, k,l,m,n,o, p,q,s,r,t という順番に描画する必要があります.
- そして, もし視点の向きが緑の矢印の場合はこれもやや傾いているので p,k,f,a, q,l,g,b, r,m,h,c, s,n,i,d, t,o,j,e という順番に描画する必要があります.
- 通常通りに描画するとしたら, 視点方向に応じてランタイムでオブジェクトを奥から手前に Z ソートしてから, ソートした結果で順に描画します.
- もちろん 視点方向が変化すると, Z ソートをし直す必要があります.
- しかし, そのランタイムの Z ソートの処理コストを省くために 視点方向に応じたパターンで事前に Z ソートしておいて, その代わりにそのパターン分のインデックスリストを持っておきます.
- そして, ランタイムではカメラの視点向きによって, 適切な 1 通りのパターンのインデックスリストを選んで描画する いうのが今回の方法です.
2D の場合
- まず最初にソートする方向の軸を (-x, +x, -y, +y) から選びます.
- 次に, 残っているもう 1 つの軸のソートする方向 (-?, +?) を選びます.
- つまり, パターンとしては下図のように 4 * 2 = 8 通りのインデックスリストがあれば OK です.
- ランタイムでは現在のカメラがグリッドを見ている向きに応じて, 8 通りのパターンの中から 適切な 1 つのパターンを選んで描画します.
3D の場合
- 2D の場合と同様の考え方で, 下図のように 6 * 4 * 2 = 48 通りのインデックスリストが必要になります.