2BPP'den nasıl iyi renkler elde edersiniz?


11

PowerVR dokuları inceliyordum ve görünüşe göre piksel başına 2 bit olan birkaç dokuya rastladım. Bu, açıkçası, aklımdan geçiyor. Piksel başına pi başına sadece 4 olası durumunuz olduğunda nasıl yarım yol iyi renk koruması elde edilir? Orada böyle bir başarının arkasındaki sıkıştırma hakkında konuşan herhangi bir kaynağı çok isterim. Teşekkürler!


JPG ile, 1BPP'nin altında iyi bir renk elde edebilirsiniz :)
Ivan Kuckir

Yanıtlar:


13

PVRTC 2BPP kodlaması, bu yazıda tanıtıldığı gibi , bir görüntüyü 8x4-texel bloklara böler ve her bloğu, her otuz iki texel bloğu için sadece iki RGB renk depolanacak şekilde sıkıştırır.

Otuz iki texin hiçbiri kendi rengini depolamaz - her bir texel sadece 8x4-texel bloğunun iki RGB rengi arasında nasıl harmanlanacağı hakkında bilgi depolar.

Kaynak görüntüde 32 renk gökkuşağı olan 8x4 texel bloğu varsa, PVRTC 2BPP sıkıştırması kalitesini korumak için çok kötü bir iş çıkarır, çünkü PVRTC 2BPP'de her 8x4 texel bloğun sadece iki RGB rengi vardır.


Büyüleyici! Çok teşekkür ederim. Ne yazık ki, bağlandığınız kağıdı yüklerken çok sorun yaşıyorum. Belki Amazon'un EC2'sinde barındırılıyor? ;)
Toji

6

Doku sıkıştırma pikselleri sıkıştırmaz. Piksel bloklarını sıkıştırır. Tek bir piksele başvuru yapıldığında GPU, hangi bloğun pikseli temsil ettiğini hesaplar. Daha sonra bu pikselin rengini elde etmek için tüm bloğu işler.

Bir örnek

Bir RGB dokusunda blok boyutunun 4x4 piksel olduğunu varsayalım. Sıkıştırılmamış, her blok 4x4x3 = 48doku belleğinde bayt tüketir .
Şimdi sıkıştırma algoritması her kanalın (RGB) ortalamasını hesaplayacak ve bunu blokla (3 bayt) saklayacaktır. Şimdi, pikseli orijinal rengine daha yakın olacak şekilde ortalamayı ayarlamak için her piksele 2 bit verelim. Bu başka bir 4x4x2x3/8 = 12bayt.
Bu yeni icat edilen kompresör tarafından kullanılan toplam bayt, blok başına 15 bayttır, sıkıştırma oranı% 31.25'tir.

Efsanevi kompresörüm 7.5 bpp kullanıyor. Bu, 2 bpp pvrtc'nin başarabileceği kadar iyi değil, ancak şimdi 2 bbp'nin nasıl elde edilebileceğine dair kaba bir fikriniz var.

güncelleme:
Sadece pvrtc için wikipedia sayfasına baktım . Görünüşe göre pvrtc geleneksel blok tabanlı sıkıştırma kullanmıyor. İşte blok tabanlı sıkıştırmanın nasıl çalıştığını ve pvrtc'nin nasıl farklı olduğunu açıklayan kağıt . Özellikle not: Blok tabanlı filtreler 4bpp (alfa yok) kullanarak iyi görünümlü görüntüler üretebilirken, nvrtc 2bpp ile bunu yapabilir.


1

@Toji, kağıdın bulunduğu site biraz mizaç ama bu sabah benim için çalıştı. Başarısız olursa, ACM / SIGGRAPH'a erişiminiz varsa, burada barındırılır . Garip bir şekilde , aynı zamanda IMG / PowerVR geliştirici web sitesinde (ücretsiz kayıt) oldu, ancak doğru bölümü bulamıyorum. :-(

[UPDATE] Hala IMG sitesinde burada [/ UPDATE]

@bmcnet: PVRTC, dokuyu örneğin VB veya S3TC gibi bloklara ayırmaz. FWIW, blok tabanlı dokular üzerinde deney yaptım, ancak kendi kendine yeten bloklara yeterli veri toplamanın ve hala istediğim sonuçları elde etmenin bir yolunu bulamadım. Bunun yerine, biraz daha 'global' bir doku sıkıştırma sistemidir. Hedefe göre bilinmeyen bir şekilde yükselttiği 2 düşük çözünürlüklü görüntüye sahiptir ve daha sonra bunları tek tek tek tek temelinde karıştırır.

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.