Pingle Studio - про створення мультиплеєру для Risk of Rain 2

Нещодавно ми в компанії завершили роботу над створенням мультиплєра для цікавої гри Risk of Rain 2.

Нашого замовника не влаштовував спосіб роботи існуючого мультиплеєра у грі Risk of Rain 2, тому він звернувся до Pingle з проханням його повністю переробити.

У цій статті ми розповімо, як працювали над оптимізацією гри і розробкою мультиплеєра для консолей.

Онлайн-архітектура для Steam вже існувала в грі, але, звісно, це рішення не підходило для консолей.

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

Так, Xbox мав серйозні технічні недоліки, які змусили нас перероблювати існуюче рішення майже з нуля. В свою чергу, на PlayStation були великі затримки та лаги, що унеможливлювало мережеву гру на цій платформі без додаткових оптимізацій.

Також варто зазначити, що на різних етапах розробки оригінальній команді допомагали різні аутсорс-компанії. Тому додатковою складністю для нас було з'ясувати, що у коді насправді актуально.

Отже, перед нами стояли такі завдання: розробити мережеве рішення для консолей, використовуючи ті ж підходи, що і в Steam версії; адаптувати вже існуючий функціонал на консолях; оптимізувати це все і зробити таким чином, щоб наша робота стилістично була схожа з тим, що до цього робив замовник.

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

Незважаючи на всі виконані роботи, повне переписування коду було неможливим через вже існуючі імплементації на PlayStation Network та Steam, які не використовувалися, але не могли бути видаленими, оскільки вже були в релізі. Тому ми змушені були знайти компроміс між видаленням застарілого коду та збереженням функціональності.

Завдання, яке ми поставили перед собою, виявилося складним, але необхідним для подальшого успіху нашого проекту. Ми розробили прошарок, який дозволив коду працювати на всіх платформах.

Коли ми почали роботу над матчмейкінгом, зрозуміли, що розробники та тестувальники з різних команд заважають одне одному, особливо під час тестування квікплею. Тож потрібна була система фейкового матчмейкінгу.

Спочатку ми думали “погратися” з налаштуваннями, аби вигадати складнішу архітектуру. Але це зайняло б багато часу. Тож ми вирішили додавати унікальний ID з файлу, який був не в головній гілці, до назви кожного лобі. Розробка та впровадження цього рішення зайняли 10 хвилин.

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

На Xbox ми створили "локальні сендбокси" для мультиплеєра. Цей підхід допоміг уникнути взаємних перешкод між розробниками та QA під час тестування, що значно зекономило час. Завдяки цьому ми могли тестувати білди паралельно, не чекати завершення іншої групи. Час тестування кожного білда скоротився з кількох годин до одної.

“Інструмент зменшив час заміни моделей з трьох годин до 40 хвилин”

Спеціально для Nintendo Switch була розроблена система підміни моделей і текстур на оптимізовані версії. Але вона працювала некоректно: десь замінювала моделі, десь не замінювала, а десь пакувала одразу дві (оптимізовану і неоптимізовану). Це займало дуже багато часу, до 3 годин, а ще провокувало збільшення розміру білда.

Тому ми написали новий інструмент, взявши за основу рішення оригінальної команди., додали туди зручний інтерфейс та розширили його функціональність. Нова версія була зручнішою у використанні, дозволяла вибирати моделі для заміни та підтримувала роботу з трьома платформами, а не тільки з Nintendo Switch. Інструмент зменшив час заміни ресурсів у проєкті з трьох годин до 40 хвилин і зробив процес більш контрольованим, без "сміття" в білдах.

“Для звітності нам потрібні були графіки, які показували б результати, наприклад, збільшення FPS з 30 до 60”

Протягом усієї роботи та особливо під час оптимізації нам потрібно було проводити аналіз даних, де та наскільки покращилася гра. Це було необхідно для майлстоунів та координації роботи інших відділів (QA, художники, звіти PM-ів). Для цього ми створили спеціальний інструмент, що дозволяв збирати дані про FPS і загальну статистику системи. Ці дані автоматично перетворювалися в Excel-документ. Тестувальники могли аналізувати дані і порівнювати з попередніми замірами, тож було легко побачити динаміку змін продуктивності.

Оскільки в іграх часто зустрічається багато випадкових факторів, ми створили тестову сцену, що дозволяла тестувальникам створювати стандартні умови для вимірювання. Таким чином ми могли точно оцінювати зміни в середньостатистичному FPS. Інструмент збирав дані не лише про FPS, а й про навантаження на CPU та GPU, і міг використовуватись на різних платформах, включаючи PS4, Xbox і Switch.

Що ми отримали в результаті

Команда працювала над проєктом трохи більше року. Risk of Rain 2 тепер має повноцінний мультиплеєр, що працює класно і приємно, на Steam, PS4, PS5, Xbox One, Xbox Series, and Nintendo Switch. Гра швидка, плавна та дуже весела.

Risk of Rain 2 суттєво відрізняється від того, що зараз є на ринку. Тож радимо спробувати цю гру :)

Що ж, завершуючи цю історію, ми можемо сказати, що робота над мультиплеєром для Risk of Rain 2 на консолях була справжнім викликом, але водночас і надзвичайно цікавим досвідом. Кожна платформа принесла свої унікальні проблеми та особливості, які потрібно було вирішувати з творчим підходом та уважністю до деталей. Ми не лише змогли реалізувати стабільний мультиплеєр, а й отримали безцінний досвід роботи з консолями та оптимізацією ігор на різних платформах.

407
Події
Спільнота
Відеотека
Про нас