Yanıtlar:
JPG ve PNG dosyaları neredeyse her zaman diskte bellekten daha küçük olacaktır; ham RGB verilerini elde etmek için anında açılmaları gerekir, böylece yükleme için daha fazla işlem gücü ve daha sonra daha fazla RAM gerekir. Pek çok modern motor, diskte olduğu gibi aynı formatı diskte depolamayı seçerek, dokunun bellek gereksinimleriyle aynı boyutta (ancak bir PNG veya JPG'den daha büyük) dosyalara yol açar. RGB / RGBA ve S3TC / DXTn / BCn en yaygın kullanılan formatlardır, çünkü herhangi bir işlem yapılmadan doğrudan belleğe okunurlar (DXT dokuları önceden sıkıştırılır).
Yani, bunlar farklı ortak doku formatları için boyutlardır:
Mipmap'lı bir görüntü kullanırsanız , doku 4/3 bellek gerektirir. Ek olarak, doku genişliği ve yüksekliği, eski veya daha az yetenekli donanımın ikisinin gücü olacak şekilde dahili olarak yuvarlanabilir ve çok sınırlı bir donanımda da kare olmaya zorlanabilir.
DXT hakkında daha fazla bilgi: kayıplı bir sıkıştırma; bu, doku sıkıştırılırken bazı renk verilerinin kaybedildiği anlamına gelir. Bunun doku üzerinde olumsuz bir etkisi vardır, keskin sınırları bozar ve degradeler üzerinde "bloklar" oluşturur; ancak faydaları dezavantajlardan çok daha iyidir (DXT'de korkunç derecede kötü görünen bir dokuya sahipseniz, sadece sıkıştırılmamış tutun; diğeri boyut kaybını telafi edecektir). Ayrıca, pikseller sabit boyutlu bloklarla sıkıştırıldığından, doku genişliği ve yüksekliği dördün katı olmalıdır.
Açıkçası: Biçime bağlıdır.
256 x 256 piksel kare bir doku alalım. Bir alfa kanalı ( Color
XNA'da) ile sıkıştırılmamış 32 bit ise , 256 KB ( 256*256*4
bayt) alır .
16-bit formatlar (ör . :)Bgr565
Açıkçası yarım boyutta olacaktır - 128KB .
Sonra sıkıştırılmış formatlara girersiniz. XNA'da DXT1, DXT3 ve DXT5 ( S3 Sıkıştırma olarak da bilinir ) vardır. Bu kayıplı bir sıkıştırma biçimidir. Aynı zamanda blok tabanlı bir formattır - yani örnekleme yapabileceğiniz anlamına gelir (çünkü bir pikselin hangi bloğun içinde olduğunu biliyorsunuz). Ayrıca daha hızlıdır, çünkü daha az bant genişliği kullanırsınız.
DXT1'in sıkıştırma oranı 8: 1'dir ve DXT3 ve DXT5 için 4: 1'dir.
Yani 256x256 bir DXT1 resimdir 32KB . Ve DXT3 veya DXT5 olduğu 64KB .
Ve sonra mipmaplama var . Bu etkinleştirilirse, grafik belleğinde öncekinin her iki yarısında bir dizi görüntü oluşturur. 256x256 resmimiz için: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Mipmap ile bir doku orijinalin boyutunun yaklaşık % 133'ü kadardır .
Çoğu GPU yalnızca çok belirli bir sıkıştırma biçimini okuyabilir. Örneğin. BC *, DXT *, png gibi formatlar değil. Yani evet, çoğunlukla .png'nin video belleğinde diskten daha fazla yer kaplayacağı doğrudur.
Dokular hem video belleğinde hem de sistem belleğinde sıkıştırılmış veya sıkıştırılmamış olarak saklanabilir.
Sıkıştırılmamış dokular için genel kural, video belleğinde sistem belleğinde sıkıştırılmamış formdakiyle aynı miktarda yer almasıdır.
DXT1 sıkıştırılmış dokular için. GPU, dokunuzdaki her 4x4 karo için 8 bayt depolar. Sıkıştırılmamış veriler (RGB kanalı başına 8 bitlik) normalde 4x4x3 = 48 bayt olur, bu da 6: 1 sıkıştırma oranıdır. DXT3 / DXT5 sıkıştırılmış dokular için GPU, dokunuzdaki her 4x4 karo için 16 bayt depolar. Bu biraz daha düşük sıkıştırma oranı 3: 1'dir.
Hem sıkıştırılmamış hem de sıkıştırılmış dokulara sahip bazı uyarılar vardır:
Çoğu bellek, sabit bir boyutta (boyutu GPU'lar arasında değişen) sayfalara ayrılır. Örneğin. 4KB ve genellikle bu alt gişe ayrılmaz ve diğer gpu verileri ile paylaşılmaz. Yani. doku ayak iziniz sayfa boyutundan küçükse, vid mem'daki ayak izi genellikle sayfa boyutu olur.
Bazı gpusların çok özel hizalama gereksinimleri vardır. Geçmişte, bazı GPU'ların dokuların 2 boyutlu bir güç olması şartı vardı. Dokudan örnekleme yaparken erişim yerini iyileştirmek için genellikle swizzled temsilini desteklemek için gerekliydi (bkz. Morton Siparişi: http://en.wikipedia.org/wiki/Z-order_(curve )). Bu, bu gereksinimleri korumak için garip boyutlardaki dokuların doldurulacağı anlamına gelir (tipik olarak bu dolgu, sürücü tarafından işlenir). Morton düzeni modern gpus'ta zorunlu olarak kullanılmasa da, gpu'nun spesifik gereksinimlerini desteklemek için hala şişkinlik olabilir.
Herhangi bir zamanda, özellikle üzerlerinde atma kilitleri kullanıyorsanız, dokunuzda birden fazla sunum olabilir. Bu, gösterimler artık gpu tarafından kullanılmayana kadar bellek kullanımınızı engelleyebilir (bu genellikle CPU oluşturma işleminin birkaç karesidir)
Mipmap oluşturma özelliğini etkinleştirirseniz, ek mipler ortalama baz mip seviyesinin yaklaşık üçte birini tüketir. YMMV yukarıdaki uyarılara dayanmaktadır.
AFAIK, PNG, JPG veya BMP ise bağımsız olarak genişlik * yükseklik * BPP resimlerinden oluşur. DDS veya diğer sıkıştırılabilir formatların nasıl düzenlendiğini bilmiyorum.
Mip eşleme video belleği ihtiyacını artıracaktır.
Bu konudaki bilgim biraz modası geçmiş olabilir. 3D'yi bir süre önce terk ettim.