アルファ チャネルを正しくブレンドするために独自の Z バッファを作成するにはどうすればよいですか?
それは可能ではありません。順序に依存しない完全な透過性を得るには、z バッファーを取り除き、隠面を除去する別のメカニズムに置き換える必要があります。
z-buffer を使用すると、この問題に対処する方法が 2 つあります。
- 多層 Z バッファ (ハードウェア アクセラレーションでは実用的ではありません) - 基本的に、「深度」値の複数のレイヤを格納し、透明なサーフェスのブレンドに使用します。多くのメモリを占有し、透明なオーバーレイ サーフェスの最大数が発生します。制限を超えると、アーティファクトが発生します。
- 深層剥離 (Google で検索)。独立した透明度を注文しますが、ピクセルごとに「オーバーレイ」する透明なポリゴンの最大数には制限があります。実際にハードウェアに実装できます。
どちらのアプローチにも制限があります (ピクセルあたりのオーバーラップする透過ポリゴンの最大数)。制限を超えると、シーンは適切にレンダリングされなくなります。つまり、全体がかなり役に立たないということです。
(完璧な解決策を得るために)実際にできることは、zbufferを完全に削除し、レンダリングするすべてのポリゴンを収集し、クリップし、分割し(2つのポリゴンが交差する場合)、並べ替えてからペイントするグラフィックレンダリングパイプラインを作成することです正しい結果が得られるように、それらを正しい順序で画面に表示します。ただし、これは難しく、ハードウェア アクセラレーションで行うのはより困難です。5、6 年前の ATI GPU 関連の文書で、ある種の拡張機能を有効にすることで、Z バッファを無効にしたカードの一部が正しいシーンをレンダリングできると書かれていました。ただし、アルファブレンディングについては何も言われませんでした。それ以来、この機能について聞いたことがありません。おそらくそれは普及せず、TruForm の運命を共有しました (忘れられた)。