2009-04-07 3 views
2

2Dスプライトシート内の個々のタイルに最適なサイズはどれくらいですか?ゲーム(XNA)の推奨スプライトサイズ?

私はスプライトシートを作成していますが、各スプライトにどのような解像度を使用するのが最適かを判断しようとしています。私は上や下に行くべきではない標準的なサイズはありますか?

ex。 64px x 64px、512px x 512pxなど

私はHD品質のスプライトを取得しようとしています。 Alien Hominid、Castle Crashers、Gooの世界を考える。スプライトシートの例があればアップロードしてください。

答えて

6

これは、スプライトのレンダリング方法とレンダリング時にどのようなことを行うのかによって異なります。

スプライトのスケーリングを避ける場合は、最終レンダリング解像度をできるだけ高くすることで、画質を向上させるのに役立ちます。私は間違いなく一般的に役立つように見えるので、2つのテクスチャサイズのパワーに固執します。

しかし、回転やスケーリングなどのスプライトで多くの変形を行う場合は、再サンプリングがやや高品質になる可能性があるため、レンダリングする解像度よりも少し大きくしたい場合があります。パフォーマンスとテクスチャ品質とのバランスをとるための最適なオプションを決定するために、いつどのくらいの数のスプライトが合成され、いつ表示されるのか、実行するハードウェア(xbox、pc、両方)を考慮する必要があります。

スプライトの数があまりにも狂っていないのであれば、おそらく高品質で、システムが必要に応じてサイズを縮小し、良い結果を得ることができます。

+0

テクスチャサイズに関しては標準がないと言っていますか? –

+0

いいえ - 使用方法や必要性によって異なります。理想的なスプライトのテクスチャサイズは、レンダリングの方法(および大きさ)によって異なります。 –

+0

大丈夫、分かります。だから、 "正しい"サイズはありませんか?私はちょうど周りに遊んで、私のために何が正しいかを選択する必要があります。 –

4

これはあなたの質問に直接答えることはできませんが、私はスプライトシートを使用するときに私が学んだことを捨てたいと思います。画面に描画するときにGPUが切り替える必要のあるテクスチャが少ないほど、パフォーマンスが向上するため、スプライトシートは優れています。

XNA sprite sheet exampleをまだお持ちでない場合は、こちらをご覧ください。

  • 自動的にスプライトを1つの大きなテクスチャにパックします。私は自分の作品を別々のファイルに保存し、自動的に生成された1つの巨大なスプライトシートを1つのファイルに保存するよりも優れていると思っていました。

    たとえば、アニメーションに余分なフレームを中央に配置したい場合はどうすればよいですか?その後、新しいフレームのためのスペースを作るために、スプライトシートの中にたくさんのものを置き換えなければなりません。フレームごとに1つのファイルを使用している場合、真ん中に新しいフレームを追加したい場合は、スプライトシートに入るものをXMLファイルに1行だけ変更します。

    すべてのフレームファイルを別々にリストするのは苦労かもしれませんが、なぜこれが一部の人にとってはうまくいかないのか分かりますが、私のプロジェクトにとっては素晴らしいことでした。また、私は、スプライトシートの内外でテクスチャを簡単に交換できるという利点が、それ以上の価値があることを発見しました。これは、使用するスプライトのサイズを決定する際に役立ちます。

  • スプライトをスケーリングするときは、problemに突き当たりました。私はそのリンクがこの問題をかなりうまく説明していると信じていますいずれの場合でも、このスプライトシートの例では、スプライトシートに追加する各スプライトの周りに自動的に1ピクセルの境界線(エッジにあったピクセルの色を使用)が追加されます。これはスプライトが元のサイズで描画されるためです。それは、ちょうどスプライトのピクセルまたは空白の代わりに補間のために余分なボーダーを使用します。

Reedは本当に使用するべき標準のスプライトサイズではないということは間違いありません。これは主にあなたがやっているゲームのタイプ、スケーリングのタイプと回転の種類などによって異なります。しかし、スプライトシートを使用するときに注意する必要がある特定のサイズがあります。スプライトシートは巨大なテクスチャの1つに過ぎませんが、テクスチャGPUがメモリに保持できる大きさには限界があります。 XBOX360は最大4096x4096のテクスチャをサポートします。 Windows用にプログラミングしている場合は、ユーザーのグラフィックスカードによって異なります。私が見たことから、ほとんどのグラフィックスカードが少なくともそれほど多くをサポートできるので、おそらくWindows上で2048x2048に固執するのが最善です。

スプライトシートの例の最後のメモ。私はそれが最大のスプライトシートのサイズを監視するとは思わないので、もしあなたがそれを使用するなら、生成するテクスチャのサイズがあなたがサポートしたいサイズよりも大きいときに、いくつかの行を追加したいかもしれません。

+0

ありがとう、私はその例を見て、おそらくそのルートに行くでしょう。 2048 x 2048の音が本当に高いですが、それほど大きなスプライトシートの例がありますか? –

+0

ゲーム内で異なるキャラクターのアニメーションがいくつかあったとしましょう。各スプライトが64x64で、各キャラクタが4つの異なるアニメーションを持ち、それぞれに10フレームあります。これは既に2560x64(1行にすべてがある場合)です。 32種類の文字がある場合は、シートを記入することができます。 – Venesectrix

+0

私はちょうど空気からそれらの数字を引っ張った。ゲームの大きさ、アニメーションやオブジェクトなどの数、それらのオブジェクトのサイズに大きく依存します。重要なのは、スプライトバッチで描画するときに、あまりにも多くのサイズを超える、またはテクスチャの切り替えが必要なことを気にしないことです – Venesectrix

4

Shawn Hargreavesは最近、テクスチャのリサンプリングとエイリアシングに関する一連のブログ記事を作成しました。 Aprilの投稿のリストの先頭とMayの投稿を参照してください。ここでのキーワードは「ナイキスト周波数」(wikipedia)です。

特にthis post on texture aliasingをご覧ください。非常に、非常に短い答えはこうです

http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-70-20-metablogapi/6518.image_5F00_1B896E07.png

:元のサイズの50%:あなたのソーステクスチャ(すなわちより小さくより2倍のレンダリング

避けそれは、このような素敵な図を持っていますまたはより小さい)。レンダーする必要がある場合は、ミップマップを使用してください。あなたが回転しているならば、あなたは下方に拡大縮小する余裕が少なくなります。上向きにスケーリングするのは避けてください。

XNAで2のべき乗のサイズのテクスチャを使用する利点はありません。ターゲット解像度でテクスチャを使用して、XNAにそれを処理させてください。

例:1080pの解像度のゲームを作成している場合、720pに縮小するとサイズが66.66%に縮小されますが、これは完全に受け入れられます。