Geometria

Gry 3D, które działają dobrze na największej liczbie urządzeń, zaczynają się od grafiki 3D, która została tak zaprojektowana z myślą o jak najlepszym wykorzystaniu procesorów graficznych. W tym przewodniku opisujemy optymalizacje i sprawdzone metody dotyczące zasobów 3D na urządzeniach mobilnych, dzięki którym możesz zwiększyć wydajność gry i zminimalizować zużycie energii.

Część tego artykułu została przygotowana na podstawie pracy współtworzonej przez Arm Limited.

Definicja geometrii

Geometria, inaczej siatka wielokątów, to zbiór wierzchołków, krawędzi i płaszczyzn, które tworzą kształt obiektu 3D. Może to być samochód, broń, środowisko, postać lub dowolny zasób wizualny w grze.

Rysunek 1. Wierzchy, krawędzie i trójkąty sześcianu.

Geometria składa się z tych części:

  • Wertyki: rzeczownik w liczbie mnogiej od wierzchołka. Określają one strukturę obiektu w przestrzeni 3D.

  • Brzegi: dwa wierzchołki połączone linią prostą.

  • Trójkąt: 3 wierzchołki połączone ze sobą 3 krawędziami tworzą trójkąt. Czasami określa się to jako wielokąt lub płaszczyznę. Oprogramowanie 3D, takie jak 3ds Max, Maya czy Blender, używa się zwykle do pracy z quadami. Czterokąty to wielokąty, które łatwiej modyfikować i z nich korzystać. Po wyrenderowaniu wielokąty są wyświetlane na ekranie jako trójkąty.

Więcej informacji o geometrii znajdziesz w tych sekcjach:

Wykorzystanie trójkątów i wielokątów

W tej sekcji przedstawiono sprawdzone metody korzystania z trójkątów i wielokątów. Oto niektóre z zaleceń:

Zmniejsz liczbę trójkątów

Zbyt wiele trójkątów obniża wydajność gry.

Użyj jak najmniejszej liczby trójkątów. Zalecamy użycie tylko tego fragmentu, aby uzyskać odpowiednią jakość. Tworząc treści do gry mobilnej, weź pod uwagę wpływ na wydajność. Przetwarzanie wierzchołków jest kosztowne. Im mniej wierzchołków, tym lepsza jest ogólna wydajność gry. Poza tym im mniej trójkątów, tym na większej liczbie urządzeń można uruchomić grę bez wydajnego procesora graficznego.

Ten obraz pokazuje, że jakość obrazu jest wystarczająca przy mniejszej liczbie trójkątów:

Obiekt po lewej ma 584 trójkąty, a obiekt po prawej – 704.

Rysunek 2. Porównanie dwóch obiektów o różnej liczbie trójkątów, które wyglądają tak samo w trybie zacienionym. Z obiektu po lewej stronie usunięto krawędzie, które nie nadają się do sylwetki.

Na platformach mobilnych wspólna maksymalna liczba wierzchołków na jedną siatkę wynosi 65 535. Aby zapewnić maksymalną zgodność, musisz zmieścić się poniżej tej wartości.

Przyczyną tego limitu jest to, że wszystkie GPU zapewniają obsługę tylko 16-bitowych indeksów,które mogą przyjmować wartość od 0 do 65 535 wierzchołków. Większość nowoczesnych procesorów graficznych obsługuje 32-bitowe indeksy, które reprezentują od 0 do 4 294 967 295 wierzchołków, ale nie wszystkie. Jeśli podczas korzystania z 16-bitowych indeksów przekroczysz obsługiwany zakres, geometria będzie brakujące lub niewłaściwie renderowana.

Zawsze wyświetlaj i testuj grę na urządzeniach, na których zamierzasz ją opublikować, a nie na monitorze PC. Niektóre modele o dużej szczegółowości mogą nie być renderowane prawidłowo lub nawet nie być widoczne na urządzeniach mobilnych.

Zalecamy stosowanie większej liczby trójkątów w przypadku obiektów na pierwszym planie, a mniejszej w obiektach w tle. Przydaje się to w grach ze statycznym punktem widzenia. W przykładzie poniżej pokazujemy, jak odpowiednio wykorzystać szczegóły różnych obiektów.

Szczegóły obiektów na pierwszym planie są tworzone za pomocą trójkątów. Szczegóły tła są wytłoczone na płaskich powierzchniach.

Rysunek 3. Ten przykład pokazuje wysoki poziom szczegółowości obiektów na pierwszym planie w porównaniu z obiektami w tle.

Maksymalna liczba trójkątów, których należy użyć w przypadku modelu, zależy od urządzenia i treści. Jeśli na ekranie jest więcej obiektów, dla każdego modelu użyj mniejszej liczby trójkątów. Jeśli wyświetlają się tylko dwa lub trzy obiekty, mogą one zawierać więcej trójkątów.

Poniższy przykład przedstawia 2 modele z różnych wersji demonstracyjnych. W wersji demonstracyjnej Circuit VR jest tylko 1 postać robota. Ponieważ występuje tylko jeden obiekt, model robota ma większą liczbę trójkątów. Drugi model pochodzi z wersji demonstracyjnej Armies. W tej prezentacji zawierają setki żołnierzy w każdym kadrze, więc każdy z nich ma mniej trójkątów.

Rysunek 4. Porównanie liczby trójkątów dla 2 różnych przypadków użycia. Po lewej stronie robot CircuitVR ma 11 tysięcy trójkątów. Po prawej stronie „Żołnierz Armii” ma 360 trójkątów.

Przykład użycia trójkąta

Poniższy rysunek przedstawia przykładową liczbę trójkątów używanych w demonstracji technicznej Armies.

W wersji demonstracyjnej Armies, czyli 64-bitowej, mobilnej wersji demonstracyjnej w Unity, kamera zawiera wiele animowanych postaci. Łącznie każda klatka renderuje około 210 000 trójkątów. Taka liczba trójkątów umożliwia stabilne działanie wersji demonstracyjnej z przybliżoną szybkością około 30 klatek na sekundę (FPS).

Rysunek 5. Przykładowy wyrenderowany obraz z prezentacji technicznej The Armies, który pokazuje liczbę użytych trójkątów.

Największe z tej sceny wieże armatkowe mają około 3000 trójkątów, ponieważ zajmują dużą część ekranu.

Każdy z postaci ma około 360 trójkątów. Jest ich bardzo dużo i są widoczne tylko z daleka, więc nie mają zbyt wielu trójkątów. Z perspektywy kamery wygląda to dobrze.

Rysunek 6. Widok żołnierzy z niskiego trójkąta w prezentacji technicznej Armies.

Używaj trójkątów w ważnych obszarach

Wierzchołki są bardzo drogie na platformach mobilnych. Aby nie zmarnować budżetu na przetwarzanie danych, umieszczaj wierzchołki w obszarach, które mają wpływ na jakość obrazu gry. Małe szczegóły obiektu 3D mogą być niewidoczne na ostatnim ekranie gry. Drobne szczegóły mogą być niewidoczne ze względu na niewielki rozmiar ekranu i rozmieszczenie obiektów 3D.

Zamiast skupiać się na szczegółach, skup się na dużych kształtach, które tworzą sylwetkę. Poniższy obraz przedstawia przykład ostrości na sylwetce:

Rysunek 7. Czerwona linia wokół robota odzwierciedla jego sylwetkę.

Zalecamy, aby ograniczyć miejsca, które są rzadko spotykane z perspektywy kamery. Może to być na przykład spód samochodu lub tył szafy. Jeśli jakaś część obiektu nigdy nie będzie widoczna, usuń tę część.

Usuwanie części obiektu musi być wykonywane z rozwagą, ponieważ może ograniczyć możliwość jego ponownego wykorzystania. Jeśli na przykład usuniesz dolną część siatki tabel, użytkownik zauważy tę sekcję, gdy zostanie ona umieszczona do góry nogami.

Nie modeluj drobnych szczegółów za pomocą siatek trójkątnych o dużej gęstości. Używaj tekstur i normalnych map, aby uzyskać najdrobniejsze szczegóły. Poniższy przykład pokazuje tę samą siatkę z normalną mapą i bez niej.

Rysunek 8. Porównanie modelu z zastosowaną mapą normalną i bez niej.

Usuń mikrotrójkąty

Mikrotrójkąty to bardzo małe trójkąty, które nie składają się na ostateczną wizualizację sceny.

Wszystkie obiekty 3D o dużej liczbie wielokątów mają problemy z mikrotrójkątami, gdy zostaną oddalone od kamery. Nie istnieje standard branżowy definiujący mikrotrójkąty, ale mikrotrójkąty są zwykle rozumiene jako trójkąty mniejsze niż 1–10 pikseli na końcowym zdjęciu. Mikrotrójkąty są niekorzystne, ponieważ GPU musi wykonywać całe przetwarzanie na wszystkich tych trójkątach, nawet jeśli nie przyczyniają się do ostatecznego obrazu.

Mikrotrójkąty są spowodowane 2 czynnikami:

  • Szczegóły, które są za małe i składają się z wielu trójkątów.
  • Przedmioty znajdujące się dalej od kamery, w których jest dużo trójkątów.

Rysunek 9. Wpływ odległości na mikrotrójkąty.

Na Rysunku 9 robot działający na pierwszym planie nie ma mikrotrójkątów. Robot działający w tle, bo każdy trójkąt ma długość od 1 do 10 pikseli.

Rysunek 10. Porównanie mikrotrójkątów na bardzo szczegółowych modelach. Większość trójkątów w wyróżnionym obszarze jest zbyt mała, aby była widoczna na ekranach telefonów.

W przypadku obiektów znajdujących się w większej odległości od aparatu użyj poziomu szczegółowości (LOD). Zmniejsza to złożoność obiektu i jest prostsze. W rezultacie obiekt z trójkątami jest mniej gęsty.

Nie modeluj szczegółów z wieloma trójkątami. Aby uzyskać taki poziom szczegółowości, użyj tekstur i map standardowych. Możesz scalać wierzchołki i szczegóły trójkątów, które są zbyt małe i nie mają wpływu na efekt końcowy.

Pamiętaj, aby zmniejszyć liczbę mikrotrójkątów, ponieważ mogą one wpływać na przepustowość pamięci. Więcej trójkątów oznacza więcej danych wysyłanych do GPU. Na urządzeniu mobilnym może to mieć wpływ na żywotność baterii. Większe zużycie energii może powodować ograniczanie ciepła, które ogranicza maksymalną wydajność GPU.

Unikaj długich i cienkich trójkątów

Są to trójkąty, które po wyrenderowaniu na końcowym obrazie mają w jednym wymiarze mniej niż 10 pikseli i rozciągają się daleko na cały ekran. Przetwarzanie długich, cienkich trójkątów jest zwykle droższe niż inne trójkąty.

Na ilustracji poniżej ścięcie filara ma długi, cienki trójkąt, gdy patrzysz z daleka. Takie ścięcia nie stanowią problemu w przypadku zbliżenia.

Rysunek 11. Ścięcie filara ma długi, cienki trójkąt.

Zalecamy usunięcie długich, cienkich trójkątów ze wszystkich obiektów, jeśli to możliwe.

W przypadku błyszczących obiektów długie i cienkie trójkąty mogą powodować migotanie światła podczas ruchu kamery. Funkcja LOD pomaga usunąć długie, cienkie trójkąty, gdy obiekt znajduje się daleko od kamery.

Jeśli to możliwe, postaraj się, by wszystkie trójkąty były jak najbliżej równoboczne. Dzięki temu trójkąty mają więcej pola i mniej krawędzi. Długie, cienkie trójkąty mają gorsze wyniki w porównaniu z większymi. Więcej informacji o polu trójkąta znajdziesz w artykule Tryb triangulacyjny.

Poziom szczegółów

Poziom szczegółowości to technika, która zmniejsza złożoność, gdy obiekty stają się bardziej oddalone od widza. Najczęstsza forma LOD obejmuje wiele wersji siatki ze coraz mniejszą liczbą wierzchołków. LOD nie tylko zmniejsza liczbę wierzchołków do przetworzenia, ale także eliminuje problem mikrotrójkątów. Poprawia się też dla obiektów znajdujących się w większej odległości od kadru.

Zalecamy używanie LOD, gdy tylko jest to możliwe. Skup się na sylwetce obiektu. Aby uzyskać redukcję wierzchołków, najlepiej skupić się na płaskich obszarach. Poniższy przykład przedstawia użycie funkcji LOD zastosowanej do modelu robota.

Po lewej stronie znajduje się robot o największej liczbie szczegółów i największej liczby trójkątów. Po prawej stronie robot jest dalej oddalony, ma mniej szczegółów i ma mniej trójkątów.

Rysunek 12. Porównanie liczby wierzchołków używanych jako zmiany LOD.

Na Rysunku 12 trudno dostrzec różnicę między tym samym obiektem, który składa się z 200 trójkątów lub 2000 trójkątów znajdujących się w odległości. Obiekt z większą liczbą trójkątów wiąże się z wysokim kosztem zasobów, ale nie poprawia wyglądu podczas oglądania z pewnej odległości.

Rysunek 13. Porównanie odległych modeli o różnych liczbach trójkątów.

Ten model może również odnosić się do złożoności cieniowania i rozdzielczości tekstur. Przy niższym LOD można używać innych materiałów z prostszymi cieniami i mniejszą liczbą tekstur. Trzeba też zadbać o to, aby tekstury były wyposażone w mimappy, dzięki czemu do odległych obiektów stosuje się tekstury o niższej rozdzielczości. Te wskaźniki zwiększają wydajność, ale jednocześnie zwiększają rozmiar danych.

Nie zalecamy używania trybu LOD w grach, w których kamera i obiekty są statyczne. Największą zaletą funkcji LOD jest to, że obiekty poruszają się w kierunku i oddalają się od kamery. Obiekty statyczne się nie przesuwają, więc LOD nie przynosi żadnych korzyści.

Rysunek 14. Scena ze statycznej kamery z demonstracji technologicznej Armies, która nie wymaga użycia LOD.

Współczynniki LOD

Zmniejszając liczbę trójkątów w celu LOD, używaj stałego współczynnika proporcji. Zalecamy zmniejszenie trójkątów o 50% na każdym poziomie.

Nie stosuj LOD w prostych obiektach. Obiekty, które mają już małą liczbę trójkątów, nie są objęte LOD. Poniższy przykład z wersji demonstracyjnej gry The Armies pokazuje, jak wygląda gra z obrazem statycznym i niskimi trójkątami.

Rysunek 15. Porównanie modeli w miarę spadku kosztu długoterminowego.

Sprawdź, czy poziomy LOD zmieniają się w odpowiednich odległościach od kamery. Opieraj się na tym, jak są one używane w grze.

Rysunek 16. Porównanie wyglądu modelu LOD 3 z bliska i w zamierzonej odległości.

Nie ma sztywnych wartości, które określają, ile LOD można uzyskać dla danego obiektu. To zależy od rozmiaru obiektu i jego znaczenia. Na przykład postać w grze akcji lub samochód w grze wyścigowej może mieć więcej poziomów LOD niż małe obiekty w tle, takie jak drzewo.

Pamiętaj, że zbyt duże obciążenie LOD pochłania zasoby procesora. Aby procesor mógł określić, który poziom usług ma wyświetlić, wymagana jest większa moc obliczeniowa. Usługi LOD pochłaniają też ilość pamięci, co zwiększa rozmiar pliku i wykorzystanie pamięci VRAM. Utworzenie i weryfikacja modeli LOD również zajmuje dodatkowy czas.

Istnieją 2 sposoby tworzenia siatek LOD: ręcznie i automatycznie.

  • Siatki LOD można tworzyć ręcznie za pomocą dowolnego oprogramowania 3D.
    • Aby to zrobić, usuń pętle krawędzi lub zmniejsz liczbę wierzchołków na obiekcie 3D.
    • Dzięki temu wykonawca ma największą kontrolę nad efektem końcowym, ale może potrwać dłużej.
  • Siatki LOD mogą być tworzone automatycznie.
    • Możesz użyć modyfikatora w pakiecie 3D, np. ProOptimizer w 3ds Max lub Generate LOD Meshes w aplikacji Maya.
    • Możesz w tym celu skorzystać z oprogramowania do generowania LOD, takiego jak Simplygon czy InstaLOD.
    • Niektóre silniki gier mają funkcję automatycznego generowania LOD, która umożliwia tworzenie i stosowanie siatek LOD.

Sprawdzone metody

Istnieją też dodatkowe techniki, które pozwalają zmniejszyć ilość zasobów wymaganych do gry, które jednocześnie zapewniają wysoką jakość grafiki.

Grupy wygładzania lub niestandardowe normalne wierzchołki

Za pomocą grup wygładzania lub niestandardowych norm wierzchołkowych możesz określać twardość krawędzi i zmieniać wygląd modelu. Grupa wygładzania pomaga uzyskać lepsze cieniowanie w kierunku niskiej grafiki. Grupa wygładzania wpływa również na podział wysp UV i jakość normalnych map podczas pieczenia.

Przykład grupy wygładzania. Po lewej stronie dla robota zastosowano grupę wygładzania.

Rysunek 17. Porównanie modelu z grupą wygładzania i bez niej.

Jeśli w modelu 3D zaimplementujesz grupę wygładzania, musisz ją wyeksportować z oprogramowania 3D i zaimportować do silnika.

Topologia sieci typu mesh

Podczas tworzenia nowego zasobu 3D upewnij się, że ma on uporządkowaną topologię. Czysta topologia jest niezbędna dla postaci i innych obiektów, które się animują i zmieniają. Topologia nie musi być idealna. Pamiętaj, że użytkownicy nie zobaczą modelu modelu, a tekstury i materiały będą miały większy wpływ na wygląd modelu.

Rysunek 18. Topologia, schemat i ostateczna wersja skały z demonstracji technologicznej Armii.

Uwydatnienie kształtów

Możesz wyolbrzymić niektóre kształty, aby ułatwić interpretację modeli. To zależy od rodzaju i stylu gry. Ekrany urządzeń mobilnych są małe, więc uchwycenie bardzo małych kształtów może być trudne. Przesadna wyolbrzymienie tych kształtów może pomóc użytkownikom dostrzec kształt nawet z pewnej odległości.

Możesz na przykład stworzyć postaci z dużymi rękami, aby łatwiej je było zobaczyć.

Rysunek 19. Przykładowy model, który pokazuje przesadne proporcje, aby poprawić widoczność.