回答:
JPGファイルとPNGファイルは、ほとんどの場合、ディスク上のメモリよりも小さくなります。これらは、生のRGBデータを取得するためにオンザフライで解凍する必要があるため、ロードのためにより多くの処理能力と、その後により多くのRAMを必要とします。多くの最新のエンジンは、メモリと同じフォーマットをディスクに保存することを選択しているため、テクスチャのメモリ要件と同じサイズのファイルになります(ただし、PNGまたはJPGよりも大きい)。RGB / RGBAおよびS3TC / DXTn / BCnは、何も処理せずにメモリに直接読み込まれるため、最も広く使用されている形式です(DXTテクスチャは事前圧縮されています)。
したがって、これらはさまざまな一般的なテクスチャフォーマットのサイズです。
ミップマップで画像を使用する場合、テクスチャには4/3のメモリが必要になります。さらに、テクスチャの幅と高さは内部で切り上げられ、古いまたは機能の少ないハードウェアでは2の累乗になる場合があります。
DXTに関する詳細情報:非可逆圧縮です。つまり、テクスチャを圧縮すると、一部のカラーデータが失われます。これはテクスチャに悪影響を及ぼし、鋭い境界をゆがめ、グラデーションに「ブロック」を作成します。しかし、メリットはデメリットよりもはるかに優れています(DXTでひどく悪いテクスチャを使用している場合は、圧縮しないでください。他のテクスチャがサイズの損失を補います)。また、ピクセルは固定サイズのブロックによって圧縮されるため、テクスチャの幅と高さは4の倍数でなければなりません。
明らかに:それはフォーマットに依存します。
256 x 256ピクセルの正方形のテクスチャを見てみましょう。圧縮されていない32ビットのアルファチャネル(Color
XNAの場合)の場合、256KB(256*256*4
バイト)かかります。
16ビット形式(例:)Bgr565
は明らかにサイズの半分-128KBになります。
次に、圧縮形式に移行します。XNAには、DXT1、DXT3、およびDXT5(別名S3圧縮)があります。これは非可逆圧縮形式です。これは、ブロックベースのフォーマットでもあります。つまり、そこからサンプリングできます(ピクセルが含まれているブロックがわかっているため)。また、使用する帯域幅が少ないため、速度も向上します。
DXT1の圧縮比は8:1で、DXT3とDXT5の圧縮比は4:1です。
したがって、256x256のDXT1イメージは32KBです。また、DXT3またはDXT5は64KBです。
そして、ミップマッピングがあります。これが有効になっている場合、これにより、以前の半分のサイズのグラフィックスメモリに一連の画像が作成されます。したがって、256x256イメージの場合:128x128、64x64、32x32、16x16、8x8、4x4、2x2、1x1。ミップマッピングのあるテクスチャは、元のサイズの約133%です。
ほとんどのGPUは特定の圧縮形式のみを読み取ることができます。例えば。BC *、DXT *、pngなどの形式ではありません。そのため、はい、ほとんどの場合、.pngはディスク上よりもビデオメモリ内で多くのスペースを使用します。
テクスチャは、ビデオメモリとシステムメモリの両方に圧縮または非圧縮で保存できます。
非圧縮テクスチャの場合、一般的な経験則では、システムメモリの非圧縮形式と同じ量のビデオメモリ領域が使用されます。
DXT1圧縮テクスチャ用。GPUは、テクスチャの4x4タイルごとに8バイトを格納します。非圧縮データ(RGBチャネルごとに8ビット)は通常4x4x3 = 48バイトなので、圧縮率は6:1になります。DXT3 / DXT5圧縮テクスチャの場合、GPUはテクスチャの4x4タイルごとに16バイトを格納します。これは、わずかに低い圧縮率3:1です。
非圧縮テクスチャと圧縮テクスチャの両方に関するいくつかの警告があります。
ほとんどのメモリは、固定サイズのページ(GPU間でサイズが異なる)で割り当てられます。例えば。4KB。多くの場合、サブアロケーションされておらず、他のgpuデータと共有されていません。つまり。テクスチャフットプリントがページサイズよりも小さい場合でも、vid memのフットプリントはページサイズのままであることがよくあります。
一部のgpusには、非常に具体的な配置要件があります。これまで、一部のGPUでは、テクスチャのサイズが2の累乗である必要がありました。これは、テクスチャからサンプリングするときのアクセスの局所性を改善するために、スウィズル表現(Morton Ordering:http : //en.wikipedia.org/wiki/Z-order_ (curve )を参照)をサポートするためにしばしば必要でした。つまり、これらの要件を維持するために、奇数サイズのテクスチャにパディングが行われます(通常、このパディングはドライバーによって処理されます)。現代のgpusではモートンオーダーを使用する必要はありませんが、gpuの特定の要件をサポートするために肥大化している可能性があります。
特に破棄ロックを使用している場合は、テクスチャの複数の表現がいつでもメモリに存在する可能性があります。これは、表現がgpuによって使用されなくなるまでメモリ使用量を膨らませる可能性があります(これは通常、CPUレンダリングの背後にある数フレームです)。
ミップマッピングを有効にすると、追加のミップは平均でベースミップレベルの約3分の1を消費します。上記の警告に基づくYMMV。
AFAIKは画像の幅*高さ* BPPであり、PNG、JPG、またはBMPであるかどうかは関係ありません。DDSやその他の圧縮可能な形式がどのように配置されているのかわかりません。
ミップマッピングにより、ビデオメモリの必要性が高まります。
このトピックに関する私の知識は少し古いかもしれません。少し前に3Dを放棄しました。