Портування гри з PlayStation VR на девайси Oculus Quest. Досвід фахівців

Вітаю, мене звати Сергій Хмельов, я обіймаю посаду Project Manager у Pingle Game Studio. Ми в компанії вже не вперше працюємо з іграми франшизи Five Nights at Freddy’s. У цій статті я разом із Project Lead of Unreal Department Костянтином Олещенко розповім, як ми портували гру FNaF: Help Wanted 2, що розроблялася під PlayStation VR, на портативні девайси Oculus Quest.

Oculus — специфічна платформа, має достатньо високі вимоги при своєму досить специфічному залізі. Тож портування гри вже обіцяло бути викликом.

Окрім того, при початковій розробці не дуже враховувався той факт, що гра може портуватися на слабкі девайси. Команда оригінальної розробки робила цю гру під PlayStation VR — це потужні девайси, що намагаються по максимуму використовувати всі сучасні технології. Оригінальні розробники концентрувалися на тому, щоб картинка відповідала сьогоднішнім стандартам графіки. І це породжує багато викликів з оптимізації та роботи з контентом під час портування.

Початок роботи

Перша складність полягала в тому, що на момент оцінки проєкту команда оригінальної розробки була ще в процесі роботи над грою, тож ми не могли працювати на повну.

Для того щоб рухатись вперед, ми випробовували різні підходи і методики, як можна досягати потрібного нам результату. Це був детальний пошук рішень, які ми зможемо одразу імплементувати, тільки-но оригінальний розробник закінчить роботу, щоб потім не витрачати на це час.

А шукати рішення було з чого, бо Oculus має ряд своїх особливостей:

  • Це автономний девайс з рівнем потужності мобільного пристрою.
  • При постійних високих навантаженнях пристрій перегрівається.
  • Як і в мобільних девайсах, GPU в Oculus не така, як в консолі чи комп’ютері. Це набагато слабший пристрій, з повільнішим доступом до пам’яті, з повільнішою паралельною обробкою.
  • Однак, вимоги доволі високі: це стабільні 72 fps одночасно для лівого і правого ока в досить високій роздільній здатності. Для розробників це все одно що малювати за раз два екрани.

Оскільки ми завжди прагнемо якості, то і в цьому випадку хотіли зберегти стилістику та наповненість кадру — максимально ту якість, яка була зроблена для PS VR. Звісно, довелося якісь елементи видалити. Однак всі основні речі, з якими гравець постійно взаємодіє і які у нього перед очима, ми намагалися максимально зберегти.

Наш пріоритет — це емоції і відчуття гравця. Не можна оцінювати ігри суто показниками. Якщо оцінювати лише цифрами, то це вже не гра, а програма. Під час гри на Oculus гравець має отримати ті ж самі емоції, що й граючи в оригінальну версію на PS VR.

Ти маєш вірити в те, в що ти граєш, тим більше якщо це гра у VR-шоломі, де ефект занурення ще більший

Часто, говорячи про якість, люди мають на увазі якість зображень і загальної картинки гри. Буває, що компанія-замовник і компанія-сервіс провайдер не збігаються в розумінні якості. Наприклад, студія зробила портування, є потрібний FPS. А замовник незадоволений. Чому? Тому що поняття якості містить в собі неоднакові елементи.

В різних компаніях різні підходи. Наприклад, ми в Pingle для себе визначили, що наш клієнт — це геймер. Працюючи над грою, в першу чергу ми думаємо про гравця, а свою роботу оцінюємо по відгуках, які отримують ці ігри.

За роки роботи ми напрацювали багато підходів і знаємо способи, які дозволяють зробити оптимізацію гри, не втративши якість картинки. Іноді для цього доводиться оптимізувати оригінальну гру і покращувати її перформанс до 30-40% — це частина нашої роботи, яка входить в портування.

Особливості сертифікації Meta

На розробку було три місяці. Коли ми наближались до дати фінішу, замовник почав бронювати слот під сертифікацію. Вони думали, що подадуть гру, коли та буде готова. Однак виявилось, що у Meta черга. Наш стартовий контракт мав закінчитися всередині лютого, а слот запропонували аж на 25 квітня.

Нагадування розробникам: слоти для проходження сертифікації потрібно бронювати заздалегідь.

Дехто не знає про таку можливість, але можна зробити демоверсію, показати готовність гри і спробувати забронювати слот сертифікації на ближчу дату.

В своїй демоверсії ми показали рівень готовності п’яти стартових локацій, відполірували їх до потрібного рівня — і це спрацювало. Демо дуже сподобалось Meta і нам видали сертифікаційний слот на початок березня, а не на кінець квітня. Тож наступною метою стало надати якомога кращу версію гри, щоб пройти сертифікацію.

Заради справедливості треба зазначити, що Steel Wool користувались своїм ім’ям, великим ком’юніті FNAF, статистикою гарних пресейлів на Oculus, а також відгуками користувачів інших VR-платформ (PS VR та Steam VR), тому їм треба було якомога швидше вийти в реліз. Не кожна компанія зможе так комунікувати з Meta.

Є нюанси з приводу сертифікації — вона проходить по декількох сценаріях.

Перший — альфа-тестування. Це найшвидший сценарій і той, за яким ми пішли. Виглядає таким чином: 5 днів тестування — 10 днів на виправлення багів, які знайдуть в перші 5 днів — і потім 5 днів на повторне тестування

Другий сценарій — пресертифікація, за якої враховується фідбек і відповідність офіційним вимогам. Мета віддає гру тестувальникам, що розкидані по світу. Це незалежні спеціалісти, які не є членами однієї команди, вони знають список вимог і просуваються по ньому на свій розсуд. Там можуть бути абсолютно рандомні баги. Наприклад, одному буде здаватися занадто світло, другому буде не вистачати перфомансу, а третьому на тому самому білді буде здаватись, що з перфомансом все ок, він на це не буде зважати і дасть зовсім інший фідбек.

Технічні виклики цього портування

Костянтин Олещенко, Project Lead of Unreal Department

Oculus — це Android device, і в тій версії рушія і конфігурації, з якою ми працювали, Android має обмеження — по рендерингу, по кількості джерел світла, по кількості і якості ефектів. Працювати з такими обмеженнями — великий виклик для всієї команди. Детально про кожен з технічних викликів розповідає Костянтин Олещенко, Project Lead of Unreal Department.

Виклик 1 — forward або deferred рендер, ось у чому питання...©Попри всі посібники, документацію та досвід, команда вирішила докласти певних зусиль, щоб ця гра працювала з deferred рендером в Oculus. Він не працював із коробки, тому спочатку ми виправили візуалізацію (за допомогою розробників рендерингу)... і відмовилися від цієї ідеї — продуктивність була жахливою.

У найлегшій сцені з кількома акторами ми змогли досягти лише 23-25 FPS. Тож єдиним варіантом був forward-рендеринг. Пізніше, під час процесу розробки ми розробили чіткий конвеєр, який дозволяє нам досягти майже такого ж рівня візуальної якості, як і в оригінальній грі.

Виклик 2 — лише 4 рухомих джерела світла, в той час як в оригінальній версії їх може бути до 20 на сцені. Це загальне обмеження мобільних Android-платформ (і Oculus тут, на жаль, не є виключенням). Ми переробили всі рівні, щоб відповідати цим обмеженням.

Декалі були замінені комбінованими площинами та матеріалами (де це було можливо), постобробку було замінено на Tonemappers (і ретельно налаштовано, щоб досягти такої самої або близької до оригінальної візуальної якості). Але найскладнішою частиною було світло. Кожен рівень було ретельно перероблено, щоб використовувати якомога більше статичного світла.

Виклик 3 — обмеження розміру контенту. За замовчуванням UE4 підтримує до 3 файлів OBB (кожний не більше 4 Гб) для контенту. Meta store підтримує необмежену кількість додаткових файлів для ассетів. Оригінальний розмір гри становив близько 10 Гб у стисненому вигляді (24 Гб у нестисненому вигляді).

Перша вимога полягала в тому, що потрібно використовувати лише нестиснений вміст. Друга — збільшити підтримку понад 3 OBB, що було успішно реалізовано (тепер ми можемо підтримувати до 5 OBB із загальним розміром контенту до 20 Гб).

Останнє: під час роботи з важкими текстурами з’являлось багато коливань продуктивності, тому ми знайшли золоту середину, щоб вмістити близько 10 Гб нестисненого контенту за допомогою ASTC декодинг налаштувань. Це дозволило легко масштабувати будь-який додатковий контент і з легкістю керувати розміром білда.

Виклик 4 — підтримка Android API. На момент старту проєкту Мета підняла мінімальний API для своїх аплікацій з 29 левела на 32 — це відповідає UE5. Рушій 4.27 з коробки це не підтримує, тож доводилося вносити модифікації в рушій, щоб можна було збирати білд під Android, і Меtа його прийняла на submission.

Виклик 5. Буквально за день до відправки на submission нам сказали, що під час будь-якого завантаження гри, обов’язково має крутитись якийсь спінер.

Якщо спінера немає, то Меtа просто не прийме Білд. Це не вплинуло на розробку, але стало для нас сюрпризом і коштувало однієї безсонної ночі.

Виклик 6 — згідно вимог для Oculus, гра не може завантажуватися занадто довго. При завантаженні гри статичний екран не може тривати більше 10 секунд.

На початку ми одразу попали в ці 10 секунд, але коли почали роботу над спайками і почали збирати ПСО кеш, цей час завантаження гри збільшився. Але з цим також команда справилась. Тепер у нас тепер є потрібні заглушки і спінери, і в цілому по оптимізаційній роботі результат було досягнуто — гра досить швидко стартує.

Виклик 7 — найважчий момент всього проєкту. В Meta прописані технічні вимоги: 72 FPS, також допустимі короткострокові Performance дропи до 65 FPS. По факту, незрозуміло, що саме є короткостроковим дропом. Ми бачили по графіках, що у нас є провисання в один кадр. Для геймдеву це нормальна історія: всі ігри мають короткострокові дропи.

Але у випадку сертифікації Meta, нам довелося боротися з цими дропами.

Проблема була в тому, що хоча ми могли бачити ці дропи на метриках, оком не було видно провисань в грі. Уявіть собі спайку в 30 мілісекунд — це майже неможливо побачити, особливо, якщо такий дроп лише один.

Коли ми власне готували білд до сертифікації, вже отримали певний результат по перфомансу і були впевнені, що оптимізували гру достатньо добре. Добились такої стабільності картинки, щоб місць, де ця спайка могла бути помітна оку, не було. Вона була помітна лише на графіку і ми сподівались, що цього буде достатньо. У всіх іграх вони існують, і на PlayStation 5, і на найпотужнічших комп’ютерах все одно є спайки. Так влаштований світ ігор.

Мета має застосунок VR metric tool, яким вони міряють перфоманс і будує графік FPS. Будь-який дроп видний падінням графіку. Ти можеш грати і не помітити спайку, а на графіку вона відобразиться.

Наразі ми почистили абсолютно всі спайки, їх не видно не тільки неозброєним оком, а навіть на графіку нічого не відбувається нижче затребуваних 65 FPS.

Чому в нас вийшло це зробити? Залученість найдосвідченіших фахівців Pingle, разом з їхньою експертизою, мала вплив. Вони не боялись випробовувати різні рішення. Гра написана на UE4, а ми використовували ті функції, які вже є в п’ятій версії рушія, але в четвертій ще вважаються експериментальними. Налаштовували, випробовували.

Що далі

Ми випустили гру на три Oculus девайси: Meta Quest 2, Meta Quest Pro, Meta Quest 3, зробили нашу роботу, всі баги виправили. Тим не менш, ведемо клієнта до кінця. Тож навіть після здачі готового білда, в очікуванні сертифікації і реліза, ми продовжували покращувати гру — робили ту роботу, якої від нас вже не чекають. Знову підкреслимо, що наш клієнт — це не платформа, що проводить сертифікацію, а гравець, і ми працюємо для нього.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn


Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

fortnite працює, здається, навіть на тостері. Здивувався коли побачив повну версію на свічі. Ось що значить міць ue5 і оптимізація

Портування гри було цікавим досвідом для мене)

Підписатись на коментарі