レンダリング前のオブジェクトの並べ替え


10

私はシーングラフを実装しようとしています。出会ったすべての記事で、オブジェクトの並べ替えについて話しています。たとえば、オブジェクトを「マテリアル」で並べ替えます。さて、私が座ってそれを実装し始めるまで、これは当然のことと思っていました。しかし、今私はソートが実際に何を変えるのかと思っていますか?

私のエンジンには、UBOのマネージャーがいます。プログラム間で共有されるデータを保存するためにそれらを使用します。現時点では、時間、カメラ、投影行列、ライトのみが関係します(影響するライトの管理については心配していません) ATMを対象としています)。

ここで、各モデルについて、モデルをワールドマトリックスユニフォームに変更する必要があります。並べ替えによって変更されることはありません。それで、このマトリックスを変更することから、各オブジェクトのマテリアルを設定することへのジャンプは悪いのでしょうか?

パイプラインで何かを変更するたびにフラッシュする必要があり、それがパフォーマンスの問題を引き起こす可能性があることをどこかで読んだことを漠然と覚えています。しかし、描画を呼び出すたびに、とにかくモデルをワールドマトリックスに設定しているので、これについて心配することにはどのような意味がありますか?

ところで、ユニフォームを変更してglBufferSubDataを呼び出す方がコストが高い(または低い)かどうかについての情報があります。


3
簡単に言えば、そうです。マトリックスの変更から、各オブジェクトでのマテリアルの設定へのジャンプは、それほど悪いことです。この時点で、先に進む前に、プラットフォームのOpenGLパフォーマンス測定ツールについて調べるために、副業をすることをお勧めします。パフォーマンスツールを使用すると、さまざまな手法を簡単に測定し、レンダラーのニーズに最適なものを見つけることができます。さらに、これらのツールは、この1つのレンダラーである間、あなたのキャリア全体を前進させます...それほどではありません;-)
Patrick Hughes

@PatrickHughesすごい、ありがとう、間違いなくそれらをチェックするよ
dreta

回答:


4

あなたは間違いなく材料を一緒にまとめるために分類したいです。可能であれば、インスタンスを使用してジオメトリをバッチ処理することもできます(たとえば、同じオブジェクトがX個ある場合)。

深さで並べ替えることにも価値があります。透明なオブジェクトについては、前から後ろにソートする必要があります(限られた状況では、その必要性を取り除くいくつかの高度な手法は無視されます)。

また、不透明なオブジェクトを前面から背面にソートすることにも価値があります。これにより、初期Zでシーンのフラグメントシェーダーのオーバーヘッドを大幅に削減できます。


3
不透明なオブジェクトや透明なオブジェクトの順序付けは、複雑な状況では簡単ではありません(任意のルールなしでは不可能です)。gl呼び出しを減らす同じ目的でテクスチャーごとにグループ化することもできます。
Darkwings、2012年

呼び出しのバッチ処理と描画呼び出しの削減には、テクスチャによる順序付けが必要です。並べ替えは、描画呼び出しの削減とは関係ありません。並べ替えは、実際に正しいレンダリングを取得する(透明なオブジェクトの場合)か、フラグメントプロセッサのオーバーヘッドを最小限に抑える(不透明なオブジェクトの場合)必要があります。はい、「複雑」であることは問題ですが、ゲームエンジンのグラフィックスプログラマーがゲームを実際の商品のハードウェアで実際にプレイできるようにするために対処するために支払われるのはそれです。ソートされたオブジェクトとソートされていない不透明オブジェクトの間のハードウェア効率だけでも、非常に大きなものになる可能性があります。
Sean Middleditch、2012年

opengl.org/wiki/Transparency_Sortingこれが私が「任意のルール」で意味したことです。複雑なケースでは、客観的な「正しい」ソートはありません。「並べ替え」と「順序付け」について、OPは「透明度に関係なく」「材料による並べ替え」を明確に述べており、両方ともパフォーマンスへの影響を対象としているため、テクスチャについても同じことを意味しました。
Darkwings、2012年

正直に言うと、このような問題が実際のゲームで発生することは一度もありません。これらの例は、実際の動作を実際に反映していません。透明なオブジェクトのサイズはおおよそニフォームであり、かなり「ボックス」の衝突境界があり、どちらもクレイジーなオーバーラップを防ぎます。どちらの場合でも、「難しい」という事実はその必要性を変えません。もちろん、素材ごとのバッチ処理が重要であることも指摘し、「並べ替えは役に立たない」というアサーションに対抗するためのインスタンス化について言及したので、具体的な答えが間違っているかどうかはわかりません。
Sean Middleditch、2012年

見て、コメントは私があなたの答えに何か間違ったことを見つけたという意味ではなく、私は「ソートが役に立たない」とは決して言いませんでした。客観的に正しい解決策が存在しない場合があることを述べたので、明らかに、任意のルールを使用して解決策を見つける必要があります。これらは2つのまったく異なるステートメントです。
Darkwings、2012年

3

純粋に深さでオブジェクトをソートすることは、特にビニングまたはタイルレンダリングアーキテクチャで、非常に大きな価値があります。

ソリッドを前面から背面に、透明度を背面から前面に並べ替えます。

レンダリングするとき、カメラとソリッドに最も近いものが最初にレンダリングされ、同じスペースを占有する他のものはすべて、初期のZバッファーチェックによって拒否されます。

グラフィックスアーキテクチャに何らかの階層または低解像度のZバッファがある場合、何もレンダリングされない場合でも、ジオメトリがカリングされることがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.