2D スプライト シートの個々のタイルの最適なサイズは?
スプライト シートを作成しており、各スプライトに使用する最適な解像度を見つけようとしています。上下してはいけない標準サイズはありますか?
元。64px×64px、512px×512pxなど
HD品質のスプライトを取得しようとしています。Alien Hominid、Castle Crashers、または World of Goo を考えてみてください。いくつかの例もいいので、スプライト シートの例があればアップロードしてください。
これは、スプライトがレンダリングされる方法と、スプライトをレンダリングするときに何をするかによって異なります。
スプライトのスケーリングを回避する場合は、最終的にレンダリングされた解像度とできるだけ同じにすることで、品質を高く保つことができます。一般的には効果があるように見えるので、私は間違いなく 2 の累乗のテクスチャ サイズに固執します。
ただし、特に回転やスケーリングを使用して、スプライトで多くの変換を行う場合は、レンダリングする解像度よりもわずかに大きくすることをお勧めします。いつでも合成および表示されるスプライトの数と、実行するハードウェア (xbox、PC、両方) を考慮して、パフォーマンスとテクスチャ品質のバランスを取るための最適なオプションを決定する必要があります。
ただし、スプライトの数にあまり夢中にならない場合は、おそらくより高い品質を使用して、システムが必要に応じてスプライトのサイズを縮小し、良い結果を得ることができます。
これはあなたの質問に直接答えるものではないかもしれませんが、スプライト シートを使用するときに学んだことを投入したかったのです。スプライト シートが優れているのは、GPU が画面に描画するときに切り替えなければならないテクスチャが少ないほど、パフォーマンスが向上するからです。
まだお持ちでない場合は、 XNA スプライト シートの例をご覧になることをお勧めします。いくつかの大きな利点があります。
スプライトを (異なるファイルに) 1 つの大きなテクスチャに自動的にパックします。アートワークを別々のファイルに保存し、1 つの巨大なスプライト シートを自動的に生成する方が、すべてのアートを 1 つのファイルに保存するよりも優れていると考えました。
たとえば、アニメーションの途中に余分なフレームを追加したい場合はどうすればよいでしょうか? 次に、スプライト シート内のさまざまなものを移動して、新しいフレーム用のスペースを確保する必要があります。フレームごとに 1 つのファイルを使用している場合、途中で新しいフレームを追加したい場合は、スプライト シートに何が入るかをリストする XML ファイルを 1 行変更するだけです。
すべてのフレーム ファイルを個別にリストするのは面倒な場合があるため、これが機能しない人もいることは理解できますが、私のプロジェクトには最適でした。また、スプライト シートの内外でテクスチャを簡単に交換できるというメリットは、それだけの価値があることがわかりました。これは、使用するスプライトのサイズを決定するのに役立ちます。
スプライトをスケーリングするときに問題が発生しました。そのリンクは問題をかなりよく説明していると思います。いずれにせよ、このスプライト シートの例では、スプライト シートに追加する各スプライトの周りに 1 ピクセルの境界線 (元は端にあったピクセルの色を使用) が自動的に追加されます。元のサイズを使用してスプライトのみを描画するためです。近くのスプライトのピクセルや空白の代わりに、追加の境界線を補間に使用するだけです。
Reed の言うとおり、使用すべき標準のスプライト サイズは実際にはありません。それは主に、実行しているゲームの種類、実行しているスケーリングと回転の種類などによって異なります。ただし、スプライト シートを使用するときに注意する必要がある特定のサイズがあります。スプライト シートは 1 つの巨大なテクスチャにすぎませんが、GPU がメモリに保持できるテクスチャの大きさには制限があります。XBOX360 は最大 4096x4096 (と思う) のテクスチャをサポートします。Windows 用にプログラミングしている場合は、ユーザーのグラフィック カードによって異なります。私が見た限りでは、Windows では 2048x2048 に固執するのがおそらく最善です。ほとんどのグラフィック カードは、少なくとも 2048x2048 をサポートできるからです。
スプライト シートの例に関する最後の注意事項。スプライト シートの最大サイズを監視するとは思わないので、使用する場合は、生成テクスチャのサイズがサポートしたいサイズよりも大きい場合にキャッチするために、数行追加することをお勧めします。
Shawn Hargreaves は最近、テクスチャのリサンプリングとエイリアシングに関する一連のブログ投稿を行いました。4 月の投稿一覧の先頭と5 月の投稿を参照してください。ここでのキーワードは「ナイキスト周波数」 ( wikipedia ) です。
特に、テクスチャ エイリアシングに関するこの投稿をご覧ください。次のような素敵な図があります。
非常に短い答えは次のとおりです。
ソース テクスチャよりも 2 倍以上小さくレンダリングしないようにします(つまり、ソース サイズの 50% 以下)。より小さくレンダリングする必要がある場合は、mipmapsを使用してください。また、回転している場合は、下方にスケーリングするためのマージンが少なくなります。上方へのスケーリングは避けてください。
XNA で 2 のべき乗サイズのテクスチャを使用する利点はありません。ターゲット解像度でテクスチャを使用するだけで、内部で XNA に処理させることができます。
例: 1080p 解像度のゲームを作成している場合、720p に縮小すると、サイズが 66.66% に縮小されます。これは完全に許容範囲です。