dev-diary-article-image-devblog2
Meta na mobilność? Też bądź mobilny! Sprawdź mobilne How2Win

Blog developerski: Optymalizacja Summoner’s Rift

Gdy zaczęliśmy planować proces ulepszania Summoner’s Rift, wiedzieliśmy, że naszym głównym wyzwaniem będzie utrzymanie odpowiedniego poziomu wydajności. Nawet najbardziej wypasiona aktualizacja nie ma racji bytu, jeśli sprawia, że komputer eksploduje przy wczytywaniu mapy. Dlatego chcieliśmy mieć pewność, że nowa wersja Summoner’s Rift będzie działać równie sprawnie jak obecna. Od momentu ogłoszenia aktualizacji skupiliśmy się na optymalizacji. Teraz chcemy omówić szczegóły.

 

Inżynieria grafiki

Gdy gracz słyszy „wydajność”, zazwyczaj myśli wyłącznie o czysto technicznej stronie gry. W istocie jednak proces ten wymaga ścisłej współpracy pomiędzy grafikami i inżynierami, która umożliwi implementację nowej grafiki przy zachowaniu jak największej wydajności. W przypadku aktualizacji Summoner’s Rift nasi inżynierowie zapewnili grafikom wszelkie narzędzia i dane potrzebne do stworzenia otoczenia przyjemnego dla oka i zarazem przyjaznego dla sprzętu gracza.

Głównym celem naszych grafików było zwiększenie liczby detali, przy jednoczesnym zachowaniu poziomu wydajności z oryginalnej SR. Aby go zrealizować, musieli dysponować minimalnym zestawem wysoce zoptymalizowanych funkcji, które pozwoliłyby im stworzyć ręcznie malowaną mapę. W praktyce oznaczało to, że nasi inżynierowie musieli stworzyć całkiem nowy i bardzo wydajny program renderujący.

Program ten, w uproszczeniu, odpowiada za umieszczanie elementów geometrycznych gry na ekranie. Nasz nowy program renderujący upraszcza cały proces, tym samym zwiększając jego wydajność, zwłaszcza na starszych kartach graficznych. Pozwala on też lepiej dostosować sposób, w jaki dana karta graficzna generuje elementy otoczenia, i zoptymalizować prędkość. Program pozwolił nam także uzyskać większą kontrolę nad formatami tekstur zastosowanych na mapie, zmniejszając użycie pamięci.

Mniej znaczy więcej

Pomijając inżynieryjną stronę optymalizacji, nasi graficy szukali także innych sposobów na zwiększenie wydajności. Jedną z pierwszych rzeczy, które wzięli na warsztat, była liczba wielokątów, zwłaszcza w modelach stworów w dżungli. Większość z was wie, co mamy na myśli. Przypomnijmy jednak pokrótce, że wielokąt to zestaw punktów w przestrzeni, które współtworzą daną powierzchnię.

Skupiliśmy się na trójkątach, czyli najprostszych wielokątach. W grach używa się dużej liczby trójkątów, tworząc z nich bardziej złożone kształty. Ich dokładna liczba ma duże znaczenie dla wydajności gry na danej karcie graficznej. Słabsze maszyny dotkliwie odczuwają zwiększenie liczby trójkątów na ekranie. Dlatego przy okazji aktualizacji postanowiliśmy ograniczyć liczbę wielokątów, co bardzo przysłużyło się optymalizacji.



Zwróciliśmy także uwagę na liczbę „kości”, czyli elementów odpowiadających za przemieszczanie lub obracanie obiektów na ekranie. Każdy potwór w dżungli ma określoną liczbę wirtualnych kości, które pozwalają animować jego ruchy i ataki. Jak się zapewne domyślacie, im mniej takich kości, tym większa wydajność gry, więc przygotowując aktualizację staraliśmy się ograniczyć ich liczbę w ruchomych elementach otoczenia.

Dwa powyższe zabiegi dały nam kolejną okazję do zwiększenia wydajności. Zauważyliśmy, że elementy mapy, takie jak wieże i stwory, kiepsko znoszą „deformację”, czyli przemieszczanie wielokątów w oparciu o ruchy kości. Nowa architektura zastosowana w aktualizacji pozwoliła nam zmniejszyć liczbę połączeń między poszczególnymi wielokątami i kośćmi, a co za tym idzie, jeszcze bardziej zwiększyliśmy wydajność.

Rozmiar ma znaczenie

Kolejnym krokiem na drodze do optymalizacji był proces zwany „atlasowaniem”, łączący „teksturowanie” (nakładanie skórki na model) i „mapowanie UV” (wyświetlanie tekstury na trójwymiarowym modelu) w bardziej wydajny sposób.

Przestrzeń UV określa sposób, w jaki dany model odczytuje teksturę i które jej części pojawią się na jego powierzchni. Zazwyczaj pomiędzy poszczególnymi UV występują przerwy, przez co model i jego tekstura wygląda mniej więcej tak:

Atlasowanie łączy większą liczbę tekstur w jedną, dużą, którą możemy kompresować lub powiększać, w zależności od docelowego poziomu detali. To prawdziwe zbawienie, gdy zależy ci na oszczędzaniu cennej pamięci. Dla przykładu, zamiast wczytywać pięć tekstur o rozdzielczości 1024×1024, możemy umieścić w grze jedną o rozdzielczości 2048×2048, zwiększając tym samym wydajność.

I wiele innych drobiazgów

Mamy nadzieję, że wyjaśniliśmy nieco techniczne aspekty nowego wyglądu Summoner’s Rift. Oczywiście zmiany mające na celu zwiększenie wydajności nie ograniczają się do ww. elementów − tu moglibyśmy wymienić jeszcze zmiany w tuszowaniu postaci, usprawnienia pola widzenia, upłynnienie siatki nawigacyjnej i rozmaite pomniejsze poprawki. Krótko mówiąc, wprowadzaliśmy usprawnienia wszędzie, gdzie się tylko dało. Optymalizacja pod kątem obecnie używanych maszyn była dla nas kwestią priorytetową i poświęcimy jej wielką uwagę także w dalszych fazach produkcji, zaczynając od otwartej wersji beta.

Artykuły premium


Jeśli zauważyłeś literówkę/błąd we wpisie - prosimy o zgłoszenie tego poprzez specjalny formularz kontaktowy - dzięki automatycznemu systemowi powiadomień będziemy mogli błyskawicznie usunąć błąd.