Raport z prac konsolowych #3

W tym tygodniu opowiemy o różnych rodzajach LOD i wyjaśnimy czemu ma wpływ na płynność działania gry.

Witajcie!

Przedstawiamy kolejną część raportu z prac konsolowych! W tym tygodniu opowiemy o różnych rodzajach LOD, wyjaśnimy co oznacza LOD i czemu ma wpływ na płynność działania gry.

LOD oznacza poziom szczegółowości, a wiele obiektów w PUBG ma różne rodzaje LOD. W celu zapewnienia graczom jak najlepszych wrażeń z gry zależnie od okoliczności używa się wyższego lub niższego LOD do uzyskania optymalnej równowagi pomiędzy płynnością a jakością obrazu. W PUBG używa się 3 poziomów LOD w zależności od sytuacji: LOD 2, LOD 1 lub LOD 0 – ten ostatni oznacza największą szczegółowość. Im większa szczegółowość, tym większej wydajności wymaga. Płynność działania gry jest ważna, ale musimy również starać się, żeby użycie mniej szczegółowego LOD nie wpłynęło negatywnie na rozgrywkę.

Znanym większości graczy przykładem zastosowania LOD są budynki wyglądające jak z plasteliny, kiedy się je widzi z daleka podczas skoku ze spadochronem. To pierwszy, najmniej szczegółowy LOD. Na początku meczu pobliskie budynki też mogą tak wyglądać, ponieważ jest wtedy mnóstwo rzeczy do przetworzenia naraz. Szczegółowość budynków wzrośnie możliwie najszybciej do LOD 0 (najwięcej szczegółów), ale szybkość tego procesu zależy w dużym stopniu od używanego sprzętu.

Postacie w grze korzystają z trzech różnych rodzajów LOD: Mesh LOD, Bone LOD i AnimNode LOD. Najpierw pokrótce przedstawimy Mesh LOD i Bone LOD, po czym dogłębnie zajmiemy się głównym tematem tej części raportu: AnimNode LOD.

Mesh LOD i Bone LOD

Mesh LOD (LOD siatki) określa LOD modelu postaci. Postacie znajdujące się blisko gracza są renderowane z LOD 0 (najwięcej szczegółów), a im dalej od danej postaci odejdziesz, tym mniej szczegółowy będzie jej model. Dzieje się to etapami, przy LOD 2, LOD 1 i LOD 0. Zwykle nie zauważa się przejść między poziomami, bo dochodzi do nich w dużej odległości, przy której postacie są już bardzo małe na ekranie.

Bone LOD (LOD kości) działa w ten sam sposób, ale określa liczbę kości aktywnych w animacjach postaci. To oznacza, że przy dużych odległościach gra nie musi przetwarzać szczegółowych animacji zmniejszających płynności gry. Mniejszy poziom szczegółowości oznacza mniej wierzchołków i mniej danych kości do przetworzenia. Prowadzi to do dużego usprawnienia działania gry w porównaniu z brakiem optymalizacji LOD.

Dodatkowe poziomy LOD (3, 4 itd.) na pewno zwiększyłyby jeszcze płynność gry przez zmniejszenie wymaganej mocy obliczeniowej CPU, ale niestety w konsolach przyniosłyby bardzo duże dodatkowe obciążenie pamięci, transferów danych itd., w związku z czym nie da się ich w tej chwili skutecznie wprowadzić.

AnimNode LOD

Animacje też mają swoje LOD, nazywane AnimNode LOD, ale nie możemy stosować ich w takim stopniu jak Mesh LOD czy Bone LOD, bo zmiany wizualne są bardzo widoczne.

Animacje w rodzaju biegania, spoglądania w bok czy celowania przez przyrządy są związane z kontrolą szkieletu postaci. Animacje odnoszące się do szkieletu są obliczane dla każdej z kończyn, co wymaga niezależnych obliczeń i animacji rąk, nóg, szyi itd. 

Opracowaliśmy dodatkową metodę LOD opartą na wielkości modelu postaci w stosunku do całego ekranu. Następnie ustawiliśmy parametry, by automatycznie i dynamicznie wybierały mniej szczegółowy AnimNode LOD modeli postaci tylko wtedy, gdy postać znajduje się w odległości, przy której nie widać zmiany wyglądu. To oznacza większą płynność bez zauważalnego negatywnego wpływu na rozgrywkę czy efekt wizualny.

Uwaga: w przykładach graficznych widocznych w dalszej części tego artykułu zastosowano zmiany AnimNode LOD przy bardzo małej odległości, by ułatwić zrozumienie jego działania. Podczas gry w PUBG AnimNode LOD zmienia się tylko przy dużych odległościach.

Oto pierwszy przykład działania AnimNode LOD w grze:

ConsoleReport-LevelOfDetail-1_PUBG_Forum_EN_516x527.png.2a96672d0a995968c482c4f2cd11fce2.png

AnimNode LOD w trybie włączonym i wyłączonym

Na powyższym obrazku widać różnice pomiędzy włączonym a wyłączonym AnimNode LOD. 

Po całkowitym wyłączeniu AnimNode LOD animacje wykonywane przez postać są wyłączone i nie widać ich na modelu, co zwiększa płynność działania gry. Kiedy jednak gracz kucnie, AnimNode LOD musi działać w dolnej połowie ciała, inaczej gracz będzie wyglądał, jakby stał.

W następnym przykładzie ustawiliśmy w naszym środowisku deweloperskim wyłączanie AnimNode LOD, kiedy postać zajmuje 10% ekranu, żeby ułatwić wam zrozumienie, co się dzieje przy wyłączonym AnimNode LOD.

W czasie gry AnimNode LOD jest wyłączony tylko wówczas, gdy postać jest zbyt mała, by dało się zauważyć zmiany.

ConsoleReport-LevelOfDetail-2_PUBG_Forum_EN_896x504.gif.ce8f9014dab3d1a277cbe94a5dc65617.gif

Oddalanie się do postaci z wyłączonym AnimNode LOD

ConsoleReport-LevelOfDetail-3_PUBG_Forum_EN_896x504.gif.e83515fbd870f6023a629b12c9bdbbdc.gif

Przybliżanie się do postaci z wyłączonym AnimNode LOD

Możecie się też zastanawiać: „Co się dzieje, kiedy patrzę przez lunetę na odległego przeciwnika?”.

Podczas patrzenia przez lunetę na odległego przeciwnika oglądany model postaci wypełnia większą część ekranu, więc AnimNode LOD będzie działał dynamicznie w zależności od rozmiaru modelu postaci w stosunku do całego ekranu, by nie ucierpiała na tym rozgrywka.

W widocznym poniżej przykładzie ustawiliśmy w naszym środowisku deweloperskim wyłączanie AnimNode LOD, kiedy model postaci zajmuje 10% całego ekranu, by łatwiej było dostrzec, co się dzieje.

ConsoleReport-LevelOfDetail-4_PUBG_Forum_EN_896x504.gif.0d41410dfdd1115c8fbde44f8d2c0515.gif

Celowanie z wyłączonym AnimNode LOD

Dla przypomnienia: podczas normalnej gry w PUBG zmiany te następują tylko wówczas, kiedy model postaci znajduje się bardzo daleko i zajmuje bardzo małą część ekranu, w związku z czym nie widać różnicy.

Wydajność AnimNode LOD

Na poniższym wykresie porównano wyłączony AnimNode LOD (na niebiesko) i wyłączony AnimNode LOD (na czerwono) przy 10 postaciach. Po wyłączeniu AnimNode LOD osiąga się zwiększenie wydajności wynoszące ok. 10%.ConsoleReport-LevelOfDetail-5_PUBG_Forum_EN_1000x618.png.658cddaeb87ff1ced532fbc2d77c81ff.png

Pomiarów dokonano przy użyciu Xbox One X

Im więcej modeli postaci znajduje się na obszarze z wyłączonym AnimNode LOD, tym większe są zyski wydajności w porównaniu z włączonym AnimNode LOD.

Podsumowując tę część tekstu, można powiedzieć, że niektóre efekty animacji modeli postaci są wyłączane lub ograniczane, kiedy postać jest tak daleko, że nie widać zmiany. Owocuje to mniejszym zużyciem zasobów i wzrostem płynności działania gry.

Do zobaczenia w kolejnej części raportów z prac konsolowych.

Dziękujemy za przeczytanie! 
Ekipa konsolowa PUBG

Dyskusja o artykule
Udostępnij ten artykuł