Share via


半透明3Dにはソートが必要

WPFで3Dのユーザーインターフェイスを作成するとき、テキストの背景を透明にして表示したり、半透明の3Dオブジェクトを表示したい時があります。

半透明表示にはアルファ ブレンディングが使われますが、これは描画時にアルファ値に応じて背景の色と自分の色をブレンドします。

色 = 自分の色 × アルファ + 背景の色 × (1 - アルファ)

したがって、描画時に背景に描画されていないものは反映されません。そのため、半透明を正しく描画するにはカメラから見て奥から手前にソートし、その順序で描画する必要があります。これはDirect3DでもOpenGLでも同じです。Direct3D 10ではアルファではなく被覆値(Cover)というサブピクセル単位の処理を行ってこれを改善しようとしています。

添付したサンプルでは、Hello1, Hello2, Hello3の順に描画していますが、奥からの順序はHello3, Hello1, Hello2です。したがって、Hello2の背後にHello1は正しく透過して見えますが、Hello1の背後のHello3は(Hello1を描くときHello3はなかったので)正しく透過して見えません。

Transparent3D.xaml