OpenGLで複数のテクスチャを実装する最良の方法は何でしょうか?私はオンラインでいくつかの調査を行いました。これを行うためのいくつかの方法は、必要なテクスチャがたくさんあるテクスチャアトラスを作成することです。別の方法は、配列テクスチャを使用することです。ただし、最初の方法では非常に大きな画像が必要であり、2番目の方法では使用するテクスチャを示すために別の属性(おそらく?)が必要になるため、どちらも最善の方法ではないようです。CODやバトルフィールドなどのビッグゲームは、GPUに大量のテクスチャをロードするために何を使用しますか?
2 に答える
CODやバトルフィールドなどのビッグゲームは、GPUに大量のテクスチャをロードするために何を使用しますか?
それらを個々のテクスチャオブジェクトにロードし、必要に応じて切り替えます。GPUにはいくつかのテクスチャリングユニットがあり、それぞれにテクスチャをバインドできます。次に、シェーダーから、必要に応じてこれらのテクスチャにアクセスできます。
2つのテクスチャを使用してどのように行われるかについては、minimal_glslの例を参照してください。
配列テクスチャやテクスチャ アトラスを使用する理由は、主にパフォーマンスです。そして、このパフォーマンスは 1 つの方法で達成されます。つまり、必要な描画呼び出しの数を減らすことです。
したがって、とにかくオブジェクト間で状態を頻繁に変更する必要がある場合(シェーダーのマトリックスなど)、あまり意味がありません。確かに、テクスチャを変更する必要がないことは良いことですが、ドローコールが少ないほどパフォーマンスが大幅に節約されるわけではありません。
テクスチャ アトラスは、多くの場合、フォント グリフ イメージ、2D ゲーム アセット、GUI アセットなどに使用されます。つまり、たくさんの四角形を描画しているだけです。クワッドごとにテクスチャを変更したくないので、すべてのテキスト、2D スプライト、GUI 要素などを 1 回 (またはごくわずか) の描画呼び出しで描画します。確かに、クワッドごとに 1 つのドロー コールはありません。
配列テクスチャは、同じメッシュの多数のコピーを異なるテクスチャで描画する場合に適しています。などなど。