Co to jest kompresja tekstury?

W odniesieniu do grafiki komputerowej kompresja tekstury to sposób na zrobienie obrazu, który zostanie użyty jako tekstura na obiekcie, zwykle w scenie trójwymiarowej (3D), i zmniejszy ilość pamięci wymaganej przez obraz. W przeciwieństwie do bardziej tradycyjnych algorytmów kompresji obrazu, metody kompresji tekstur próbują zapewnić sposób na przechowywanie skompresowanego obrazu w pamięci, jednocześnie umożliwiając programowi dostęp do określonych pikseli w obrazie bez konieczności całkowitej dekompresji obrazu. Można to osiągnąć na kilka sposobów, w tym kodowanie obcinania bloków (BTC), chociaż oszczędność miejsca w pamięci podczas wykonywania programu zwykle musi być zrównoważona wzrostem wykorzystania procesora lub obniżeniem jakości obrazu w wyniku zastosowania kompresji stratnej. Najczęściej producenci różnych kart graficznych i innych urządzeń implementują obsługę kompresji tekstur bezpośrednio w sprzęcie, co prowadzi do powstania kilku powszechnych algorytmów kompresji noszących nazwy różnych producentów sprzętu.

Jednym z powodów, dla których opracowano kompresję tekstur, która stała się powszechną techniką w grafice 3D, jest to, że przechowywanie nieskompresowanych tekstur obrazu dla scen przeznaczonych do oglądania na monitorach o wyższej rozdzielczości może zająć kilkadziesiąt gigabajtów pamięci. Ponadto przenośne urządzenia cyfrowe mają zazwyczaj ograniczoną ilość pamięci, która w innym przypadku nie byłaby w stanie pomieścić wymaganych obrazów sceny 3D. Kompresja tekstur zmniejsza ilość pamięci potrzebnej w systemie, dzięki czemu można użyć większej liczby tekstur lub tekstur o wyższej jakości.

Najbardziej podstawowy rodzaj kompresji tekstur jest znany jako kodowanie obcinania bloków. Ta metoda pobiera obraz i dzieli go na małe bloki pikseli, znajdując dwa kolory w bloku, które są najbardziej oddalone od perspektywy przestrzeni kolorów. Rzeczywiste piksele obrazu w bloku są następnie przypisywane wartości liczbowej, aby wskazać ich kolor w stosunku do dwóch skrajnych kolorów. Schemat kompresuje obraz, ponieważ ilość bitów potrzebnych do zapisania odchylenia piksela od kolorów w bloku jest mniejsza niż ilość wymagana do zapisania rzeczywistego koloru. Uzyskana kompresja umożliwia również indeksowanie pikseli bezpośrednio ze skompresowanego obrazu w razie potrzeby.

W zależności od sprzętu, oprogramowania i innych czynników kompresja tekstur może nastąpić w czasie wykonywania lub może być wykonana wcześniej i zapisana jako plik. Tekstury tworzone dynamicznie muszą być zawsze skompresowane podczas wykonywania. Ładowanie skompresowanej tekstury z pliku może być początkowo szybsze, ale może również powodować problemy, jeśli sprzęt nie obsługuje określonego typu kompresji.