1

アルファ チャネルを正しくブレンドするために独自の Z バッファを作成するにはどうすればよいですか? 私はgslを使用しています。アイデアは 1 つだけです。そして、これは 2 つの「バッファ」を使用します。そのうちの 1 つは深度コンポーネントと別の色 (アルファ チャネル付き) を格納します。プログラムでバッファにアクセスする必要はありません。glslにはユニフォーム変数の数に制限があるため、ユニフォーム配列を使用できません。フレームバッファの書き込みと読み取りの動作が定義されていないため(そしてどのカードでも動作しないため)、FBOを使用できません。

どうすればこの問題を解決できますか?!

または、glsl から実際のリアルタイム z バッファを読み取る方法は? (つまり、フラグメントシェーダー呼び出しごとに z-buffer を更新する必要があります)

4

2 に答える 2

3

アルファ チャネルを正しくブレンドするために独自の Z バッファを作成するにはどうすればよいですか?

それは可能ではありません。順序に依存しない完全な透過性を得るには、z バッファーを取り除き、隠面を除去する別のメカニズムに置き換える必要があります。

z-buffer を使用すると、この問題に対処する方法が 2 つあります。

  1. 多層 Z バッファ (ハードウェア アクセラレーションでは実用的ではありません) - 基本的に、「深度」値の複数のレイヤを格納し、透明なサーフェスのブレンドに使用します。多くのメモリを占有し、透明なオーバーレイ サーフェスの最大数が発生します。制限を超えると、アーティファクトが発生します。
  2. 深層剥離 (Google で検索)。独立した透明度を注文しますが、ピクセルごとに「オーバーレイ」する透明なポリゴンの最大数には制限があります。実際にハードウェアに実装できます。

どちらのアプローチにも制限があります (ピクセルあたりのオーバーラップする透過ポリゴンの最大数)。制限を超えると、シーンは適切にレンダリングされなくなります。つまり、全体がかなり役に立たないということです。

(完璧な解決策を得るために)実際にできることは、zbufferを完全に削除し、レンダリングするすべてのポリゴンを収集し、クリップし、分割し(2つのポリゴンが交差する場合)、並べ替えてからペイントするグラフィックレンダリングパイプラインを作成することです正しい結果が得られるように、それらを正しい順序で画面に表示します。ただし、これは難しく、ハードウェア アクセラレーションで行うのはより困難です。5、6 年前の ATI GPU 関連の文書で、ある種の拡張機能を有効にすることで、Z バッファを無効にしたカードの一部が正しいシーンをレンダリングできると書かれていました。ただし、アルファブレンディングについては何も言われませんでした。それ以来、この機能について聞いたことがありません。おそらくそれは普及せず、TruForm の運命を共有しました (忘れられた)。

于 2012-03-23T23:31:41.627 に答える
2

順序に依存しない透明度の場合、基本的な問題は、深度バッファがピクセルあたりの深度を保存することですが、部分的に透明なジオメトリのビューを作成する場合は、複数のフラグメントが各ピクセルに寄与します。

問題を確実に解決する場合は、最も近い不透明なフラグメントに戻って、ピクセルごとの深度の順序付きリストが必要になります。次に、リストを逆の順序で歩きます。実際には、OpenGLは可変サイズの配列のようなことを行わないので、人々はジオメトリを後ろから前の順序で描画することによってそれをほぼ達成します。

によって具体化される代替案GL_SAMPLE_ALPHA_TO_COVERAGEは、スクリーンドアの透明度に切り替えることです。これは、非常に高い解像度またはマルチサンプリングのいずれかで、実際の透明度と区別できません。理想的にはそれを確率的に行うでしょうが、それは再現性のOpenGLルールを無効にします。それでも、GLSLを使用しているので、自分でそれを行うことができます。サンプラーは単に入力アルファを取得し、それを最終ピクセルを出力する確率として使用します。したがって、どこかから0.0から1.0の範囲のランダムな値を取得し、それがアルファよりも大きい場合は、ピクセルを破棄します。常に1.0のアルファで出力し、通常のデプスバッファを使用します。このような回答は、GLSLでランダムな数値を取得するために何ができるかについてもう少し詳しく述べています。明らかに、マルチサンプリングを可能な限り高くしたいと考えています。

Eric Endertonは、確率的な順序に依存しない透明性について、チェックする価値のあるDirectX実装と並行して、まともな論文スライドバージョンがあります)を作成しました。

于 2012-03-23T20:40:35.993 に答える