Просідання FPS, оптимізація та оновлення версій рушія. Як ми портували Poppy Playtime Chapter 3 на консолі
Привіт! Мене звати Максим, я працюю Unreal Developer’ом в Pingle Game Studio. Ми в компанії довгий час працювали над портуванням Poppy Playtime Chapter 3 — популярної гри, що завоювала любов гравців і критиків.
У цій статті я розповім про роботу над портуванням гри на Nintendo Switch, PS4, PS5, Xbox Series, iOS i Android, а мої колеги Діана Постернак і Кирил Кисляк поділяться своїми челенджами, що виникали власне у них під час роботи над Poppy Playtime.
Велика кількість геометрії викликала помітні просадки FPS на past-gen консолях
Перша збірка під платформи пройшла трохи складніше, ніж зазвичай, через використання плагіна GFur, який застосовується для створення шерсті та хутра персонажів. Оскільки цей плагін офіційно підтримувався лише на ПК, при збірці для інших платформ виникли проблеми з шейдерами та логікою коду. Для успішного запуску перших білдів довелося виправити ці недоліки та адаптувати плагін під консольні вимоги.
Згодом плагін GFur став не лише викликом при збірці, а й створив значні проблеми з продуктивністю. Велика кількість геометрії, необхідна для відображення хутра, викликала помітні просадки FPS на past-gen консолях, а також краші через перевантаження пам’яті. Для оптимізації була проведена масштабна робота: вдалося суттєво зменшити вплив плагіна на продуктивність, а також додати систему вибору рівня деталізації хутра під кожну платформу.
Мобільні платформи вимагали ще більш ретельної роботи. Тут хутро довелося переробити повністю, використовуючи кастомний меш та матеріал. Це дозволило значно покращити його візуальну якість і виграти додатковий перфоманс.
Також були проведені експерименти з різними варіантами реалізації хутра, щоб знайти оптимальний баланс між якістю та продуктивністю. Основним обмеженням залишилася довжина шерсті — її складно реалізувати без втрат у FPS, тому довелося шукати компромісні рішення.
Основна робота під час портування — це оптимізація і покращення стабільності білда
Перформанс мав досягати стабільних 30 FPS на різних платформах із різними поколіннями процесорів. Для цього проводився ретельний профайлінг проблемних місць, щоб знайти оптимальний баланс між продуктивністю та картинкою. У деяких випадках довелося жертвувати «коштовними» графічними ефектами або скоротити кількість об’єктів у сценах, а також реалізувати більш «дешеві» альтернативи. Гнучка система ini-профілів дала змогу налаштовувати продуктивність окремо для кожної платформи.
Якщо говорити ж про проєкт загалом, то протягом усього часу ми були зосереджені на усуненні раптових падінь FPS, виправленні зон із стабільно низькою продуктивністю та усуненні крашів, як загальних, так і специфічних для окремих платформ. Переробивши систему стрімінгу рівнів, ми змогли суттєво пришвидшити їх завантаження та мінімізувати фризи під час переходів між саблевелами. Також ми провели оптимізацію Chaos (фізичного рушія Unreal Engine) і зменшили кількість одночасних тіків, що дозволило значно розвантажити систему та покращити загальну продуктивність гри.
Що стосується додавання спеціальних функцій, ми інтегрували ключові Platform specific features, серед яких ачівменти для всіх консольних платформ, Activity Cards для PS5, а також підтримка адаптивних тригерів DualSense. Завдяки цьому геймплей став ще більш імерсивним — наприклад, під час стрільби з сигнальної ракетниці тригер створює відчутний опір, імітуючи натискання на реальний курок. Окрім цього, ми реалізували низку дрібних інтеграцій для забезпечення повної сумісності з платформами.
Далі слово моїй колезі, технічній художниці Діані Пастернак.
Діана Постернак (Technical Artist)
Основним завданням і найбільшою складністю було портування гри на різні платформи та адаптація графіки під різне «залізо». Якщо на PS5 і Xbox Series все працювало без значних проблем, то налаштування волюметричних ефектів для слабших платформ виявилося складнішим. Особливо важливо було зробити це без втрати якості зображення на потужніших пристроях.
Для мобільних платформ довелося переробляти деякі елементи з нуля, оскільки їх апаратні можливості значно відрізняються, а частина технологій узагалі не підтримується. Гра містить багато ефектів, і ми намагалися зберегти їхню якість максимально можливою. Для цього використовували всі доступні методи, зокрема різні техніки «фейку».
Окремо була проведена робота зі світлом. Я особисто над ним не працювала, але бачила основні проблеми та шляхи їхнього вирішення. Для мобільних платформ критичною була кількість джерел світла, тому навіть його доводилося імітувати — але це вдалося зробити так, що гравець не помітив різниці.
Найбільший технічний інтерес для мене становили ефекти, особливо волюметричні. Оптимізація таких ефектів — складне, але цікаве завдання.
Рівень з повністю динамічним та фізично коректним шейдером волуметричного туману виявився надто ресурсозатратним, навіть для найпотужніших відеокарт. Щоб зберегти якість і уникнути надмірного навантаження, було вирішено замінити цей ефект попередньо записаним відео — різниця у сприйнятті практично непомітна, а продуктивність значно покращилася.
Волюметричні ефекти на мобільних платформах стали окремим викликом, оскільки їх обчислення потребує значних ресурсів. Оптимальним рішенням виявилося використання постпроцес-ефектів у поєднанні з нестандартним підходом до партиклів.
Деталізовані волюметричні ефекти світла також вимагали особливого підходу. Замість використання real time волюметрики, яка не підходить для мобільних платформ, вдалося застосувати класичний метод із прозорими плашками та правильно налаштованими матеріалами. В результаті ефект виглядає так само якісно, але без надмірного навантаження на систему.
Нам довелося двічі за проєкт оновлювати версію рушія
Проєкт спочатку працював на Unreal Engine 5.1, але команда розробників одразу розпочала оновлення до версії 5.3, оскільки вона містила суттєві покращення. Після апгрейду деякий функціонал довелося підправити, але загалом перехід пройшов без значних труднощів.
Ситуація ускладнилася, коли прийшов час здавати білд для Nintendo Switch. Виявилося, що поточна версія SDK більше не підтримується, і для сертифікації було необхідно оновити її до актуальної. Це, у свою чергу, вимагало перехід на Unreal Engine 5.4, що стало набагато складнішим завданням через значну кількість змін у рушії.
Попри всі труднощі, команда успішно адаптувала проєкт, стабілізувала білди та отримала сертифікацію Nintendo.
Тут дам слово, можему колезі Кирилу Кисляку.
Кирило Кисляк (Unreal Engineer)
Розповім про декілька моїх викликів під час роботи на Poppy Playtime.
В грі був краш Reflection Capture на iOS, і довгий час не було розуміння, як його виправити. До розслідування долучили навіть Tech Art-відділ, але рішення не знаходили. Спершу припускали, що Reflection Capture некоректно відвантажуються на рівень. Навіть переписували систему догрузки, змушуючи її працювати в потрібному порядку. Зрештою, після глибшого аналізу з’ясувалося, що на iOS існує обмеження на кількість Reflection Capture на рівні. Через це Tech Art-відділу довелося оптимізувати їхню кількість.
Окремим викликом для мене стало зменшення розміру білда для платформи iOS, оскільки на PlayMarket існують певні обмеження щодо розміру файлів. Спочатку я так і не міг досягти необхідного розміру білду. Навіть довелося імплементувати спеціальний плагін для догрузки контенту з наших внутрішніх сервісів, розділяючи білд на частини, хоча це рішення було тимчасовим. Згодом, у співпраці з Tech Art-відділом та коригуванням ini-файлів і оптимізацією контенту, нам вдалося досягти необхідного розміру білду. Це дозволило нам видалити той плагін та мати білд одним файлом.
Також я займався налаштуванням гіроскопа для всіх платформ у проекті, що стало викликом через різницю в роботі гіроскопа на кожному пристрої. Зокрема, це стосується DualShock/DualSense, геймпадів від Xbox, Nintendo Switch та мобільних пристроїв. Було необхідно окремо зібрати білд для кожної платформи, тестувати його та адаптувати управління з урахуванням особливостей кожної платформи. Рішенням стала імплементація окремого керування гіроскопом для кожної платформи, враховуючи особливості їхнього функціонування.
Окремо цікавим досвідом стала співпраця з sound designer у рамках допрацювання налаштувань звуку та їхньої оптимізації для платформ PS4/PS5, де потрібно було розширити властивості, які спочатку не були передбачені в ігровому рушії. Виклик полягав у тому, що sound designer потребував налаштувань, яких не було в рушії. Рішенням стало розширення функціоналу налаштувань, що дозволило адаптувати звук під специфічні вимоги платформ.
Фінальний етап портування — проходження сертифікації
Перед подачею білдів на сертифікацію команда розробників спільно з QA ретельно перевіряла TRC-кейси та виправляла всі потенційні проблеми. Основні складнощі виникали з онлайновим функціоналом (ачівменти та Activity Cards) та продуктивністю в окремих сценах.
Проте усі виявлені проблеми були оперативно виправлені, і жоден білд не повернувся на доопрацювання після остаточного подання на сертифікацію.
Такими були деякі наші виклики під час портування Poppy Playtime Chapter 3. Дякуємо за увагу!
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів