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

Oyun merakl›lar› için

Oyun merakl›lar› için Civil QuantumStarSE Battle for Wesnoth

Detaylı

Points of presence

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...

Detaylı