Podczas rozwoju Conqueror’s Blade naszym celem jest stworzenie świata, w którym możesz spełnić swoje marzenia o podbojach i zwycięstwach na polach bitew. To dlatego zajmujemy się tworzeniem rozległych regionów otwartego świata, wznosimy mury twierdz i zamków, opracowujemy mapy, na których rozgrywają się wielkie bitwy z udziałem tysięcy żołnierzy, toczących zażartą walkę na miecze lub ostrzeliwujących się z łuków i muszkietów, ginących od ognia artylerii.

Problemy związane z projektowaniem starć mas wojska

Ogromne mapy, mnóstwo postaci, przedmiotów i efektów specjalnych — to wszystko wymaga sporem mocy obliczeniowej komputerów. W ciągu trzech lat od premiery w dalszym ciągu zajmujemy się projektowaniem i wdrażaniem nowej treści, jednostek i większych map, a także szeregu ulepszeń graficznych. W efekcie spore wymagania stawia się nie tylko sprzętowi, ale i oprogramowaniu.

Interfejsy jednostek, bohaterów i map stanowią złożony system naczyń połączonych. Wszystkie elementy muszą współdziałać sprawnie w czasie, gdy ty koncentrujesz się na dowodzeniu w chaosie bitwy. A to mocno obciąża procesor. Włożyliśmy wiele pracy, aby zwiększyć liczbę klatek wyświetlanych na sekundę, umożliwiając jak największej liczbie algorytmów równoległe obliczenia, dzięki którym wykorzystujemy moc wielordzeniowych procesorów. W efekcie nasza gra w znacznym stopniu czerpie z mocy obliczeniowej CPU i nadwyręża możliwości renderowania GPU. Jeśli dodać do tego miksu ogromną ilość tekstur wysokiej jakości, które muszą zostać przetworzone, większość graczy zauważa w swoich systemach maksymalne wykorzystanie pamięci karty graficznej. Z drugiej jednak strony, wraz z ulepszaniem interfejsu gry, detali z walki i efektów scen, procesorom graficznym stawia się coraz większe wymagania w zakresie renderowania. Gry wykorzystujące dużą liczbę tekstur o wysokiej rozdzielczości również zwiększają zapotrzebowanie na pamięć karty graficznej. Czynniki te sprawiają, że gry wymagają coraz więcej zasobów obliczeniowych GPU i pamięci. Dlatego w przyszłości zamierzamy zwracać baczną uwagę na optymalizację GPU, aby zapewnić płynność rozgrywki.

Co więcej, duży obszar walk i ogromna liczba postaci zwiększają jeszcze wymagania dotyczące wykorzystania pamięci. Zdarza się często, że musimy zwiększyć wykorzystanie pamięci na rzecz wydajności przetwarzania. Przyznajemy jednak, że w naszej obecnej strategii zarządzania optymalizacją algorytmów występują pewne niedociągnięcia, chociaż jest to jeden z naszych kluczowych celów.

Podczas tworzenia nowej treści i dodawania jej do gry, dowiadujemy się o spadkach liczby klatek, opóźnieniach i problemach z płynnością gry. Doskonale zdajemy sobie sprawę z tego, jak ważna dla graczy jest kwestia wydajności. Jednak ostatecznie nie mamy innego wyjścia, jak podjąć próbę osiągnięcia kompromisu między wydajnością, a jakością grafiki.

Przyjrzyjmy się bardziej szczegółowo temu, co zrobiliśmy, aby poprawić wydajność i podzielmy się naszymi planami na przyszłość.

Zmiany, jakie zostały wprowadzone w sezonie Eternal

Każde działanie jednostki — czy ta się akurat przemieszcza, atakuje, czy wykorzystuje jakąś umiejętność specjalną — wymaga przypisania pewnych zasobów systemowych zależnie od jakości efektów specjalnych. Podczas wyświetlania efektów specjalnych to, jak bardzo obciążają system, zależy z kolei od liczby cząsteczek (ang. particles). Dlatego też liczba cząsteczek jest najbardziej intuicyjnym sposobem pomiaru wpływu efektów specjalnych na wydajność. Zmniejszymy pierwotną, zbyt dużą liczbę cząsteczek efektów specjalnych do rozsądnej wartości bez uszczerbku dla ogólnych wrażeń z gry, poprawiając w ten sposób wydajność.

Jednostki i walka

Wielu graczy doświadcza spadków liczby generowanych klatek, gdy ochotnicy zykalijscy rzucają eksplodującymi naczyniami, co jest konsekwencją tego, że w tym przypadku zaprojektowaliśmy specjalne efekty unikalnych umiejętności tej jednostki z wykorzystaniem zbyt wielkiej liczby cząsteczek.

Aby poprawić wydajność w grze przy jednoczesnym zapewnieniu dobrych efektów wizualnych, w sezonie Eternal zmniejszyliśmy liczbę cząsteczek efektów w wielu umiejętnościach (w tym również podczas eksplozji). Będzie to bezpośrednio przekładać się na zwiększenie wydajności systemów. Poniżej znajduje się krótka lista z liczbą cząsteczek przed i po niektórych zmianach.

  • „Ścięcie” silahdarów — obecnie 410 cząsteczek (wcześniej: 1200).
  • „Uderzenie śmierci” silahdarów — obecnie 890 cząsteczek (wcześniej: 1120).
  • „Ostatni bastion” Garnizonu Siwowłosych — obecnie 420 cząsteczek (wcześniej: 1120).
  • „Rzut granatami” Grenadierów Shenji — obecnie 210 cząsteczek (wcześniej: 580).
  • Ochotnicy zykalijscy — obecnie 118 cząsteczek (wcześniej: 310).
  • Działo kartaczowe (rzadkie) — obecnie 2700 cząsteczek (wcześniej: 6400).
  • „Szał” berserków — obecnie 370 cząsteczek (wcześniej: 1050).
  • Specjalne efekt jednostek pod wpływem umiejętności „Władca pola walki” bohatera z glewią — obecnie 240 cząsteczek (wcześniej: 410).

Pogoda i obiekty

Ogromna liczba obiektów na każdej mapie zwiększa immersję i wpływa również na wybory strategiczne. Każda ściana, przeszkoda i elementy takie jak detale roślinności decydują o atrakcyjności mapy. Oczywiście zagęszczenie obiektów i duże skupiska jednostek stawiają sprzętowi większe wymagania, co skutkuje niską liczbą klatek na sekundę podczas wielu bitew.

Aby temu zaradzić, wprowadziliśmy ulepszenia w zarządzaniu wydajnością obiektów dynamicznych w obszarach, w których często dochodzi do intensywnych walk, znacznie skracając opóźnienia renderowania. Dzięki temu gracze będą mogli w tych okolicznościach liczyć na znacznie bardziej stabilne FPS.

Przyszła optymalizacja wydajności

Wprowadziliśmy już ulepszenia wydajności w wielu obszarach gry, co doprowadziło do niewielkiego ogólnego wzrostu liczby klatek na sekundę. Oczywiście pewne problematyczne obszary nadal istnieją, a wiele z nich dotyczy pewnych specyficznych kluczowych punktów na mapach, co niekorzystnie wpływa na płynność rozgrywki.

Obecnie przeprowadzamy szeroko zakrojone testy, które mają nam pomóc w bardziej ukierunkowanej optymalizacji. A oto jak wyglądają nasze plany.

  • Optymalizacja podstawowych algorytmów interfejsu, aby usunąć te niepotrzebnie zbyt złożone, które zmniejszają wydajność i zwiększają wykorzystanie pamięci. Część z nich dotyczy minimapy, pasków umiejętności i informacji o jednostkach.
  • Wierność renderowania (ang. rendering fidelity) wpływa na wygląd obiektów w grze, ale najczęściej renderowanie różnych warstw nie musi być na tym samym poziomie wierności. Na przykład, walcząc na murach przy punkcie A mapy Mur Obronny, nie musisz wcale cieszyć się idealnym odwzorowaniem punktu bazy z flagą, bo to obniża wydajność systemu. Obecna wierność renderowania nie obejmuje jednak wszystkich sytuacji, więc dodamy więcej warstw renderowania zależnie od odległości od obiektów na mapie. Na przykład możemy nadać obiektom oddalonym o 100 m wierność renderowania równą 1, obiektom oddalonym o 50 m wierność na poziomie 2, obiektom oddalonym o 10 m wierność na poziomie 3, a obiektom oddalonym o 5 m wierność na poziomie 4. Zmniejszy to wymaganą moc do obliczeń renderowania, a tym samym poziom wykorzystania procesora graficznego.
  • Poprawimy kod ubiorów i symulacji jego fizyki, aby zoptymalizować wydajność wielu mniejszych modułów, takich jak włosy, frędzle przy włóczni, obramowanie szat, peleryny itp.
  • Nadal będziemy zmniejszać liczby cząsteczek efektów specjalnych, aby lepiej zrównoważyć jakość grafiki i wydajność systemu.
  • Stworzymy lepszy system dystrybucji tekstur, aby znaleźć równowagę między jakością, a płynnością i jeszcze bardziej zmniejszyć wykorzystanie pamięci.
  • Zmodyfikujemy ustawienia grafiki, dodając więcej opcji i konfiguracji, a także zmienimy system rozpoznawania elementów sprzętowych, aby poprawić ustawienia domyślne.

Każde z wyżej wymienionych ulepszeń wymaga od nas znacznych nakładów pracy, bowiem jest zwykle aspektem złożonym i zajmuje sporo czasu. Ponieważ niezmiennie dodajemy do systemu gry kolejne treści, rośnie również liczba zmiennych o niezbadanym w pełni wpływie na system. Mimo to chętnie dzielimy się z wami naszymi przemyśleniami i omawiamy otwarcie pojawiające się problemy. Z częścią z nich mierzymy się już jakiś czas; gracze podnoszą je regularnie w rozmowach z nami. Chcemy wam pokazać naszą gotowość do reagowania poprzez konkretne działania i konkretne rezultaty. Mamy świadomość, że walka z problemami z wydajnością zajmie trochę czasu, ale mimo to my nie składamy broni. Będziemy po kolei ulepszać poszczególne elementy gry.

Jesteśmy tu, by zmieniać się dla was! Chcemy również zaprosić wszystkich naszych fanów do wspólnej dyskusji. Myślimy o wprowadzeniu sprawdzianów efektów pracy nad optymalizacją drogą testów otwartych, alfa i beta. Już niedługo przekażemy więcej informacji na temat naszych planów! Zamierzamy też dzielić się z wami informacjami o tym, jak mają się sprawy z optymalizacją wydajności w przyszłych blogach twórców.