# meshoptimizer 1.1: kompresja meshletów i mikromapy nieprzezroczystości
Nowa wersja biblioteki meshoptimizer 1.1 dodaje kodek do kompresji meshletów oraz wsparcie dla generowania mikromap nieprzezroczystości. Aktualizacja skupia się na optymalizacji topologii dla renderingu GPU i przyspieszeniu ray tracingu. Rozwój prowadzony jest w C++ i JavaScript na licencji MIT, z głównym wkładem od Valve.
Optymalizacja siatek trójkątnych
Biblioteka meshoptimizer poprawia przetwarzanie wierzchołków i indeksów na etapach potoku GPU. Algorytmy zmniejszają złożoność siatek, minimalizują koszty przechowywania i zwiększają efektywność renderingu. Od 2017 roku projekt ewoluuje, wersja 1.0 vyshla w grudniu 2025 roku.
Narzędzia towarzyszące:
- gltfpack: narzędzie CLI do automatycznej optymalizacji plików glTF.
- clusterlod.h: biblioteka C/C++ do klastrowego LOD z ciągłym poziomem szczegółowości.
Kodek do kompresji meshletów
Nowy kodek kompresuje topologię meshletów, wykorzystując lokalność mikroindeksów i danych wierzchołkowych. Każdy meshlet jest kodowany niezależnie, co ułatwia paralelizm i strukturę przechowywania w runtime.
Dekodowanie zorientowane jest na wysoką prędkość:
- CPU: 7–10 GB/s na procesorach desktopowych, działa z pamięcią write-combined.
- GPU: >150 GB/s na RTX 5070 poprzez compute shader.
Dane wyjściowe są dodatkowo kompresowane Zstandard. Dekoder generuje formaty 3/4 bajta na trójkąt i 2/4 bajta na wierzchołek do bezpośredniego użycia na GPU.
Mikromapy nieprzezroczystości
Funkcje generują mikromapy gotowe sprzętowo z współrzędnych UV siatki i tekstury alfa. Wsparcie dla Vulkan (VK_EXT_opacity_micromap) i DirectX (DXR 1.2).
Każdy trójkąt dzielony jest na 4^N mikrotrójkątów według UV. Warianty reprezentacji:
- 2-stanowe (1 bit): pełne wyeliminowanie wywołań shaderów dla maksymalnej wydajności ray tracingu.
- 4-stanowe (2 bity): przyspieszenie shaderów any-hit poprzez lookup tekstury.
Ponowne wykorzystanie map między trójkątami poprzez bufor indeksowy OMM minimalizuje zużycie pamięci. Dla 4-stanów dostępny jest fallback na 2-stany.
Co ważne
- Kodek meshletów zapewnia dekompresję 7–10 GB/s na CPU i >150 GB/s na GPU.
- Mikromapy generowane z UV i alfy, kompatybilne z Vulkan/DirectX.
- Niezależne kodowanie meshletów ułatwia paralelizm i przechowywanie w runtime.
- Wsparcie dla stanów 1/2-bitowych do optymalizacji ray tracingu i shaderów.
- Dodatkowa kompresja Zstandard dla ostatecznego rozmiaru.
Aktualizacja skierowana jest do programistów middle/senior pracujących z renderingiem GPU i ray tracingiem w silnikach gier. Integracja nie wymaga zmian w istniejących potokach.
— Editorial Team
Brak komentarzy.