Przeprowadzka do Krakowa · Otwarty na role Senior Unity, hybrydowo lub zdalnie · 2 miesiące wypowiedzenia

Przejdź do treści
Krzysztof Pławski
← Wszystkie projekty

PowerWash Simulator VR

Hit z konsol, w który zagrało 17 milionów graczy, przeniesiony na mobilny chipset — z niestabilnych 20 do stabilnych 90 kl./s na Meta Queście.

© FuturLab

Wyzwanie

PowerWash Simulator to wieloplatformowa gra, w którą zagrało 17 milionów graczy. Powstała z myślą o płaskich ekranach i sprzęcie konsolowym. Zadanie polegało na przeniesieniu jej na Meta Questa — samodzielne gogle działające na mobilnym chipsecie — tak, by nie straciła tego, co daje graczom satysfakcję.

Kiedy zaczynałem, gra działała w goglach w niestabilnych 20 kl./s. W VR to nie kwestia dopracowania. Od tego graczom robi się niedobrze.

Moje podejście

Zacząłem jako elastyczny jednoosobowy zespół i odpowiadałem za port VR od początku do końca. Zespół rósł razem z projektem: jedna osoba przez pierwsze 18 miesięcy, dwie przez kolejne sześć i pięć przez ostatnie siedem. Zadanie polegało na przeniesieniu systemów, sterowania i UX gry z płaskiego ekranu do VR, a potem zmieszczeniu całości w budżecie CPU i GPU samodzielnych gogli.

  • Przenieść całą grę. Przeniosłem do VR istniejące systemy, sterowanie i UX gry oraz zaimplementowałem całe jej UI diegetyczne (więcej poniżej).
  • Multiplayer. Zaimplementowałem multiplayer w wersji VR. Działa tak samo jak w grze podstawowej: kooperacja oparta na pokojach, na Photon PUN2, z autorytatywnym serwerem. Główny gracz otwiera pokój i przekazuje pozostałym jego kod. Gra obsługuje 2 graczy w trybie kariery i 6 w trybie swobodnym.
  • Niczego nie wycinać z gry podstawowej. Płynność wzięła się z renderowania i poziomów, a nie z usuwania zawartości. Użyłem Application SpaceWarp i Fixed Foveated Rendering oraz włożyłem sporo pracy w optymalizację poziomów VR: frustum culling, panoramiczne (360°) zrzuty otoczenia, sprite’y 2D zamiast odległej geometrii, LOD-y i łączenie meshy.
  • Zadbać, żeby w VR brzmiało i działało naturalnie. Wiele dźwięków zastąpiono wariantami przestrzennymi w FMOD, żeby zwiększyć immersję, a lokomocję dostrojono pod kątem komfortu (więcej poniżej).
  • Chronić doświadczenie gracza. Żadna optymalizacja nie mogła pogorszyć wrażeń z gry. Zysk w klatkach, który w goglach odczuwa się gorzej, nie jest zyskiem.
Budżet wydajności na Queście
  • Application SpaceWarp

    Aplikacja renderuje mniej klatek, a runtime syntetyzuje brakujące na podstawie wektorów ruchu.

  • Fixed Foveated Rendering

    Krawędzie każdej soczewki są cieniowane w niższej rozdzielczości — tam, gdzie oko najmniej to zauważa.

  • Optymalizacja poziomów

    Frustum culling, LOD-y i łączenie meshy, a także panoramiczne (360°) zrzuty otoczenia i sprite’y 2D w miejscu odległej geometrii.

  • Rozmieszczenie dźwięku przestrzennego

    Wiele dźwięków zastąpiono wariantami przestrzennymi w FMOD, dla większej immersji.

  • Strojenie lokomocji

    Hybrydowe kucanie: prawdziwe kucnięcie przenosi się do gry, a przycisk obsługuje graczy siedzących.

Celem była płynność na poziomie częstotliwości odświeżania gogli — bez cięć, które gracz by odczuł.

Lokomocja i komfort

W VR komfort liczy się bardziej niż na płaskim ekranie, więc wersja VR daje graczom duży wybór:

  • Poruszanie się: teleportacja albo płynna lokomocja sztuczna, sterowana kierunkiem głowy lub dłoni. Gracz może przełączać się między nimi. Jest też tryb machania rękami (arm swinger): ruch ramion jak przy marszu lub biegu przesuwa postać.
  • Obracanie: płynny obrót albo obrót skokowy z regulowanym krokiem (np. 22, 30 lub 45 stopni), który zmniejsza ryzyko choroby symulatorowej.
  • Postawa: gra na stojąco lub na siedząco. Wybraliśmy hybrydowy system kucania: gdy gracz kuca naprawdę, jego postawa w grze dokładnie to odzwierciedla, a przycisk zmienia postawę osobom grającym na siedząco. Jest też kucanie sztuczne, by dosięgnąć trudnych miejsc bez wysiłku fizycznego, oraz pozycja leżąca do niskich miejsc.
  • Ręka dominująca: tryb dla leworęcznych i praworęcznych, żeby strumień wody i poruszanie się można było mieć pod dominującą ręką.

UI diegetyczne i wysuwany zegarek

Zaimplementowałem całe UI diegetyczne w PowerWash Simulator VR: interfejs, który jest częścią świata gry, a nie unosi się nad nim.

Jego centralnym elementem jest zegarek szybkiego dostępu, który zaprojektowałem i zbudowałem. Na początku pokazywał tylko postęp zlecenia i wiadomości. Potem dodałem przyciski do najczęstszych akcji w VR, żeby gracze nie musieli niepotrzebnie przechodzić przez menu. Teraz zegarek daje szybki dostęp do:

  • postępu zlecenia
  • stanu konta
  • wiadomości w grze
  • przycisku resetu wysokości
  • przełącznika stylu lokomocji
Wysuwany zegarek na nadgarstku gracza w PowerWash Simulator VR, pokazujący 21% wyczyszczenia, 1535,25 $, szybkie ustawienia i wiadomość o zleceniu podczas czyszczenia łazika marsjańskiego

Zegarek otwarty na nadgarstku gracza: postęp zlecenia, pieniądze, szybkie ustawienia i wiadomość o zleceniu. © FuturLab

Zrobiłem z niego wysuwany zegarek, żeby zwiększyć immersję. Pływające menu bez wyraźnego źródła wyglądało w goglach zbyt nienaturalnie.

Kompromis: UI na nadgarstku widać tylko wtedy, gdy się na nie spojrzy, więc łatwo było przegapić wiadomości. Zbudowałem system opóźnionego wyświetlania wiadomości, żeby żadna nie przepadła. Później dodałem delikatną, okresową wibrację na ręce z zegarkiem, gdy czeka wiadomość, oraz ikonę powiadomienia obok wysuwanego panelu myjki — kolejnego elementu UI, który był moim pomysłem.

Rezultat

  • Wydajność wzrosła z niestabilnych 20 do stabilnych 90 kl./s na Queście.
  • PowerWash Simulator VR zdobył nagrodę Best UK Mixed Reality Game (VR, AR, XR) na Ukie Awards 2024.
  • Gra znalazła się w finale kategorii Best VR/AR/XR/MR Game na TIGA Awards 2024.

Czego się nauczyłem

Przeniesienie gry do VR wymaga znacznie więcej niż skonfigurowania interakcji i funkcji VR. Duża część pracy to wydajność, a w niej mnóstwo prób i błędów. Nauczyłem się też na własnej skórze, że format zip i poziom kompresji mają znaczenie dla plików .obb.