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

Published 12 January 07 11:56 AM | hiroyuk 

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

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

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

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

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

Comments

No Comments
Anonymous comments are disabled

About hiroyuk

マイクロソフト㈱エバンジェリスト。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)、Texturing & Modeling, A Procedural Approach などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。

Search

This Blog

DirectX 情報

Silverlight 情報

Windows 情報

WPF 情報

並列コンピューティング情報

著書

Syndication

Page view tracker