「スプライトバッチ処理」の技術的な定義は何ですか?


17

プラットフォームと言語は、見掛け上、スプライトのバッチ処理はどのように定義されていますか?描画するときの作業量を減らすためのさまざまな手法があり、それらはしばしば「バッチ処理」でまとめられているように見えます。本当の答えはないかもしれませんが、おそらくここにいる誰かが私が見つけていないものを見つけたのでしょう。

回答:


14

技術的には、「バッチ処理」とは、複数のアクションとそのデータを1つのデータ構造に入れて、すべてを個別にではなく一度に実行できるようにすることです。

最新のGPUの最大のボトルネックは、その処理能力ではなく、CPU上で実行されるゲームとGPU間の通信です。GPUに送信されるデータの各パッケージにはオーバーヘッドがありますが、小さなパッケージのオーバーヘッドは大きなパッケージのオーバーヘッドと同じくらい大きいため、100個の小さなパッケージではなく1つの大きなパッケージを送信する場合に大きな利益になります。そして、それがバッチ処理です。小さいパッケージすべてから1つの大きなパッケージを作成します。

スプライトごとのデータ量が途方もなく少ないため、バッチ処理はスプライトに特に役立ちます。4つの頂点と4つのtex座標。そのため、小さなパッケージのオーバーヘッドは比例して大きくなります。


1
遅延の問題について言及する場合は+1。これは、ネットワークトラフィックとディスクI / Oにも適用されるのとまったく同じ原理です。一般的な場合、非常に少数の大きなバッチが多くの小さなバッチに勝ります。
マキシマス

9

スプライトバッチ処理は、1回の描画呼び出しで複数のスプライトをGPUに送信する方法です。

他の回答のどちらも、これを行うことの本当のポイントを指摘していません:状態変化とGPUコマンド送信の最小化。それぞれ独自のテクスチャを持つ100個のスプライトを描画する場合、ハードウェアは一度に1つのスプライトしか処理できません。数十または数千のシェーダーコアはほとんど使用されておらず、GPUはテクスチャスイッチのレンダリング状態の設定に非常に多くの時間を費やしています。

すべてのスプライト画像をアトラスに配置すると、描画に必要な状態の変化を最小限に抑えることができます。ドライバーは、ハードウェアを完全に利用できるように、スプライト描画要求を単一のバッチに自動的に結合することもできますが、これは保証されていません。

スプライトアトラスを使用してから、すべてのスプライトクワッドが満たされた単一のVBOを作成し、そのデータで単一の描画要求を行うと、ハードウェアが完全に利用され、すべてのスプライトが並行してレンダリングされることが保証されます。

スプライトのバッチ処理はまさにそれを行います:単一の描画呼び出しでGPUに送信される単一のアトラスを使用して、できるだけ多くのスプライトを単一のVBOに入れ、GPUの使用を最大化します。

スプライトのバッチ処理を実行する他の方法(ハードウェアのインスタンス化、ジオメトリシェーダーの使用など)、およびその他の利点がありますが、その要点は、バッチ処理が描画呼び出しごとに複数のオブジェクトを描画することです。


-1:状態の変化を最小限に抑えることは、バッチ処理の「ポイント」ではありません。これは、OpenGLの構造に由来する要件にすぎません。(これはテクスチャアトラスのポイントですが、それらは要求されませんでした。)この質問は、「プラットフォームと言語にとらわれない」定義を具体的に要求します。
API獣

では、バックバッファにすべてを描画する方法は、最初にこの問題をどのように解決しますか?データがまだメモリ内の単一の画像に一つずつ操作し、されていないし、次にフロントバッファにプッシュ?私の理解には少し欠陥があると思います。
ブラッドヨーグスト

4
ビースト氏:OpenGLやプラットフォームや言語とは関係ありません。これは、ハードウェア自体が実際に動作する方法であり、すべてのプラットフォームおよびあらゆる言語を使用するすべてのグラフィックAPIで使用されます。
ショーンミドルディッチ

6

厳密に定義された専門用語ではありません。バッチ処理は基本的に、複数の操作を個別に行うのではなくセットとして実行するシステムです。多くの場合、これはより効率的であるため実行されます。通常、効率の向上は、操作に必要なコンテキストの一部またはすべてを再利用できることから得られます。

したがって、スプライトのバッチ処理は、複数のスプライトを一度に描画し、うまくいけばそこから効率を上げることができるシステムです。通常、利点はスプライトバッチがすべて同じテクスチャを使用しているため、テクスチャを変更せずにバッチ内のすべてのスプライトを描画できることです。これは比較的遅い操作です。

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