0

アプリケーションの特定のニーズに基づいて独自の軽量エンジンを作成するために、一部の OpenGL ベースのアーキテクチャがオブジェクトを管理する方法について調べています (「この既存の製品を使用しないでください」という回答はご遠慮ください)。私が研究しているアーキテクチャの 1 つは Qt のクイック シーン グラフです。

彼らのドキュメントによると、不透明なプリミティブは前から後ろに並べられ、不透明でないプリミティブは後ろから前に並べられます。順序付けは、他のピクセルの背後に表示されるピクセルを処理する必要性を排除することで、初期の z キリングを行うことです。これはかなり一般的な慣行のようで、私はそれを理解しています。それは理にかなっている。

彼らのドキュメントでは、同じマテリアルを使用するアイテムをまとめてバッチ処理して、状態の変化の数を減らす方法についても説明しています。つまり、共有シェーダー プログラムを一度バインドすると、同じシェーダーを使用して複数のアイテムをレンダリングできます。これも一理あるし、納得です。

私が得られないのは、これらの 2 つの手法がどのように連携するかです。3 つの異なるマテリアル (簡単にするためにすべて不透明であるとしましょう) と、それぞれが 3 つのマテリアルの 1 つを使用する 100 のアイテムがあるとします。理論的には、マテリアルに基づいて 3 つのバッチを作成できます。しかし、100 個のアイテムがシーン内の異なる深度にある場合はどうなるでしょうか? アイテムを適切に並べ替えて前後にレンダリングできるようにするには、3 つ以上のバッチを作成する必要がありますか?

Ogre 3D などの他のエンジンについて読んだことによると、両方の手法がかなり定期的に使用されているようですが、それらがどのように一緒に使用されているかはわかりません。

4

1 に答える 1