Портирование игр не всегда проходит беспроблемно — одни проекты можно легко портировать, другие — нет. Все зависит от типа игры, платформ и других факторов.
После успешного переноса Warface на Switch мы в студии Allods Team решили портировать нашу MMO Skyforge. Что-то далось очень легко, а что-то — сложнее. Ниже мы перечислим пять вещей, с которыми все прошло как надо, и пять вещей, с которыми возникли трудности, а также рассказываем, как команда преодолела эти препятствия.
Рассказывает Дмитрий Лисичкин, ведущий продюсер Skyforge. Этот текст — подробный пересказ материала, опубликованного изданием Game Developer
Пять вещей, с которыми не возникло трудностей
Удаленная разработка. Для Allods Team портирование Skyforge на Switch стало одной из первых крупных задач, над решением которой мы трудились полностью удаленно. Мы многому научились в плане распределенной работы, причем это касается не только работы друг с другом, но и взаимодействия с техникой и программами для разработки.
Было много технических трудностей: начиная с обеспечения доступа к репозиторию, инфраструктурным серверам и сервисам, заканчивая тем, что у нас не было возможности выдавать девкиты на дом каждому разработчику. Нам приходилось оставлять девкиты в офисе, подключаться и работать с ними удаленно. В начале локдауна у нас были проблемы с взаимодействием внутри команды. Например, если возникали какие-то сложности с билдом, девкитом, SDK и так далее, то решение проблемы и распространение информации происходило намного медленнее по сравнению с тем, к чему мы привыкли, находясь вместе в офисе.
FPS. При портировании Skyforge на Switch мы хотели добиться частоты кадров в 30 FPS при разрешении 720p, сохранив при этом достойное качество графики и звука. Поэтому производительность ранних версий на Switch стала для нас приятным сюрпризом! На самом первом билде мы ожидали не более 15 FPS — но получили почти вдвое больше. У нас еще не был реализован рендер, но уже был добавлен ввод от игрока, звук и игровая логика. Эта первая версия порта работала нормально при 25-30 FPS.
Этот этап был очень важен для того, чтобы оценить риски проекта. Нет смысла тратить много месяцев на перенос рендера, если производительность процессора в портативном режиме будет не выше 10 FPS. Поскольку играть и тестировать без рендера достаточно сложно, мы использовали клиент с ПК, который был подключен к тому же серверу, чтобы «его глазами» увидеть действия игрока на Switch. Это позволило нам убедиться, что все работает правильно.
Переход от ТВ-режима к портативному. К счастью, для Skyforge это оказалось относительно просто, поскольку наш интерфейс хорошо адаптируется к разному разрешению, оптимизируя внешний вид UI для работы на маленьком экране. Чтобы было удобно играть и взаимодействовать с интерфейсом на маленьком экране, пришлось немного повернуть его и увеличить некоторые элементы. В игре около 300 различных элементов UI и редактировать каждый из них вручную трудоемко, поэтому мы решили делать это программно прямо во время игры.
Преодоление чрезвычайных ситуаций. «Нет подключения к интернету», «проблемы с учетной записью пользователя», «нет доступа к сервисам Nintendo» — это трудности, с которыми мы столкнулись. К счастью, в Nintendo SDK есть система диагностики, поэтому нам зачастую даже не нужно было выяснять причину проблемы.
Например, если у пользователя включен режим полета, то вместо абстрактного сообщения «Не удалось подключиться к серверу, повторите попытку позже» мы можем «спросить» консоль о сетевом подключении, и она «расскажет», что режим полета включен, и предложит пользователю перейти в соответствующий раздел настроек, чтобы отключить его. Очень удобно!
Поддержка сенсорных экранов. Это уникальная функция специально для Switch. Мы разобрались с ней достаточно быстро. В ПК-версии есть курсор, и игра адаптирована для управления с помощью мыши, а сенсорный экран — почти то же самое. Базовую функциональность сенсорного экрана мы обеспечили достаточно быстро.
Пять проблем, с которыми мы столкнулись
Ограничения CPU. Самой большой проблемой, безусловно, были ограничения ресурсов платформы. Например, процессор Switch имеет только три ядра, и на ранних этапах разработки одно ядро было полностью занято обработкой звука. Это не было оптимальным способом использования ресурсов, поэтому мы решили изменить алгоритм сжатия звука для этой платформы. Но это привело к значительному увеличению размера клиента игры, до 9 ГБ только для звука, что нас тоже не устраивало.
Поэтому мы решили использовать кодек со сжатием получше, но и с более высокой нагрузкой на процессор в тех частях игры, где нагрузка не слишком большая — в сценах, где присутствует не так много персонажей и монстров, например, в игровых диалогах. Это хорошо сработало и обеспечило нам необходимый баланс.
Ограничения оперативной памяти. Также возникли сложности с оперативной памятью — в Switch ее всего чуть больше 3 ГБ, включая видеопамять. Конечно, этого слишком мало для современных игр. Даже на 32-битных системах можно добиться большей производительности при использовании отдельной видеопамяти. Нам пришлось проделать большую работу по оптимизации потребления памяти, чтобы каждый уровень в игре помещался в памяти с запасом.
Оптимизация. Сложнее всего было оптимизировать то, что уже ранее было трижды оптимизировано для PC, PS4 и Xbox One. В какой-то момент просто заканчиваются креативные идеи. Чтобы добиться желаемых результатов, нам пришлось уменьшить размер текстур и деталей, а также убрать некоторые эффекты, которые делали картинку более привлекательной и глубокой.
Онлайн стабильность. Skyforge изначально была исключительно онлайновой. Чтобы добиться стабильности, пришлось оптимизировать как контент, так и игровой клиент. Нам пришлось снизить качество графики и отказаться от некоторых более затратных для процессора функций движка. Пришлось значительно упростить небо и 3D-облака, сумеречные лучи (GOD Rays), глубину резкости (Depth of Field).
Ограничения платформы. Хотя портирование на Switch может быть сложным, особенно для таких масштабных проектов, как MMO, его нельзя назвать невозможным. Если вы определите области, в которых можете столкнуться с трудностями, особенно в плане ресурсов, вы сможете уберечь себя от неприятных сюрпризов в дальнейшем. Но вы должны убедиться, что используете и сильные стороны платформы. Например, хороший портативный режим поможет вашей игре выделиться среди других портов.