В марте 2024 года на Nintendo Switch состоялся релиз Kingdom Come: Deliverance. Оригинальная версия этого исторического ролевого экшена вышла еще в 2018 году. О том, как шла работа над портом, — рассказала в своей колонке для App2Top Жанна Горанская, директор по развитию бизнеса Saber Interactive в СНГ и Восточной Европе.
Жанна Горанская
По сложности и масштабности работу над адаптацией Kingdom Come: Deliverance для Switch можно сравнить с портированием The Witcher 3: Wild Hunt, которым мы занимались в 2018-2019 годах.
Оба проекта — ролевые игры с масштабными открытыми пространствами, детализированными городами, комплексной архитектурой, а также, конечно, большим количеством NPC.
Как удачно отметил в разборе порта на Digital Foundry Томас Морган, перенос Kingdom Come: Deliverance на Switch — это один из случаев «невозможных портов», к которым, к слову, относился и The Witcher 3.
Напомню, что Switch была построена на системе Tegra X1, изначально разработанной для мобильных устройств на базе процессоров ARM. В следующей году системе исполнится 10 лет.
Что касается Kingdom Come: Deliverance, то игра не только предназначалась для x86-процессоров, у которых — свой набор инструкций и своя микроархитектура, но и годы после выхода считалась весьма ресурсоемким решением.
Конечно, не это стало ключевым вызовом. Сейчас портирование с x86 на ARM — общепринятая практика. Просто тут важно понимать в первую очередь — изначальную ресурсоемкость игры и ее масштаб.
Плюсом для нас стало то, что Kingdom Come: Deliverance была разработана на CryEngine 3. К моменту начала работ мы с этим движком уже успели плотно познакомиться. В 2021 году мы выпустили (в том числе под Switch) Crysis Remastered Trilogy.
Как раз после трилогии — в начале 2022 года — мы и взялись за перенос Kingdom Come: Deliverance.
За порт отвечали две команды:
- наша шведская студия сделала большую часть задач по адаптации движка к Switch;
- непосредственно за портирование самой игры отвечало подразделение, которое мы называем Saber Core. Оно и довело игру до релиза.
За основу порта были взяты сразу две версии игры: арт использовался с Xbox-версии, а код и настройки – с РС-версии.
На первый полгода работ пайплайн выглядит примерно следующим образом:
- Проанализировать все ассеты и используемые технологии.
- Составить конкретный план работ по их оптимизации.
- Обеспечить запуск билда на Switch.
- Добиться того, чтобы в рамках билда главный персонаж хотя бы передвигался.
С этими задачами нам удалось справиться более-менее быстро. Самым времязатратным оказалось перенести на Switch адаптированную Warhorse Studios под себя версию CryEngine 3. После этого оказалось достаточно пережать все данные и оптимизировать ассеты.
Казалось бы, все, билд есть, он запускается, в него даже можно пытаться играть. Но на самом деле это было только начало. Настоящий фронт работ, подразумевающий схватку за производительность, избавление от многочисленных визуальных артефактов и багов, — только маячил впереди.
Да, играть было затруднительно не только из-за FPS в пару кадров и постоянных ошибок. В тот момент запуск Kingdom Come: Deliverance постоянно приводил к утечке памяти, что вело к вылетам.
Второй крупный этап работы над портом начался в августе 2022 года, когда Saber Core приступила к исправлению проблемных мест.
Это очень кропотливая работа шла примерно следующим образом:
- сначала QA-специалисты шаг за шагом проходили игру, отмечая места, где падает частота кадров;
- затем инженеры проверяли эти места и придумывали, что можно аккуратно поменять, чтобы не испортить сцену.
Именно на этой стадии, например, чтобы уменьшить нагрузку на центральный процессор (CPU) часть вычислений перенесли на графический процессор (GPU).
В итоге расчет качания травинок на ветру, мимика лиц, колыхание одежды – все эти параллельные операции были перенесены с CPU на GPU.
Следующей глобальной задачей стала проблема оптимизации видимых и не видимых объектов – то, что называется Occlusion culling.
Представьте, что ваш персонаж стоит на улице города возле каменной стены. Если он смотрит в стену, то ничего, кроме стены, вы не увидите. Но видеокарта продолжит рисовать то, что находится за стеной, обсчитывать здания, других персонажей и объекты.
Это большая проблема всех платформ — в том числе и PC, и консолей последнего поколения. Это же касается Switch, для которого лишние вычисления — непозволительная роскошь. Поэтому по возможности все невидимые части новая версия игры стала отсекать значительно более эффективно.
Один из самых показательных примеров — история с овцами. В Kingdom Come: Deliverance используется очень качественная симуляция физики. Например, когда вы видите овцу, бегущую по траве, игра делает колоссальные вычисления, чтобы корректно симулировать движение травы, куда опустится каждое копыто.
На каждую овечью ногу приходится 5000 вычислительных операций. Умножаем на четыре ноги – получаем 20 тысяч операций. Теперь представьте, что ваш герой встречает стадо овец…
Поэтому, чтобы увеличить производительность, мы, сократили количество подобных операций. Условно говоря, вместо 5000 операций на расчет стала оставаться одна.
Но это привело к результату, который мы никак не могли предсказать. После сокращения операций вдруг выяснилось, что ноги коней стали проваливаться в террейн.
Пришлось в итоге фиксить это вручную: смотреть на каждую сцену отдельно, где можно менять количество операций, а где нет.
Еще одной серьезной проблемой стало корректное отображение одежды и доспехов. В игре потрясающая система доспехов, приближенная к историческим реалиям. Рубашка, поддоспешник, кольчуга, металлические наручи и поножи – все это имеет свою геометрию и рассчитывается отдельно, чтобы корректно отображаться.
Эти вычисления обрабатываются в реальном времени, так как доспех в любой момент можно снять с убитого врага, своровать или надеть.
Конечно, можно было упростить геометрию, но это могло сломать систему обсчета физики: при движении доспехи бы перестали выглядеть, как настоящие, и превратились бы в «латексные». Пришлось искать другое решение: делать более быстрые вычисления и очень филигранно отрезать то, что не повлияет на геометрию.
Конечно, кое-где приходилось идти на хитрость. Например, все кат-сцены в игре заранее срежиссированы – значит мы знаем, как все пойдет, и можем чуть-чуть подкрутить настройки качества, например подрезать дальность отрисовки там, где это не будет заметно.
А где-то мы шли, как говорится, в лоб: использовали в сложных сценах низкое динамическое разрешение, дополнительно уменьшали размер текстур, сокращали дальности прорисовки, использовали тени низкого качества и прочее, прочее.
Самой сложной задачей оказались массовые сцены: битвы, турниры, любые события, где в кадре появляется больше пяти персонажей. Идею сократить количество персонажей отсекли сразу, ведь тогда бы пострадала зрелищность.
Старались максимально их оптимизировать. Однако не могу не отметить, что для производительности игры они остаются узким местом. К счастью, темп у самой игры неспешный и геймплей в такие моменты из-за этого сильно не страдает.
В целом, именно благодаря такому кропотливому подходу нам удалось добиться приемлемой производительности почти на протяжении всей игры. На открытых пространствах частота Kingdom Come: Deliverance плюс-минус стабильно держится на 30 кадрах.
Мы считаем это достижением, учитывая комплексность игры. Плюс мы очень довольны тем, насколько стабильной она получилась. С самого начала работ команда оптимизировала память, добиваясь того, чтобы игра не крашилась, как минимум, два с половиной часа (стандартное время работы батареи Switch).
На внутренних тестах нам удалось добиться 20-часовой непрерывной сессии. Когда консоль разряжалась, ее заряжали, не закрывая процесса, затем продолжали играть. Можно сказать, что мы выжали из возможностей консоли все, что могли.
Комментарии
Ответить