Невозможный порт: как Metro Redux перенесли на Nintendo Switch
Пришлось близко — ближе, чем хотелось — познакомиться с GPU консоли.
Кстати, на сайте читать удобнее
В конце февраля на Nintendo Switch выйдет Metro Redux, обновленный сборник первых частей серии. Хотя железо у Switch заметно слабее, чем у консолей нынешнего поколения, порт — если верить первым обзорам — работает очень хорошо.
Если портированием The Witcher 3 на Switch занималась сторонняя студия, то перенос Metro Redux взяли на себя сами разработчики. Сперва, рассказывает технический директор 4A Games Олесь Шишковцов, было очень непросто.
Сперва проблемы производительностью были по-настоящему серьезными. Знаете, звучит довольно страшно, когда вам переключиться с базовых PS4 и Xbox One — у которых где-то шесть с половиной или семь ядер, работающих на частоте 1.6-1.75 ГГц — на три ядра, выдающих только 1 ГГц. С GPU было легче, все-таки графику урезать куда проще, чем, например, код, отвечающий за симуляцию.
Олесь Шишковцов
На начальном этапе, вспоминает Олесь, игра стабильно упиралась в процессор и выдавала где-то 7-15 кадров в секунду. Оптимизацию разработчики начали с использования кое-каких наработок, созданных для последней части серии, Metro Exodus.
Затем была переработана обработка анимаций и улучшено распараллеливание игры по ядрам. Для этого пришлось спуститься на очень низкий уровень и работать напрямую с процессором A57. Уже первые результаты выглядели довольно неплохо.
Одна только низкоуровневая оптимизация позволила поднять частоту до нестабильных 30 герц — при условии, что мы не упирались в GPU. Затем, когда мы разобрались с уровнями детализации, проблема с нагрузкой CPU была решена; остался даже некоторый запас, необходимый для обеспечения стабильной частоты кадров.
Олесь Шишковцов
Разобравшись с процессором, Олесь и его команда взялись за оптимизацию работы с видеоядром. Чтобы добиться максимальной производительности, разработчики решили использовать новый для себя графический API — NVN, низкоуровневый API, разработанный Nvidia специально для Switch.
Вызовы этого API, объясняет Шишковцов, минимально нагружают процессор консоли; по сути у программистов есть возможность работать напрямую с GPU. Это позволяет использовать все ресурсы, которые может предоставить видеоядро консоли.
Думаю, мы использовали все [возможности, которые предоставляет GPU Консоли]. Большая часть наших оптимизаций GPU была сосредоточена на том, чтобы уменьшить нагрузку на память [и остаться в границах кэша].
Олесь Шишковцов
Для снижения нагрузки разработчики использовали, в том числе, временной суперсэмплинг. Это технология, генерирующая картинку более высокого разрешения, чем разрешение экрана, и берущая часть данных из ранее обсчитанных кадров.
Проблема в том, что для процессора Switch здесь используется слишком сложная математика и выборка текстур. Нам нужно было что-то гораздо более быстрое, и при этом достаточно качественное. Было непросто. На эту функцию я потратил больше месяца; похоже, ассемблер видеопроцессоров Maxwell теперь мой родной язык.
Финальная версия технологии обрабатывает картинку в разрешении 1080p примерно за 2 миллисекунды, причем используются только девять выборок текстур и кое-какие математические трюки. Побочным эффектом оказалось сглаживание картинки.
Олесь Шишковцов
Правда, у сглаживания были кое-какие артефакты, но заметить их можно было только если знать, куда смотреть. Эта технология использовалась и в портативном режиме, и при подключении Switch к базе, когда производительность консоли возрастает.
На самом деле, объясняет Олесь, подключение к базе не так уж сильно помогало улучшить качество картинки. GPU консоли разгонялся, но пропускная способность памяти практически не менялась. Впрочем, это все равно лучше, чем портативный режим.
При подключении к базе разработчики могли увеличить количество объектов, отрисовываемых полностью корректно: это позволяло повысить качество сглаживания. Кроме того, здесь не так агрессивно использовались уровни детализации.
В обоих режимах используются оригинальные модели с версий для PS4/X1, но в портативном режиме активнее используются уровни детализации: на маленьком экране это все равно непросто заметить.
С точки зрения игрока портативный режим всегда работает в разрешении 720p, при подключении к базе разрешение вырастает до 1080p, а в остальном все выглядит одинаково.
Олесь Шишковцов
Весь набор оптимизаций позволил разработчикам добиться действительно стабильных 30 кадров в секунду. Теоретически, отмечает Олесь, можно было выдать и 60 кадров в секунду, но пришлось бы запускать два тика рендеринга на один тик симуляции игрового мира и значительно понизить качество картинки.
Остановившись на 30 кадрах в секунду, мы не жертвовали качеством: даже материалы и шейдеры освещения тут точно такие же, как на PS4 и Xbox One.
Олесь Шишковцов
Metro Redux выйдет на Nintendo Switch 28 февраля 2020 года.
- Появился синопсис экранизации «Метро»: фильм снимет Егор Баранов
- Студия 4A Games куплена Embracer Group за $45 миллионов
- Персонаж Red Dead Redemption 2 внезапно решил стать убийцей. Никто не знает, почему
- Фото: Филавандрель и эльфы в новых костюмах на съемках «Ведьмака»
- Metro Redux выйдет на Nintendo Switch
- «Мы уже живем в стране зомби»: главное из интервью с Дмитрием Глуховским