Baza open source Google i Binomial Uniwersalny system kompresji tekstur

Google i dwumian otwarty teksty źródłowe Podstawa uniwersalna, kodek do wydajnej kompresji tekstur i powiązany z nim uniwersalny format pliku „.basis” do dystrybucji tekstur opartych na obrazach i wideo. Referencyjny kod implementacyjny jest napisany w języku C++ i dostarczane na licencji Apache 2.0.

Baza Uniwersalna uzupełnia poprzednio opublikowany System kompresji danych Draco 3D i próbuje rozwiązać problem z dostarczaniem tekstur dla GPU. Do tej pory programiści ograniczali się do wyboru pomiędzy formatami niskiego poziomu, które osiągały wysoką wydajność, ale są specyficzne dla procesora graficznego i zajmują dużo miejsca na dysku, a innymi formatami, które osiągały zmniejszenie rozmiaru, ale nie mogły konkurować z teksturami GPU pod względem wydajności.

Format Basis Universal pozwala osiągnąć wydajność natywnych tekstur GPU, ale zapewnia wyższy poziom kompresji.
Basis to format pośredni, który zapewnia szybkie transkodowanie tekstur GPU do różnych formatów niskiego poziomu do użytku zarówno w systemach stacjonarnych, jak i na urządzeniach mobilnych przed użyciem. Obecnie obsługiwane są formaty PVRTC1 (4bpp RGB), BC7 (tryb 6 RGB), BC1-5, ETC1 i ETC2. Oczekuje się, że w przyszłości będzie obsługiwana format ASTC (RGB lub RGBA) oraz tryby 4/5 RGBA dla BC7 i 4bpp RGBA dla PVRTC1.

Baza open source Google i Binomial Uniwersalny system kompresji tekstur

Tekstury w formacie bazowym zajmują 6-8 razy mniej pamięci wideo i wymagają przesłania w przybliżeniu o połowę mniej danych niż typowe tekstury oparte na formacie JPEG i 10-25% mniej niż tekstury w trybie RDO. Na przykład przy rozmiarze obrazu JPEG wynoszącym 891 KB i teksturze ETC1 wynoszącej 1 MB, rozmiar danych w formacie Basis wynosi 469 KB w trybie najwyższej jakości. Podczas umieszczania tekstur w pamięci wideo użyte w testach tekstury JPEG i PNG zużywały 16 MB pamięci, natomiast tekstury w
Podstawa wymagała 2 MB pamięci do translacji do BC1, PVRTC1 i ETC1 oraz 4 MB do translacji do BC7.

Baza open source Google i Binomial Uniwersalny system kompresji tekstur

Proces migracji istniejących aplikacji do Basis Universal jest dość prosty. Wystarczy przekodować istniejące tekstury lub obrazy do nowego formatu za pomocą narzędzia „basisu” dostarczonego z projektem, wybierając wymagany poziom jakości. Następnie w aplikacji, przed kodem renderującym, należy zainicjować transkoder baseu, który odpowiada za tłumaczenie formatu pośredniego na format obsługiwany przez aktualny układ GPU. Jednocześnie obrazy w całym łańcuchu przetwarzania pozostają skompresowane, łącznie z ładowaniem w postaci skompresowanej do procesora graficznego. Zamiast z wyprzedzeniem transkodować cały obraz, procesor graficzny selektywnie dekoduje tylko niezbędne części obrazu.

Obsługuje zapisywanie heterogenicznych tablic tekstur (map sześciennych), tekstur wolumetrycznych, tablic tekstur, poziomów mipmap, sekwencji wideo lub dowolnych fragmentów tekstur w jednym pliku. Na przykład możliwe jest spakowanie serii obrazów w jednym pliku w celu utworzenia małych filmów lub połączenie kilku tekstur przy użyciu wspólnej palety dla wszystkich obrazów i deduplikacji typowych szablonów obrazów. Implementacja kodera Basis Universal obsługuje kodowanie wielowątkowe przy użyciu OpenMP. Transkoder obecnie działa tylko w trybie jednowątkowym.

dodatkowo dostępny Podstawa Uniwersalny dekoder dla przeglądarek, dostarczany w formacie WebAssembly, który może być używany w aplikacjach internetowych opartych na WebGL. Docelowo Google zamierza obsługiwać Basis Universal we wszystkich głównych przeglądarkach i promować go jako przenośny format tekstur dla WebGL oraz przyszłą specyfikację WebGPU, koncepcyjnie podobny do interfejsów API Vulkan, Metal i Direct3D 12.

Należy zauważyć, że możliwość osadzania wideo z jego późniejszą obróbką wyłącznie po stronie GPU sprawia, że ​​Basis Universal jest ciekawym rozwiązaniem do tworzenia dynamicznych interfejsów użytkownika na WebAssembly i WebGL, które mogą jednocześnie wyświetlać setki małych filmów przy minimalnym obciążeniu procesora. Dopóki instrukcje SIMD nie będą mogły być używane w WebAssembly z tradycyjnymi kodekami, ten poziom wydajności nie jest jeszcze osiągalny, więc wideo oparte na teksturach może być używane w obszarach, w których konwencjonalne wideo nie ma zastosowania. Kod z dodatkowymi optymalizacjami dla wideo jest obecnie przygotowywany do publikacji, łącznie z możliwością wykorzystania Ramki I i ramki P z obsługą adaptacyjnego dopełniania (CR).

Źródło: opennet.ru

Dodaj komentarz