En iyi (En Popüler?) Tekstüre için Görüntü Formatı [kapalı]


13

Tamam, bu yüzden OpenGL ile C ++ kullanıyorum ve 3D oyunum için dokuları yüklemek için bir yükleyici oluşturacağım. (Ama dokular 2B'dir). Kullanmamaya karar versem bile şeffaflık seçeneğini istiyorum. Üst çentik olmak zorunda olmamasına rağmen, iyi kaliteye ihtiyacım var. Biçim için ne önerirsiniz (PNG, TGA, vb.). Ayrıca, belki de bir yükleyici oluşturmak için kolay bir şey yapın (zaten oluşturulmuş olanı kullanmayacağım.). Ve ayrıca, yükleyici ile yardımcı olacak herhangi bir bağlantı / ipucu varsa, bu takdir edilecektir.

Yanıtlar:


15

Neden hazır bir yükleyici kullanmak istemeyeceğinizi anlamıyorum. Örneğin PNG , bir biçim için iyi bir seçimdir, ancak genel amaçlı bir yükleyici yazmak için karmaşıktır (ve muhtemelen yalnızca önem verdiğiniz PNG formatlarının belirli alt kümesini yükleyen bir tane yazma çabasına değmez).

Biraz alışılmadık bir gereksinim olduğu için, TGA muhtemelen en iyi bahistir. TGA 2.0 bir alfa kanalına sahiptir ve PNG'ye kıyasla nispeten basittir.


3
OP kendi yazısını yazmak istiyorsa TGA için +1. Kendi TGA yükleyicimi bir kez yazdım. Çok hızlı ve acısız.
Komünist Ördek

4
@ Ördek: Sıkıştırmadan veya süslü özelliklerden herhangi biri olmadan basit TGA'lar yaptığınız sürece ağrısızdır. Tamamen uyumlu bir TGA yükleyici istiyorsanız biraz acı verdim. Bu biraz garip bir format.
ZorbaTHut

1
@Zorba, sıkıştırmalar yeterince kolay. Sadece uzantılar olsun ya da olmasın.
yavaşladı

10

Görüntü doku biçimi de bir performans seçimidir. Sıkıştırılmış dokuları mümkün olduğunca kullanmanızı tavsiye ederim. Mobil platformlarda, performansı (% 40 veya daha fazla), bellek kullanımını ve zaman yüklemesini artırabilir.

1024 * 1024 bir doku düşünün:

  • RGB veya RGBA (16 bit): 2Mo (SGS'ye yüklemek için .5s)
  • RGBA (32 bit): 4Mo (SGS'ye yüklemek için 1s)
  • PVRT (4bpp): 512ko (SGS'ye yüklenecek .125s)
  • ETC1 + Alfa: 1.5Mo (SGS'ye yüklemek için .4s)

Oyunlarımızda birçok formatta varlıklar (dokular) var:

  • DXTC dokular için DDS biçimi (Masaüstü platformları: OS X, Linux, Windows ve Tegra)
  • ATC dokular için DDS biçimi (Andreno GPU'lar)
  • PVRT formatı için PVR formatı (PowerVR GPU'lar)
  • ETC1 dokusu için PKM biçimi (Tüm OGLES 2.0 cihaz uyumluluğu)

Sonunda, uyumluluk için ham format kullanıyoruz ancak bu uyumluluk veya GUI öğeleri için

  • Ham doku için PNG formatı. RGBA 16, 24 veya 32 bit dokular içindir (MIT lisanslı yükleyici kullanıyoruz). Sıkıştırılmamış dokulardır.

ETC1 dokularının alfa kanalı yoktur, bu nedenle iki dokuya (rgb doku ve alfa doku) sahip özel bir gölgelendirici kullanırız. Sıkıştırılmış formatın yüklenmesi çok kolaydır (100 veya 200 loc).

Masaüstünde birçok kartta DXTC (S3TC) bulunur. Yani, onu kullanmalısınız.

Sıkıştırılmış Dokular

profesyonel

  • Doku dolgu hızı iyileştirildi
  • Doku yükleme (4x veya daha fazla)
  • Kolay yükleme

aleyhte

  • Tüm platformlarda desteklenmez
  • eserler

6
Video kartında (örn. DXTC) sıkıştırılan dokular ile yalnızca depolanırken sıkıştırılan ve yükleme sırasında sıkıştırılması gereken dokular (örn. PNG) arasında büyük bir fark vardır. PNG'nin yüklenmesi, sıkıştırılmamış bir dokudan daha yavaş olacaktır, çünkü önce sıkıştırılması gerekir. Daha küçük bir dosya boyutu, evet, ancak tüketilen grafik belleği miktarı aynı.
jhocking

8

Dokular bir veya daha fazla görüntünün koleksiyonudur. Bir doku olduğunu Bu araç olabilir bir TGA veya PNG ile temsil, ama ikisi de biçim dokularının mümkün olan tüm özellikleri temsil etme yeteneğine sahiptir edilecek. Neden?

Çünkü her biri sadece tek bir görüntü tutabilir . Mipmap yok. 3B dokular mümkün değil. Dizi dokusu yok. Cubemaps yok. Bu dosyaların her biri sadece tek bir 2D görüntüdür. Dokunun bir parçası olabilirler, ancak mipmap oluşturmadığınız sürece (ve özel ihtiyaçlarınız yoksa mipmap'ları kullanmamanızı şiddetle tavsiye etmiyorsanız), bu biçimlerdeki tek bir görüntü dosyası doku olamaz.

İyi görüntü formatlarıdır, ancak zayıf doku formatları oluştururlar.

DDS, doku formatlarının öncüsüdür çünkü aslında dokuların ihtiyaç duyduğu şeyleri destekler. Mipmap'ları ve küp haritalarını destekler. 3D dokuları destekler. DDSv10 dizi dokularını destekler. DDS içindeki tek bir dokuyu PNG veya TGA ile yapamayacağınız şekilde paketleyebilirsiniz.

DDS, sıkıştırılmamış ve sıkıştırılmış doku verilerini destekler. Sıkıştırılmış doku biçimi DXT / BC doku biçimlerinden biri olduğu sürece.

PKM, ETC1 sıkıştırılmış görüntüleri paketlemek için kullanışlıdır, ancak PNG'de olduğu gibi gerçek doku özelliklerini desteklemez.

PVR dosyaları DDS'nin mobil eşdeğeri gibi görünüyor (neden sadece DDS'leri kullanamadıklarını bilmiyorum). Çeşitli sıkıştırma tekniklerini desteklerler, ancak dizi dokuları ve 3D doku desteği gibi gelişmiş DDSv10 özelliklerinden yoksundurlar.

Böylece DDS, kapsamlı doku desteği açısından kazanır.


2
Yalnızca özellikler için konuşan TIFF, DDS'nin yaptığı her şeyi ve daha fazlasını destekler. Alpha'ya ek olarak uzak IR, yakın IR, R, G, B ve UV kanallarına sahip bir doku ister misiniz? Kanal başına 64 bit IEEE kayan noktalı mi? Kanala uygun olarak bir dizi algoritmadan (JPEG ve JPEG2000 dahil) herhangi biri tarafından sıkıştırıldınız mı? Dosya başına birden fazla görüntü ve her biri için zengin meta verilerle? Tüm bunları ve daha fazlasını yapabilir. Aynı zamanda Photoshop'un "doğal" biçimidir. Şimdi, bunun için bir yükleyici yazarken ...
Martin Sojka

DDS kapsayıcısı altında yalnızca DXT / BC doku formatını kullanma gereksinimi hakkında daha fazla bilgi eklememe izin verin; durum böyle değil. Compressonator gördüm çeşitli sıkıştırma formatlarını ve çıktısını herkes için .dds olarak (bu ipucunu çalıştırdığınızda yardım çıktısından görebilirsiniz) ve [this] (cevap) SO üzerinde herhangi bir sıkıştırma formatı (farklı FourCC ayarı yapabileceğinizi söyleyerek) o zaman kendimizi idare et).
haxpor

1
@haxpor: Bir dosyada ne istersen atabilir ve ona DDS diyebilirsin. Soru, normal DDS dosyalarını okuyabilen bir uygulamanın sizinkini okuyabileceği veya bunu yapmak için özel olarak kodlanması gerekecek mi? DDS formatı sadece DXT / BC sıkıştırma formatlarını belirtir (ve günümüzde ASTC olduğunu düşünüyorum). Başka bir format kullanırsanız, onu yazan program ile onu okuyan program arasında ne olur? Ancak bu hemen hemen tüm görüntü formatları için geçerlidir.
Nicol Bolas

@NicolBolas Özetlediğiniz için teşekkür ederiz. Bence bu kadar.
haxpor

5

Khronos Grubu, dokuları OpenGL ve OpenGL ES uygulamaları için depolamak için KTX dosya biçimini önerir . Bu formatla çalışmak için libktx kullanabilirsiniz .

Özellikleri:

  • KTX dosyasından bir OpenGL dokusu oluştur
  • Donanımda ETC1 desteği yoksa, ETC1 sıkıştırılmış doku görüntüsünün sıkıştırmasını açın.
  • Doku yüklenirken KTX dosyasından anahtar / değer çiftlerinin karma tablosunu oluşturun
  • Bir dizi kaynak görüntüden ve isteğe bağlı bir anahtar / değer çifti karma tablosundan KTX dosyası yazın.
  • Anahtar / değer çiftlerinin karma tablosunu oluşturun ve doldurun.

3

DDS (DirectDraw Surface) şu anda dokular için en popüler seçim gibi görünüyor . Farklı piksel formatlarına, saydamlığa ve sıkıştırmaya sahiptir. OpenGL'de GL_ARB_texture_compression uzantısıyla desteklenir.

Örneğin, burada bir OpenGL yükleyici var .


Cevabınız biraz kafa karıştırıcı. DDS'nin OpenGL'de desteklendiğini söylemek hiç mantıklı değil. OpenGL görüntü formatlarıyla ilgilenmez.
rdb

3

Burada dikkat edilmesi gereken birkaç nokta var:

  1. Dokuyu diskten sistem belleğine ne kadar hızlı alabilirsiniz.
  2. Dokuyu sistem belleğinden GPU'ya ne kadar hızlı alabilirsiniz (sizin durumunuzdaki glTexImage2D üzerinden).
  3. Bütçenizde ne kadar disk alanı ve video RAM depolama alanı olduğunu.
  4. Performans ve kalite.

TGA iyi bir seçimdir, çünkü 24 ve 32 bit sıkıştırılmamış durumlarda verileri tek bir seferde / her neyse okuyabilir ve sonucu daha fazla işlem yapmadan doğrudan glTexImage2D üzerinden gönderebilirsiniz. Kötü bir seçimdir çünkü en büyük dosya boyutuna sahip olabilir ve disk G / Ç bir darboğaz ise, okumalarınız yavaş olacaktır.

PNG, oldukça küçük bir dosya boyutuna sahip görüntülerin kalitesini koruduğundan iyi bir seçimdir. Kötü bir seçim çünkü PNG'ler açmak için yavaş olabilir - o zaman darboğazınız buysa - bilirsiniz.

JPG iyi bir seçimdir çünkü genellikle en küçük dosya boyutuna sahiptir ve diskten gerçekten hızlı bir şekilde çıkacaktır (dosyayı bir ağ üzerinden göndermeniz gerekiyorsa iki kat iyi). Ara yazılım dekompresyon adımları ve kalite kaybı nedeniyle kötü bir seçimdir (ancak bunu azaltmak için kalite ayarlarını ayarlayabilirsiniz). Alfa kanalı da yok.

DDS (veya diğer sıkıştırılmış biçimler), daha küçük dosya boyutu ve önceden oluşturulmuş bir mipmap zinciri içerme özelliği nedeniyle iyi seçimlerdir. Donanımda yerel olarak desteklenen bir biçimse (ve çoğu tüketici PC donanımında DDS yerel olarak destekleniyorsa - uzun süredir de varsa), TGA ile aynı yararı elde edersiniz - bir uçu, biraz kafa bulmak için başlıkta biraz alay bazı görüntü özelliklerini seçin, ardından verileri doğrudan ara adım olmadan gönderin. Sıkıştırılmış dokular, programınızın daha hızlı çalışmasını sağlar ve daha az video RAM kullanır. Kötü seçimlerdir, çünkü kayıplı sıkıştırma kullanırlar (bazen gerçekten fark edilebilir) ve tüm donanımlarda desteklenmeyebilirler.

Eğer ben olsaydım bu formatların 4'ü için destek kurardım (TGA ve DDS, yükleyiciler yazmak için oldukça önemsizdir, JPG ve PNG ile bir görüntü kütüphanesi kullanırım), böylece içerik oluşturucular en uygun formatı seçebilir doku başına temel.


1
"DDS çoğu tüketici PC donanımında doğal olarak desteklenir" DDS farklı formatlar için bir kaptır. Bir DDS dosyasını GPU'ya iletmezsiniz, ancak içeriği!
Tara

0

Ve elbette her zaman yüklemek için gerçekten kolay olan eski 32 bit BMP ile gidebilirsiniz (özellikle boyut 2 bir güçse (aslında, 8 bayt IIRC'nin katlarıysa)).

Aksi takdirde, sadece bir format istediğiniz gibi garip görünüyor, jpg güzel gerçek dünya yüksek çözünürlüklü dokular için gerçekten harika (jpeg disk alanı ve (aşağı) yükleme süreleri ile hayranlık uyandırıyor), şeffaflık için png ve kontrole dokular için zaman zaman 32 bit BMP (bir komut dosyasından veya 'hızlı ve kirli' bir araçtan kolayca oluşturulabilir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.