0

夕方/午後;

私自身の個人的な使用のために、小さなカスタム 2D XNA エンジンを作成することに取り組んでいます。2D スプライトの描画方法を決定するとき、私は困惑しています。

まず、ある時点で、いくつかのカスタム シェーダー効果を実装したいと考えています。私がインターネットで読んだすべてのチュートリアルでは、SpriteSortMode.Immediateを使用する必要があると述べていましたが、XNA 4.0 では不要になったと述べたものを除きます。

さらに、シェーディング効果に関係なく、どの SpriteSortMode が私のアプローチで最速かはわかりません。さまざまなスプライトの順序付け/レイヤー化は間違いなく必要です (つまり、ゲーム スプライトの前に HUD を配置し、ゲーム スプライトを背景の前に配置するなど)。しかし、カスタムのソート済みリストを実装して Draw() を順番に呼び出すか、BackToFront / FrontToBackオプションを使用する方が速いでしょうか?

前もって感謝します。

4

1 に答える 1

1

XNA 4.0 以降では、任意のスプライト ソート モードでカスタム シェーダー効果を使用できます。XNA 3.1 の即時スプライト ソート モードはかなり壊れていました。( http://blogs.msdn.com/b/shawnhar/archive/2010/04/05/spritesortmode-immediate-in-xna-game-studio-4-0.aspxを参照)

並べ替えに関しては、透明なスプライトの場合は前後に並べ替え、不透明なスプライトの場合は前後に並べ替えます。http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspxを参照してください
(少なくとも 2D エンジンの場合) テクスチャの並べ替えである、もう 1 つの興味深いモードがあります。テクスチャが必要なドローコールをソートするモードで、状態の変化を減らします。これは、メイン ゲームのスプライトにとって大きなパフォーマンスの向上になる可能性があります。

また、プロファイラーが別のことを言うまでは、パフォーマンスについてあまり心配しません。SpriteBatch は非常に多くのバッチ処理を行い (そうです、本当に)、状態変更の数を最小限に抑えるため、これが最大のパフォーマンスの向上になります。

パフォーマンスを改善するために私が考えることができる唯一の他の方法は、インスタンス化を使用することですが、XNA ではそれは悪い考えかもしれないと思います (理想的には、少なくとも SM3.0 ハードウェアとカスタム頂点シェーダーが必要です。私はそうではありません)。それが SpriteBatch クラスでどのように機能するかを確認してください)。

于 2012-05-27T00:20:59.170 に答える