Easy3D関連ネタ/半透明同士の描画について

Last-modified: 2010-02-18 (木) 04:02:10

公式BBSより No.8165

描画順の制御について

半透明同士の描画は、カメラからの距離の遠い方から順番に描画しないとうまくいかないが、
それをすると遅くなるのでEasy3Dでは制御していない

したがって、Easy3Dで完全に正しい半透明同士の描画をすることはほぼ不可能とのこと。
(可能な範囲ならば自分で、描画順を制御するしかなさそう?)

パーティクルとビルボードの描画順について

パーティクルは、Zバッファを使わない描画法をとっており、
ビルボードは、自動的に遠いものから描画していく。
したがって、パーティクル同士・ビルボード同士の半透明はうまく描画される
が、ビルボードの透過の後ろにパーティクルを表示すると上手くいかない。
※E3Dのビルボードのアルファテストがオンになった(後述)ことで、現在は可能になったと思われる。

パーティクルの表示について

半透明で隠れてしまうパーティクルを表示したい場合は、
E3DCreateParticleのcmpalwaysフラグに1をセットする方法もある。
(Zバッファの大小に関わらず、常にパーティクルを表示するようになる)
本来隠れるところまで見えてしまうことになるが特殊効果などになら使える。

アルファテストについて

アルファテストとはアルファの小さい部分の描画とZバッファのセットを行わないようにするための機能*1
描画順序が正しくても、アルファテストがオフになっていると透けて見えないことがある
逆にアルファテストがオフになっていることを利用することで、半透明の後ろを見えなくする技術もある
例:GENKIさんの魔方陣、ORZさんの半透明スプライト描画
ビルボードのアルファテストをオンにするには、
E3DSetBlendingModeで1か103から108までのモードをセットする。

sigモデル vs 半透明表示なら

E3DSetMaterialAlphaTest hsid, -1, 1, 8, 1, 8
とかしておくと、割と普通に表示される(ただし、エッジ部分はどうしても消えてしまうらしい)

現在の対応に付いて

今までは、Easy3Dでは、アルファテストオフがデフォルトだったが、普通は、アルファテストがオンになっているのがデフォルトであることが多い。だから、ビルボードだけデフォルトでアルファテストをオンにしていくとのこと。
<2010.2.18追記>
現在は、sigモデルなどに関してもアルファテストをオンにしてあるようだ。
魔方陣などの半透明テクニックを使っている人は、要注意。

 
 
 
 

*1 アルファテストをオンにすることで、アルファ抜きしてあるところは、「完全に描画しない・Zバッファにも情報を残さない」ことで描画順の違いによる背景透過の間違いをなくすことが可能になるのだと思う。