Firmy Google i Binomial źródła , kodek służący do efektywnego kompresowania tekstur oraz związanego z nim uniwersalnego formatu pliku „.basis” do dystrybucji tekstur opartych na obrazach i wideo. Kod referencyjnej implementacji został napisany w języku C++ i na licencji Apache 2.0.
Basis Universal uzupełnia wcześniej system kompresji danych 3D Draco i stara się rozwiązać problem dostarczania tekstur dla GPU. Dotychczas deweloperzy byli ograniczeni wyborem pomiędzy niskopoziomowymi formatami, które zapewniają wysoką wydajność, ale są specyficzne dla GPU i zajmują dużo miejsca na dysku, a innymi formatami, które oferują zmniejszenie rozmiaru, ale nie mogą konkurować z teksturami GPU pod względem wydajności.
Format Basis Universal zapewnia wydajność na poziomie natywnych tekstur GPU, ale zapewnia wyższy poziom kompresji.
Basis jest formatem pośrednim, zapewniającym szybkie przetwarzanie do różnych niskopoziomowych formatów tekstur GPU, używanych zarówno w systemach stacjonarnych, jak i urządzeniach mobilnych. Aktualnie wspierane są translacje do formatów PVRTC1 (4bpp RGB), BC7 (tryb 6 RGB), BC1-5, ETC1 i ETC2. W przyszłości planowane jest wsparcie dla formatu ASTC (RGB lub RGBA) oraz trybów 4/5 RGBA dla formatu BC7 i 4bpp RGBA dla PVRTC1.
Tekstury w formacie basis zajmują od 6 do 8 razy mniej pamięci wideo i wymagają przesyłania około dwa razy mniej danych niż standardowe tekstury oparte na formacie JPEG oraz od 10 do 25% mniej niż tekstury w trybie RDO. Na przykład, przy wielkości obrazu JPEG wynoszącej 891 KB, a tekstury ETC1 1 MB, rozmiar danych w formacie Basis wynosi 469 KB w trybie najwyższej jakości. Przy umieszczaniu tekstur w pamięci wideo, tekstury w formacie JPEG i PNG zużywały 16 MB pamięci, podczas gdy w przypadku tekstur w formacie
Basis potrzebne było 2 MB pamięci w przypadku translacji do BC1, PVRTC1 i ETC1 oraz 4 MB w przypadku translacji do BC7.
Proces migracji istniejących aplikacji na Basis Universal jest dość prosty. Wystarczy przekonwertować istniejące tekstury lub obrazy na nowy format za pomocą dostarczonego przez projekt narzędzia „basisu”, wybierając odpowiedni poziom jakości. Następnie w aplikacji, przed kodem renderującym, należy zainicjować dekoder basisu, który odpowiada za translację pośredniego formatu na obsługiwany przez aktualne GPU format. Przy tym obrazy w całym łańcuchu przetwarzania pozostają skompresowane, w tym ładowane w skompresowanej formie do GPU. Zamiast z góry dekodować obraz w całości, GPU selektywnie dekoduje tylko niezbędne części obrazu.
Obsługiwane jest zapisywanie w jednym pliku niejednorodnych zbiorów tekstur (cubemap), tekstur objętościowych, zbiorów tekstur, poziomów mipmap, sekwencji wideo lub dowolnych fragmentów tekstur. Na przykład możliwe jest spakowanie w jednym pliku serii obrazów w celu stworzenia małych filmów lub połączenie kilku tekstur z użyciem wspólnej palety dla wszystkich obrazów oraz deduplikacją typowych wzorców obrazów. Realizacja kodera Basis Universal wspiera wielowątkowe kodowanie z użyciem OpenMP. Dekoder obecnie działa tylko w trybie jednowątkowym.
Dodatkowo Dekoder Basis Universal dla przeglądarek, dostarczany w formacie WebAssembly, który można wykorzystać w aplikacjach webowych opartych na WebGL. Ostatecznie Google dąży do uzyskania wsparcia Basis Universal w wszystkich głównych przeglądarkach i promowania go jako przenośnego formatu tekstur dla WebGL oraz przyszłej specyfikacji , koncepcyjnie podobnej do API Vulkan, Metal i Direct3D 12.
Zauważono, że możliwość wbudowywania wideo z późniejszym przetwarzaniem wyłącznie po stronie GPU czyni Basis Universal interesującym rozwiązaniem do tworzenia dynamicznych interfejsów użytkownika w WebAssembly i WebGL, gdzie jednocześnie może być odzwierciedlanych setki małych wideo z minimalnym obciążeniem CPU. Do momentu wprowadzenia instrukcji SIMD w WebAssembly, podobny poziom wydajności na tradycyjnych kodekach był jeszcze niedostępny, co oznacza, że wideo oparte na teksturach może być stosowane w dziedzinach, gdzie tradycyjne wideo nie może być użyte. Obecnie przygotowywany jest do publikacji kod z dodatkowymi optymalizacjami dla wideo, w tym możliwość wykorzystania z obsługą adaptacyjnego wypełnienia (CR).
Źródło: opennet.ru
