W świecie tworzenia gier od zawsze przykładano bardzo dużą wagę do optymalizacji. Co prawda dzisiejszy sprzęt komputerowy jest dużo potężniejszy niż kiedyś, ale wraz z postępem technologii powstają również nowe, wymagające tytuły, które zachwycają już nie tylko historią i mechanikami, lecz także przepiękną oprawą graficzną. To właśnie ona pochłania najwięcej zasobów komputera i dlatego tak ważne jest poszukiwanie coraz sprawniejszych metod optymalizacji treści wyświetlanych na ekranie.
Żeby zrozumieć techniki, jakie deweloperzy wykorzystują do optymalizacji swoich tytułów, najpierw musimy wiedzieć, jak te treści są tworzone. W grafice komputerowej wszystkie obiekty składają się z małych kwadratów lub trójkątów połączonych wierzchołkami, tworzących swoistego rodzaju siatkę. Taka siatka może liczyć setki, tysiące, a nawet miliony wierzchołków, które razem układają się w przeróżne formy – od budowli, przez elementy przyrody, aż po postaci. Z punktu widzenia jakości wyświetlanego obiektu: im więcej wierzchołków, tym więcej detali, a przez to więcej realizmu, kluczowego elementu współczesnych gier. Jednak z perspektywy optymalizacji sytuacja jest odwrotna: im gęstsza siatka, tym większe obciążenie karty graficznej przy renderowaniu każdej klatki. Z tego właśnie powodu deweloperzy i graficy komputerowi toczą nieustanną walkę o to, by jak najwydajniej wyświetlać treści na ekranie, nie rezygnując przy tym z jakości wizualnej obiektów.
LOD, czyli poziomy szczegółowości
LOD (ang. Level of Detail) to ustandaryzowany system pozwalający uzyskać kompromis między jakością wizualną obiektu a jego optymalizacją. Polega na generowaniu dla jednego modelu kilku siatek o różnej gęstości wierzchołków, z których każdej przyporządkowuje się określony próg odległości od kamery. W ten sposób obiekt znajdujący się daleko od gracza jest renderowany przy użyciu uproszczonej siatki, liczącej zaledwie kilkaset wierzchołków. W miarę zbliżania się do niego silnik gry podmienia tę siatkę na bardziej złożoną, stosując zdefiniowany wcześniej parametr odległości. Takie rozwiązanie ma jednak swoją cenę. Choć zamiana siatek odbywa się automatycznie, to skonfigurowane parametry i ręcznie przygotowane oddzielne wersje każdego modelu są efektem żmudnej pracy deweloperów i grafików. Dlatego od pewnego czasu intensywnie poszukiwano alternatywnych metod, które mogłyby zastąpić system LOD. I tak powstał Nanite…
Nanite – LOD nowej generacji
O technologii Nanite można myśleć jak o ewolucji systemu LOD i faktycznie, patrząc na jej zalety, sprawia wrażenie ulepszonej wersji tego klasycznego rozwiązania. Nanite polega na automatycznym grupowaniu wierzchołków siatki obiektu w klastry i zarządzaniu nimi na poziomie grupy, a nie całego obiektu, jak ma to miejsce w LOD. Dzięki temu silnik wyświetla tylko te klastry, które są aktualnie widoczne z perspektywy kamery, ukrywając resztę. Klastry aktualizują się dynamicznie w zależności od odległości od gracza, jednak ze względu na ich niewielki rozmiar efekt zmiany szczegółowości jest praktycznie niezauważalny, w przeciwieństwie do systemu LOD, który podmienia całą siatkę naraz, co często burzy immersję. Ponieważ Nanite działa jako jeden zunifikowany system, silnik jest w stanie przetworzyć całą geometrię sceny jednocześnie, zamiast obsługiwać każdy obiekt z osobna. Drastycznie obniża to liczbę instrukcji przetwarzanych w każdej klatce przez kartę graficzną, co przekłada się na wzrost wydajności. Co równie istotne, Nanite jest w pełni zarządzany przez silnik gry, co znacznie odciąża deweloperów i artystów, pozwalając im skupić się na ważniejszych aspektach produkcji. Wszystkie te cechy sprawiają, że technologia ta sprawdza się znakomicie przy przetwarzaniu obiektów z bardzo gęstymi siatkami, liczącymi nawet miliony wierzchołków, co leży poza zasięgiem systemu LOD, który operuje na całym modelu, a nie jego częściach.
Czy Nanite jest zatem lepszy od systemu LOD pod każdym względem?
Jak w przypadku każdej nowej technologii, ma on swoje ograniczenia i nie sprawdza się w każdym scenariuszu. Przede wszystkim, ponieważ Nanite przetwarza dynamicznie całą siatkę obiektu, musi ona być przez cały czas wczytana do pamięci karty graficznej. Dodatkowo, poza samą siatką, w pamięci przechowywane są również metadane niezbędne do dynamicznej obsługi klastrów – między innymi pełna hierarchia grup wierzchołków zbudowanych przez system. Cały ten zestaw danych rezerwuje znaczącą ilość pamięci VRAM. Na wydajnym sprzęcie jest to niemal niezauważalne, jednak na słabszych maszynach, gdzie każdy megabajt pamięci graficznej jest na wagę złota, może stanowić poważne ograniczenie. Dla porównania: system LOD trzyma w pamięci VRAM wyłącznie aktualnie wyświetlaną siatkę, natomiast pozostałe wersje przechowywane są w wolniejszej pamięci RAM komputera. Kolejnym ograniczeniem Nanite jest wąski zakres jego zastosowań – technologia ta działa bezproblemowo wyłącznie z geometrią statyczną. Geometria dynamiczna (np. szkielety postaci używane do animacji) oraz zagregowana geometria (np. włosy, trawa czy futro) są zbyt złożone, by Nanite mógł je poprawnie obsłużyć w czasie rzeczywistym. Poważnym wyzwaniem są również powierzchnie przeźroczyste. W przypadku materiałów takich jak szkło, karta graficzna musi wielokrotnie renderować piksele przenikające przez daną powierzchnię, co przy dynamicznym charakterze pracy Nanite bywa bardziej obciążające niż klasyczne, statyczne podejście LOD. Warto też zaznaczyć, że system LOD daje tu większą swobodę konfiguracji: jeśli okno znajduje się zbyt daleko od kamery, by gracz mógł dostrzec unikalne właściwości szkła, materiał w tej wersji siatki można po prostu zastąpić tańszym, nieprzeźroczystym odpowiednikiem.
Dlaczego nowoczesne gry nadal potrzebują obu technologii?
Zrównoważenie wszystkich opisanych powyżej za i przeciw to jedna z trudniejszych decyzji projektowych, przed którymi stają twórcy gier. Nanite nie jest uniwersalnym zamiennikiem systemu LOD, to uzupełniające się narzędzia służące różnym celom. Dobrze dobrany miks obu technologii pozwala wyciągnąć z silnika maksimum możliwości – Nanite dla rozbudowanej, statycznej geometrii środowisk, a LOD tam, gdzie liczy się animacja, przeźroczystość lub wsparcie dla słabszego sprzętu. Zrozumienie mocnych i słabych stron obu rozwiązań jest dziś elementarną kompetencją każdego dewelopera, który chce świadomie gospodarować zasobami i zapewniać graczom jak najlepszą jakość wizualną.






