3

私はゲームプログラミングに慣れていないので、用語が正しくない場合はご容赦ください。私はいくつかのオープン ソース プロジェクトを調べていて、いくつかのスプライトが複数のファイルに分割されていることに気付きました。これらのファイルはすべてグループ化されて、2D オブジェクトがアニメーションしているように見えます。それは簡単です。次に、2 次元オブジェクトをすべて 1 つの png ファイルまたは同様のものにまとめて、すべて隣り合わせにする別のアプローチを見ていきます。

あるアプローチを別のアプローチに使用する利点はありますか? スプライトは別のファイルにする必要がありますか? なぜそれらはすべて 1 枚のシートにあることがありますか?

4

3 に答える 3

15

前者のアプローチは通常、より単純でプログラミングが容易であるため、オープン ソース プロジェクトで多く見られます。

2 番目の方法は、最新のグラフィックス ハードウェアではより効率的です。異なる u、v 座標を指定して複合シートから個々のスプライトを選択することにより、1 つの大きなテクスチャから複数の異なるスプライトを描画できるからです。u,v 座標は頂点データと共にシェーダーにストリーミングできるため、ポリゴンごとにテクスチャを切り替える (シェーダーの状態を変更する) 必要がある場合よりもはるかに効率的にスプライトの大きなグループを描画できます。つまり、1 ミリ秒あたりにより多くのスプライトを描画できるため、より多くのスプライトを画面に表示できます。

于 2009-09-21T04:00:37.303 に答える
5

現在バインドされているテクスチャを切り替えるたびに、ペナルティが発生します (システムがメモリを使い果たし、テクスチャのページング インとページアウトを開始すると、非常に大きなペナルティが発生することがあります)。したがって、1 つのテクスチャで描画できるものが多いほど良いのです。極端に言えば、テクスチャ バインディングを一度も切り替えていなければ、ペナルティは 0 です。

一方、ビデオ カードではテクスチャの最大サイズが制限されているため、小さなテクスチャを大きなテクスチャにグループ化することしかできません。古いカードほど、使用できるテクスチャ サイズは小さくなります。したがって、ゲームを多種多様なカードで機能させたい場合は、テクスチャをより通常のサイズに制限する必要があります (または、カードごとに異なるテクスチャ セットを用意する必要があります)。

もう 1 つの問題は、仮想世界のものが、このようにグループ化されることに関連しない場合があることです。UI の小さな装飾 (ウィンドウ フレーム、ボタンなど) ごとに大きなテクスチャを使用できますが、さまざまな敵に単一のテクスチャを使用するのは難しいでしょう。そうしないと、透過性に必要な背面から前面への描画スキームが原因で、それらを次々に描画できない場合があります。

于 2009-09-21T04:07:19.393 に答える
2

少し前まで、個別のスプライトではなくパックされたスプライトを使用する理由の 1 つは、グラフィック ハードウェアが 2 のべき乗のテクスチャ (256、512、1024 など) に制限されていたことでした。したがって、スプライトをパックしないと、アップロードする前にすべてを 2 の累乗の次元に拡大する必要があるため、かなりの量のメモリが浪費されます。複数のスプライトを 1 つのテクスチャにパックすることで、これを回避しました。

もう 1 つの理由は、HD から 1 つの大きなイメージ ファイルをロードする方が、何百もの小さなイメージ ファイルをロードするよりもはるかに高速であることです。ファイルアクセスにはファイルごとにかなりのオーバーヘッドが伴うため、これは依然として当てはまります。そのため、ファイルが少ないほど処理が速くなります。特に小さなスプライトでは、100 個のファイルを 1 つのファイルに簡単に変換できるため、節約効果は非常に顕著です。

ただし、すべてを 1 つのテクスチャにまとめない理由もあります。1 つの OpenGL は 2 のべき乗テクスチャに制限されなくなったため、任意のサイズが機能します。しかし、もっと重要なことは、すべてを 1 つのテクスチャにパックすると、マイナスの副作用が生じることです。たとえば、ゲームで多くのスケーリングがある場合、スプライトの境界に注意する必要があります。これは、色が隣接するスプライトに混ざり合って醜いアーティファクトが生じるためです。スプライトの周りに余分なスペースを追加することである程度回避できますが、完全な解決策ではありません. すべてを 1 つのテクスチャにまとめると、画像でできることも制限されます。滝などの特定の効果では、テクスチャの UV 座標をオフセットするだけでアニメーションを実行したい場合がありますが、すべてが 1 つのテクスチャにパックされていると、そう簡単にはできません。

于 2009-09-22T18:18:32.287 に答える