オブジェクトソート

3D空間を描画する仕組みについてのお話。一般的な リアルタイム3D描画プログラム(3Dエンジン)は、Zバッファ法という手法で、レンダリングを行う。その対に Zソート法があったり、Zバッファを使った描画方法の仕組みそのものは、本題ではないので省略するが。(機会があれば、そのうち。)カメラから見た深度情報に従って該当するピクセルを塗りつぶしていく Zバッファ法が苦手とするのが、半透明(やアルファ抜き)なオブジェクトの描画だ。とにかく一番手前にあるポリゴンのピクセルを塗りつぶすのだから、2番目に手前にあるポリゴンは考慮しない。つまりは、手前にあるのが半透明ならば、奥にあるのはどう描画するの?ということになる。

と、前置きはこの程度にして。半透明やアルファ抜きされたポリゴンを描画するためには、Zバッファとは違ったプログラムが必要となる。ソレが、アルファテストであったり、今回の本題オブジェクトソート。ともかく、本当に正確に半透明やアルファ抜きをリアルタイム描画するには、PCに負荷が掛かり描画速度が遅くなる。ピクセル単位、ポリゴン単位で、どの面が手前でどの面が奥でという風に前後関係を計算(ソート)する必要があるから。で、プログラマとしては半透明は使って欲しくないのだけれど、見栄え上どうしても必要だということで、まぁ正確ではないけど動作速度上影響も少ないオブジェクト単位でソートするのが落ち着きどころ。Shockwave3Dでもそう。

で、オブジェクトソートって何?という本題。何も知らずに半透明をガンガン使うと思いもせぬ悲惨なものになる恐れがある。だからこそ、デザイナーは半透明を積極的に使えるように描画のロジックを知っておく必要がある。