これは、XNAのSpriteBatchesに関するパフォーマンスに関する質問です。 XNAで描画を開始するには、spritebatch.Begin()を使用する必要があります。これは、使用されるシェーダのように、たくさんのものを指定する方法です。スプライトによって異なるシェーダが使用される可能性があるため、問題が発生します。私はいくつかのチュートリアルを見ました。開始と終了はすべての単一オブジェクトの描画呼び出しで使用されました。私はすべてのスプライトが独自のシェーダを使用できるようにしたいので、これをしたいと思います。パフォーマンスの問題を引き起こさずにこれを行うにはどうすればよいですか?SpriteBatch.BeginおよびSpriteBatch.End
1
A
答えて
3
各スプライトに独自のシェーダを使用させる場合、おそらくそれらのシェーダの一部が同じシェーダを共有します。可能な限り最大限のパフォーマンスを得るために、それらのスプライトが同じバッチに入っていることを確認してください。
(これは、シェーダによって、あなたのオブジェクトを並べ替え、およびバッチを変更するときを検出するためにいくつかのかなり醜いか、かなり複雑なコードを必要とするかもしれません。あなたはちょうどそれと一緒に暮らす必要があります。)
SpriteBatch
の背後にある考え方はそれということです文字通りスプライトを一緒にバッチしてからGPUに送ります。 begin/endブロック内のテクスチャを変更するか、または新しいbegin/endブロックを開始するには、新しいバッチが必要です。
1フレームあたり数百回のバッチがあります。
詳細については、ゲーム開発サイトのthis answerとおそらくthis answerを参照してください。
関連する問題
- 1. SpriteBatch.Begin()/ End()を呼び出す頻度。
- 2. Spritebatch.Begin()変換行列
- 3. WPFおよびルーティングイベント
- 4. CMakeおよびCPack。
- 5. Pyopencl:to_deviceおよびバッファ
- 6. ServiceStack.TextおよびISODate( "")
- 7. CoreBluetoothおよびMFi
- 8. ウェブスクレーパーおよびハーベスター
- 9. ClientScript.RegisterForEventValidationおよび__doPostBack()
- 10. ロードおよびPHP
- 11. Box2dWebおよびImages
- 12. DefaultTraceListenerおよびスレッドセーフ
- 13. DrawerLayoutおよびマルチペインレイアウト
- 14. F#およびネームスペース
- 15. インターフェイスおよびジェネリック
- 16. ジップコードおよびゾーン
- 17. scalaxbおよびxsd:
- 18. FB.Data.queryおよびSSL
- 19. NAntおよびビルドバージョン
- 20. ItemDataBoundおよびObjectDataSource
- 21. mysqli_prepareおよびSHA1
- 22. インタフェースおよびJPA
- 23. NAntおよびSystem.Data.Entity.dll
- 24. Androidおよび色
- 25. ダイナミックアレイおよびフレキシブルアレイ
- 26. request.session.flash()および.pop_flash()
- 27. `stack`およびWindows
- 28. MyBatisおよびDBMS_OUTPUT
- 29. SendInputおよび64bits
- 30. C#およびjirasoapservice
ありがとうございますが、パフォーマンスヒットなしにフレームあたり100バッチを実行できるとお伝えしていますか? – user1152717
基本的にはyesです。バッチはフリーではありません - それぞれCPU時間を使います。バッチ制限は、CPU時間がなくなり、FPSがFPSターゲットの下に落ちて補償する前に、各フレームにどれくらいのバッチを割り当てることができるかを表現する方法に過ぎません。 「数百」はゲームの典型的な制限です。 –