2017-10-04 17 views
2

(glBlendを使用して)半透明オブジェクトをレンダリングする場合は、オブジェクトを前から後ろにz順にソートすることをお勧めします。半透明オブジェクトレンダリングの順序

からopengl docs: アプリケーションでデプスバッファリングを使用する場合、プリミティブをレンダリングする順序に注意する必要があります。完全に不透明なプリミティブを最初にレンダリングし、続いて部分的に不透明なプリミティブを後ろから前の順序でレンダリングする必要があります。この順序でプリミティブをレンダリングしないと、部分的に不透明なプリミティブで表示されるプリミティブが深度テスト全体を完全に失うことがあります。

したがって、不透明な三角形をレンダリングした後に半透明のオブジェクトをレンダリングするときは、「表示方向」に対して前後に半透明の三角形をレンダリングすると正しくなりますか?ここまでは正確に何を意味していますか?私はmvp変換を経由するシーンオブジェクトを持っている場合、私は具体的にワールド座標とカメラセンターとの関係で順序を見る必要があるのか​​理解しようとしていますか?

さらに、この変更はブレンドタイプによって異なりますか?

+0

この[OpenGLの? - ご注文の独立の透明性を作成するための方法](https://stackoverflow.com/a/37783085/2521214)可能性がある利害あなたは。 – Spektre

答えて

2

半透明の三角形をレンダリングするときはいつでも、それらをバックツーフロントで描画する必要があります。ここでは、最初から三角形を描く必要があることを意味しています。

これが必要な理由は、ほとんどのブレンディング方程式が次数によって異なる結果になるためです。 OpenGLで実装された方程式は、通常、バックツーフロントでレンダリングするときに "正しい"結果を返すようなものです。

+0

ここで、スクリーンとの関係で何を意味するのか、もっと深く理解できますか?具体的には、カメラの中心と世界の座標の点で。そこにほとんどの説明に欠けているいくつかの詳細があります。 –

+1

定義は次のとおりです。ワールド座標系では、カメラの中心から離れたオブジェクトを最初に描画する必要があります。 – BDL

+1

@dev_nutこれは、カメラ空間(世界の空間ではない)の中ではるかに多くの顔を最初にレンダリングする必要があることを意味します。交差(半)透明ポリゴンでは、これは簡単な作業ではありません。 – Spektre

0

ブレンディング機能のためだけでなく、 が使用しているだけでなく、パイプラインの1つの重要な側面を覚えておいてください。 zテストは、パイプラインのラインを下ろす操作の前に行われます。 2つの三角形t1とt2を描画するシナリオを考えてみましょう。t1はt2の後ろにあります。

だから、もしzテストがt1に属するすべてのフラグメントを拒否すれば、t1のカラー値はカラーバッファに書き込まれません。後でt1の正面にあるt2断片が引き出されており、最後の段階でz検査が拒絶された。理想的には、t1の色はt2の色とブレンドされていましたが、t1のzテストに失敗し、zテスト後の混合操作がt2色がブレンドされないためです。

したがって、注文しない場合は、zテストを無効にしてから、適切なブレンド機能でオブジェクトを描画します。これはzテストの多くが失敗するため、パフォーマンスがあまり良くありません。

したがって、順序やポリゴンは維持されますが、このソリューションでは、ポリゴンの数が増えたり、不透明なオブジェクトと透明なオブジェクトが混在したりしてもスケールが変化しません。

したがって、順序に依存しない冗長性を使用する新しいソリューションが提案されています。 これを実装する方法はさまざまですが、オブジェクトの順序について心配する必要はありません。

私はフラグメントシェーダのピクセル単位のリンクリストを使用してソリューションを実装しました。以下のリンクを見つけることができます。これは最善の解決策ではありませんが、あなたに公正なアイデアを与えるべきです。

Order Independent Transparency

関連する問題