Doku Sıkıştırma
Transkript
Doku Sıkıştırma
Doku sıkıştırma Uluslararası Bilgisayar Enstitüsü Ege Üniversitesi Ahmet Bilgili & Serkan Ergun Neden Sıkıştırmalı? Standart bir dokuda her piksel için: 8 bit kırmızı, 8 bit yeşil, 8 bit mavi ve 8 bit alpha değerleri tutulmaktadır. Bu durumda her piksel 4 byte hafıza gerektirir. 512 x 512 boyutlarında bir doku için: 512 * 512 * 4 / (1024 * 1024) = 1 MB hafızaya ihtiyaç duyulmaktadır. Uygulamalarda bu tür dokulardan onlarca kullanıldığı düşünülürse GPU hafızası yetersizliğiyle karşılaşılmaktadır. Resim Sıkıştırma Günümüzde JPG, PNG, TGA gibi iyi sıkıştırma oranlarına sahip kayıplı / kayıpsız sıkıştırılmış resim dosyası formatları bulunmaktadır. Bu formatlardan birini kullanırsak ne olur? Çözümlenme süresi: Renk değerlerinin çözümlenme süresi gerçek zamanlı uygulamalar için elverişli değildir. Daha hızlı yöntemlere ihtiyaç vardır Rastgele erişim: erişim JPG gibi “RLE” kullanan yöntemlerde istenen piksel değerinin hesaplanabilmesi için ondan önce gelen değerlerin de hesaplanması gerekir. Bu durum rastgele erişimi engeller. Sıkıştırma oranı ve kalite: yüksek kalitede yüksek sıkıştırma oranlarına ulaşılabilir. Sıkıştırma süresi: sıkıştırma sadece bir kere yapılacağından sıkıştırma süresi gerçek zamanlı uygulamaları fazla etkilemez. Doku sıkıştırma Genelde sabit sıkıştırma oranında küçük piksel bloklarının kayıplı sıkıştırılması yapılır Her piksel için sabit boyutta veri depolandığından rastgele erişim mümkündür. Çözümleme çok hızlı bir şekilde donanımda yapılabilir. Sıkıştırma sistemin hafıza ve bandwidth ihtiyaçlarını düşürür. Doku sıkıştırma formatları DXT1 DXT2 / DXT3 DXT4 / DXT5 3Dc … DXT1 Her 4x4 piksel bloğu için: Bloğun içinden birbirinden uzak iki c0 ve c1 renk değeri seçilir. c0 ve c1 renk değerleri kullanılarak lineer interpolasyonla c2 = 2 c0 + 1 c1 ve c3 = 1 c0 + 2 c1 3 3 3 değerleri hesaplanır. 3 Bu renk değerlerinden c0 ve c1 ,5 bit kırmızı 6 bit yeşil 5 bit mavi olacak şekilde 16 bitle kodlanır. Bloktaki her piksel, bu 4 renklik palette en yakın olduğu değerin indeksi ile (2bitle) kodlanır. Resimde saydamlık isteniyorsa: Alpha değerleri 1 bit ile kodlanır. Renk paletinde sakalanan iki renk değerinden lineer interpolasyonla sadece bir değer bulunur. paletteki diğer renk saydam siyah rengini ifade eder DXT1 Soldaki piksel bloğu DXT1 ile sıkıştırıldığında 01 01 01 11 11 11 11 11 10 10 10 10 10 00 00 00 16 bit siyah değeri 16 bit kırmızı değeri 16 * 2 palet indeksleri 0x0000 0xF800 0x57FF 0xAAA0 Renk değerleri doğrusal değişmiyorsa kalite kaybı yüksek olacaktır. DXT2 / DXT3 16 piksellik her blok için kırmızı yeşil mavi renk değerleri DXT1 de olduğu gibi hesaplanır. Her piksel için ekstra olarak 4 bit alpha değeri tutulur. Renk değerleri; DXT2’de alpha değerleri ile çarpılarak, DXT3 de çarpılmayarak sıkıştırma işlemi uygulanır. Her piksel için 4 bit alpha değeri olduğundan alpha değerlerinde yumuşak geçişler için elverişli değildir. DXT4 / DXT5 16 piksellik her blok için kırmızı yeşil mavi renk değerleri DXT1 de olduğu gibi hesaplanır. Alpha değerlerini kodlamak için birbirinden uzak iki a0 ve a1 alpha değeri seçilir ve 8’er bit ile kodlanır. a0 > a1 ise: a0 ile a1 arasında lineer interpolasyonla 6 değer daha hesaplanarak alpha paleti oluşturulur. Değilse: a0 ile a1 arasında lineer interpolasyonla 4 değer daha hesaplanır kalan son 2 değer 0 ve 255 alınarak alpha paleti oluşturulur. Her pixel için, alpha paletinden uygun değerin indeksi 3 bit ile kodlanır. Renk değerleri; DXT4’de alpha değerleri ile çarpılarak, DXT5 de çarpılmayarak sıkıştırma işlemi uygulanır. Format Girdi Çıktı Sıkıştırma oranı DXT1 512 bit 64 bit 8:1 DXT2 /DXT3 512 bit 128 bit 4:1 DXT4/DXT5 512 bit 128 bit 4:1 Teşekkürler
Benzer belgeler
Points of presence
Eschborner Landstrasse
Arnulfstrasse
Metamorfosi, Attiki Ermou
Victor Hugo
Asztalos Sándor utca
Neumann Janos
Hausmann Alajos
Via Caldera
Bul. Goce Delcev b.b.
Kuiperberweg
Al. Jerozolimskie
Dimitr...