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.
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.
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.
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

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.