テクスチャごとにどれだけのビデオ メモリまたはメモリ コストがかかるかを計算する方法を知りたいです。たとえば、TGA、DDS、PNG、または JPEG によるビデオ メモリのコスト。同じだ?
同じ場合、IOS で PVRTC が PNG よりもビデオ メモリのコストが低いのはなぜですか。
これが本を埋めるほど大きなトピックであることは知っています。簡単な紹介の後、誰でもこのトピックの参考文献を提供できますか。前もって感謝します。
TGA または DDS または PNG または JPEG。同じだ?
それがファイル形式です。ファイル形式は、ビデオ メモリのテクスチャ形式とはほとんど関係ありません。
TGA、PNG、および JPEG は一般的なファイル形式です。ゲームがファイルを読み取ると、ファイルが解凍され、内部表現に変換されます。これらの形式のうち、png は可逆圧縮を提供し、jpeg は非可逆圧縮を提供し、tga は通常非圧縮です。png と tga のみが透明度をサポートしていると思います。
DDS は、DirectX でサポートされているテクスチャ形式の 1 つでデータを格納するため、ある程度 DirectX 指向です。アルファ チャネルの有無にかかわらず、圧縮 (非可逆)、非圧縮の可能性があります。
私の知る限り、(少なくとも) DirectX は圧縮と非圧縮の 2 つの (タイプの) テクスチャ フォーマットをサポートしています。それに加えて、テクスチャにはミップマップがある場合とない場合があります。OpenGLはいくつかの圧縮形式をサポートするはずですが、OpenGL でそれらを使用しようとしたことがないため、よくわかりません。
width*height*pixel_size
バイトのビデオ メモリを使用します (ドライバーはさらに多くを割り当てる場合があります)。width*height*pixel_size*2
数バイトのビデオ メモリを必要とします。size*size*pixel_size*6
バイトのデータが必要です。width*height*depth*pixel_size
バイトのデータが必要です。次に、DirectX のテクスチャ フォーマットのリストを示します。DXT以外のものは圧縮されていませんが、チャネルのセットが異なり、チャネルごとのビット数も異なります。たとえば、いくつかの 16 ビット テクスチャ フォーマットがあります。DXT 形式は非可逆圧縮を提供するため、シェーダーの法線マップに適用すると、目立つアーティファクトが生成されます。データによっては、DXT 形式でテクスチャのサイズを大幅に縮小できます。形式は非可逆であるため、法線マップや、アルファ チャネルでマスクする必要がある 2D アートには適していません。
いくつかの参考文献
DirectX sdk、opengl 標準、またはプラットフォームのドキュメント (ios などの開発を行っている場合) をダウンロードして、読み始めることができます。
SigTerm の優れた回答に追加するだけです: PVRTC は、「ビデオ」メモリと保存されたファイルの両方で 4bpp または 2bpp を使用します (追加のファイル圧縮を取得するために zlib のようなものを使用しない限り)。iOS GPU は、これらの形式をネイティブに解凍する方法を知っています。 .
PNG や JPG などの形式は、ファイルのデータ サイズを縮小するのに役立ちますが、GPU からアクセスできるようにするには、たとえば 32bpp に解凍する必要があります。これらの形式では、テクスチャリングに不可欠なピクセル データへのランダム アクセスが許可されないため、これが必要になります。
FWIW、PVRTC およびその他のテクスチャ圧縮方法に関する背景情報は、次の場所にあります。