Tygodniowy raport #19 – Aktualizacja silnika oraz optymalizacja – World War 3 – Official Website
Weekly Report

Tygodniowy raport #19 – Aktualizacja silnika oraz optymalizacja

08/07/2019

 

Witajcie żołnierze!

Chcielibyśmy wam bardziej przybliżyć z technicznego punktu widzenia co to znaczy zmienić wersję silnika Unreal Engine na nowszą, jak przeprowadzana jest optymalizacja oraz z czego się ona składa. Ten raport będzie bardziej techniczny, ale postaramy się, abyście go zrozumieli.

Na początek trochę wiadomości z zeszłego tygodnia! Razem z naszymi przyjaciółmi z ameryki świętowaliśmy 4 lipca w jak najlepszy możliwy sposób – pomagając graczom aktualnie pełniących służbę wojskową oraz weteranom w ich wakacyjnej 24-godzinnej transmisji na żywo. Dodaliśmy dla nich do gry specjalną aktualizację, która zawiera emblemat na broń, aby ich wesprzeć. Emblemat oraz nowe skórki do broni możesz zobaczyć w grze już teraz. Jako firma współpracujemy z różnymi organizacjami charytatywnymi, w przeszłości wspieraliśmy weteranów oraz ich rodziny.

Aktualizacja silnika

Obecnie gra wykorzystuje silnik Unreal Engine 4.19 od ponad roku. Wielokrotnie aktualizowaliśmy silnik w przeszłości, ale w miarę zbliżania się do wydania ukończonej wersji gry oraz obsługi gry “na żywo” duże zmiany są coraz bardziej niebezpieczne. Silniki gier są niesamowicie skomplikowane i wymagają długich lat pracy nie, tylko aby je stworzyć, ale również, aby je zrozumieć, więc zmiana silnika nie jest małym zadaniem do wykonania – nie jest to jedno kliknięcie i gotowe – wiele systemów bazowych zmienia się z wersji do wersji, co oznacza dużo pracy i czasami trzeba przerobić niektóre części gry, aby gra lepiej wykorzystywała nową technologię oraz działała poprawnie.

Na dodatek wprowadziliśmy pewne zmiany w silniku dla zaspokojenia naszych potrzeb, które również należy wziąć pod uwagę przy zmianie silnika. Nasz zespół musi być uważny oraz ciągle testować wprowadzone zmiany pomiędzy kolejnymi etapami aktualizacji, aby dowiedzieć się która część jest problematyczna oraz natychmiastową ją naprawić.

To wszystko celowo jest niezrozumiałe, ale dla jasności przyjrzyjmy się jednej z większych zmian jakie pojawią się w 4.21 – czyli Replication Graph (Wykres replikacji)

Replikacja to termin określający, w jaki sposób gra oraz serwer rozmawiają ze sobą – jak pozycja gracza, rotacja, stan i wszystkie inne zmienne są przenoszone pomiędzy grą a serwerem oraz innych zachowań podczas meczu. W wersji 4.20 firma Epic Games dodała wykres replikacji, który może zdecydować, która informacja oraz z której części poziomu gry jest najważniejsza dla Ciebie, jak i również, w jaki sposób ją jak najszybciej przekazać. Pamiętaj, że serwer musi obliczyć pozycję i kierunek wszystkich graczy w danym meczu, ich ruch, stan zdrowia, stan amunicji, trafienia, penetrację ściany i rykoszety a dodatkowo musi symulować ruch pojazdów oraz kul. Wdrożyliśmy pewne sztuczki, aby zmniejszyć ilość danych przesyłanych między graczami, ale wykres replikacji pomoże w tym dużo bardziej – zmniejszając zużycie CPU zarówno serwera, jak i klienta (gracza).

Brzmi to całkiem nieźle, ale wyzwaniem jest to, że wszystko w grze polega na tym, że dane są niezawodnie przekazywane między graczami, a większość błędów w grach online jest właśnie spowodowana utratą lub ich uszkodzeniem.

Jeśli po prostu tylko zaktualizujesz silnik i nie zrobisz nic wiecej, wykres replikacji będzie bezużyteczny. Musieliśmy zmienić, w jaki sposób działa nasz Netcode, aby w pełni wykorzystać tę nową niesamowitą funkcję. Oznacza to wiele zmian, jak i testów, aby być pewnym, że wszystko działa i współpracuje lepiej niż kiedykolwiek przedtem. Dodatkowo inne zespoły również muszą to wziąć pod uwagę – stan animacji, dane o broni oraz dane pojazdów – wszystko to jest przenoszone pomiędzy graczami i musi się ze sobą należycie synchronizować.

Przechodząc do sedna: Podstawowa aktualizacja silnika sama w sobie nie jest trudna do przeprowadzenia, może zostać wykonana przez jedną osobą w ciągu kilku dni. Największym wyzwaniem jest praca po podstawowej aktualizacji, czyli upewnienie się, że wszystko działa, nie ulega awarii i współpracuje w należytym porządku razem z setkami tysięcy liniami kodu napisanych w ciągu ostatnich lat przez nas oraz Epic Games.

Optymalizacja

Drugą częścią przygotowań przed aktualizacją 0.7 jest głębsze spojrzenie na wydajność gry. W wersji 0.6 poczyniliśmy znaczne postępy, znacznie przyspieszając grę i sprawiając, że gra jest znacznie lepsza niż wcześniej, ale wciąż nie jesteśmy w pełni zadowoleni z uzyskanego wyniku.

Optymalizacja jest jednak wykonywana nie tylko przez personel techniczny – to wysiłek zespołowy, począwszy od projektowania funkcji i mechanizmów, które nie wymagają dużej mocy obliczeniowej, poprzez projektowanie poziomów uwzględniające linie wzroku i strumieniowanie poziomu, poprzez zasoby, które muszą być przygotowane w określony sposób, aby działać jak najlepiej, kończąc po stronie technicznej optymalizacji kodu i obliczeń, a także renderowania, tworząc sprytne sztuczki, aby renderować tylko to, co jest absolutnie konieczne.

Obecnie ciężko pracujemy skupiając się na trzech głównych aspektach: Optymalizacja poziomów, wykorzystaniem pamięci RAM oraz poprawieniem wydajności serwerów. Wszystko to ma ze sobą wiele wspólnego, ponieważ optymalizacja poziomów zwiększy średnią ilość FPS’ów, ale wyeliminowanie przycinek w grze (Stutteringu) oraz frezów sprawi, że gra będzie odczuwalnie płynniejsza. Posiadanie większej ilości wolnej pamięci do ładowania tekstur i obiektów spowoduje to również zmniejszenie liczby problemów z ładowaniem się gry.

Dobra wiadomość jest taka, że wiemy co należy zrobić, aby mieć pewność, że gra działa jak należy. Stale przeprowadzamy testy wewnętrzne oraz czasami wspólnie ze społecznością, jak to zrobiliśmy w zeszłym tygodniu na kliencie PTE, szukając sposobów na zwiększenie wydajności gry, dzięki tym testom planujemy jak sprawić, aby gra była jeszcze bardziej niesamowita, niż jest teraz.

Szacujemy, że od wydania wersji Early Access w październiku ubiegłego roku zwiększyliśmy średnią FPS o 200-300% dla większości graczy i zmniejszyliśmy stuttering o ponad 75%. Nadal jest wiele rzeczy, które możemy ulepszyć, ale praca, którą wykonujemy postępuje dobrze – po prostu wymaga czasu, ale możecie być pewni, że optymalizacja jest naszym priorytetem i na tym się skupiamy.

Daj nam znać, jeśli interesują Cię bardziej techniczne raporty, dołącz do naszego forum oraz za subskrybuj nasz biuletyn, jeśli jeszcze tego nie zrobiłeś!