0

テクスチャごとにどれだけのビデオ メモリまたはメモリ コストがかかるかを計算する方法を知りたいです。たとえば、TGA、DDS、PNG、または JPEG によるビデオ メモリのコスト。同じだ?

同じ場合、IOS で PVRTC が PNG よりもビデオ メモリのコストが低いのはなぜですか。

これが本を埋めるほど大きなトピックであることは知っています。簡単な紹介の後、誰でもこのトピックの参考文献を提供できますか。前もって感謝します。

4

2 に答える 2

2

TGA または DDS または PNG または JPEG。同じだ?

それがファイル形式です。ファイル形式は、ビデオ メモリのテクスチャ形式とはほとんど関係ありません。

TGA、PNG、および JPEG は一般的なファイル形式です。ゲームがファイルを読み取ると、ファイルが解凍され、内部表現に変換されます。これらの形式のうち、png は可逆圧縮を提供し、jpeg は非可逆圧縮を提供し、tga は通常非圧縮です。png と tga のみが透明度をサポートしていると思います。

DDS は、DirectX でサポートされているテクスチャ形式の 1 つでデータを格納するため、ある程度 DirectX 指向です。アルファ チャネルの有無にかかわらず、圧縮 (非可逆)、非圧縮の可能性があります。

私の知る限り、(少なくとも) DirectX は圧縮と非圧縮の 2 つの (タイプの) テクスチャ フォーマットをサポートしています。それに加えて、テクスチャにはミップマップがある場合とない場合があります。OpenGLはいくつかの圧縮形式をサポートするはずですが、OpenGL でそれらを使用しようとしたことがないため、よくわかりません。

  1. ミップマップのない圧縮されていない 2D テクスチャは、少なくとも 1width*height*pixel_sizeバイトのビデオ メモリを使用します (ドライバーはさらに多くを割り当てる場合があります)。
  2. ミップマップ (完全なミップマップ チェーン) を持つ圧縮されていない 2D テクスチャは、少なくともwidth*height*pixel_size*2数バイトのビデオ メモリを必要とします。
  3. ミップマップのない圧縮されていないキュービック テクスチャには、少なくともsize*size*pixel_size*6バイトのデータが必要です。
  4. ミップマップのない圧縮されていないボリューム テクスチャには、少なくともwidth*height*depth*pixel_sizeバイトのデータが必要です。
  5. 圧縮されたテクスチャは、非圧縮よりもバイト数が少なくなりますが、正確なバイト数を予測することは困難です。

次に、DirectX のテクスチャ フォーマットのリストを示しますDXT以外のものは圧縮されていませんが、チャネルのセットが異なり、チャネルごとのビット数も異なります。たとえば、いくつかの 16 ビット テクスチャ フォーマットがあります。DXT 形式は非可逆圧縮を提供するため、シェーダーの法線マップに適用すると、目立つアーティファクトが生成されます。データによっては、DXT 形式でテクスチャのサイズを大幅に縮小できます。形式は非可逆であるため、法線マップや、アルファ チャネルでマスクする必要がある 2D アートには適していません。

いくつかの参考文献

DirectX sdk、opengl 標準、またはプラットフォームのドキュメント (ios などの開発を行っている場合) をダウンロードして、読み始めることができます。

于 2013-10-29T07:10:39.967 に答える
1

SigTerm の優れた回答に追加するだけです: PVRTC は、「ビデオ」メモリと保存されたファイルの両方で 4bpp または 2bpp を使用します (追加のファイル圧縮を取得するために zlib のようなものを使用しない限り)。iOS GPU は、これらの形式をネイティブに解凍する方法を知っています。 .

PNG や JPG などの形式は、ファイルのデータ サイズを縮小するのに役立ちますが、GPU からアクセスできるようにするには、たとえば 32bpp に解凍する必要があります。これらの形式では、テクスチャリングに不可欠なピクセル データへのランダム アクセスが許可されないため、これが必要になります。

FWIW、PVRTC およびその他のテクスチャ圧縮方法に関する背景情報は、次の場所にあります

于 2013-10-29T14:57:14.813 に答える