Jednym z najczęstszych wąskich gardeł wydajności w projektach Unity 3D jest liczba draw call-i wymaganych do wyrenderowania sceny. Za każdym razem, gdy GPU przełącza się między różnymi teksturami lub materiałami, CPU musi wysłać nowy draw call – co generuje dodatkowe obciążenie, które szybko narasta, szczególnie na urządzeniach mobilnych i w buildach WebGL, gdzie zasoby są mocno ograniczone.
Texture atlassing to sprawdzona technika redukcji tego problemu, polegająca na łączeniu wielu mniejszych tekstur w jedną, większą atlasową teksturę. Zamiast przełączać się między oddzielnymi materiałami, GPU może renderować wiele obiektów w jednej partii, co znacząco zmniejsza liczbę draw calli oraz obciążenie CPU.
Podejście to nie tylko poprawia czas renderowania klatek, ale także wspiera efektywne zarządzanie pamięcią i szybsze ładowanie, co czyni je kluczowym elementem optymalizacji gier na platformach, gdzie wydajność i responsywność mają krytyczne znaczenie. W Unity texture atlassing można zintegrować z pipeline’em przy użyciu narzędzi niestandardowych lub gotowych pluginów, a w połączeniu z łączeniem siatek (mesh merging) czy GPU instancing staje się istotnym elementem każdej strategii optymalizacji.
Nasze rozwiązanie
Stworzyliśmy niestandardowe narzędzie, które analizuje materiały użyte w scenach i prefabach, a następnie automatycznie generuje atlasy tekstur wraz z zoptymalizowanymi shaderami i materiałami, które z nich korzystają w bardzo wydajny, celowo zakodowany sposób.
Kluczowe funkcje
- Nieinwazyjny workflow – Może być dodany lub usunięty w dowolnym momencie bez wpływu na istniejące sceny. Developerzy korzystają z Unity jak zwykle, a generowanie, łączenie i optymalizacja odbywają się automatycznie podczas procesu budowania lub przygotowywania podglądu na żywo.
- Podgląd na żywo – Natychmiastowa wizualizacja wygenerowanych atlasów i shaderów.
- Dedykowane GUI konfiguracyjne – Interfejs do ustawień, statystyk i przeglądu działania narzędzia.
- Szerokie wsparcie shaderów – Automatyczna obsługa najczęściej używanych typów shaderów, z możliwością rozszerzenia dla shaderów niestandardowych poprzez szablony i konfigurację.
Rezultaty
System znacząco zmniejszył czas przetwarzania CPU/GPU na klatkę, co przełożyło się na wyższy FPS, płynniejszą rozgrywkę i bardziej stabilną wydajność na różnych platformach.
Wykorzystane technologie:
Unity 3D, C#