Лучшее  🚀
22.02.2020 в 20:04 Evernews

Невозможный порт: как 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.

слева PlayStation 4, справа Nintendo Switch

Затем была переработана обработка анимаций и улучшено распараллеливание игры по ядрам. Для этого пришлось спуститься на очень низкий уровень и работать напрямую с процессором A57. Уже первые результаты выглядели довольно неплохо.

Одна только низкоуровневая оптимизация позволила поднять частоту до нестабильных 30 герц — при условии, что мы не упирались в GPU. Затем, когда мы разобрались с уровнями детализации, проблема с нагрузкой CPU была решена; остался даже некоторый запас, необходимый для обеспечения стабильной частоты кадров.

Олесь Шишковцов

Разобравшись с процессором, Олесь и его команда взялись за оптимизацию работы с видеоядром. Чтобы добиться максимальной производительности, разработчики решили использовать новый для себя графический API — NVN, низкоуровневый API, разработанный Nvidia специально для Switch.

слева PlayStation 4, справа Nintendo Switch

Вызовы этого API, объясняет Шишковцов, минимально нагружают процессор консоли; по сути у программистов есть возможность работать напрямую с GPU. Это позволяет использовать все ресурсы, которые может предоставить видеоядро консоли.

Думаю, мы использовали все [возможности, которые предоставляет GPU Консоли]. Большая часть наших оптимизаций GPU была сосредоточена на том, чтобы уменьшить нагрузку на память [и остаться в границах кэша].

Олесь Шишковцов

Для снижения нагрузки разработчики использовали, в том числе, временной суперсэмплинг. Это технология, генерирующая картинку более высокого разрешения, чем разрешение экрана, и берущая часть данных из ранее обсчитанных кадров.

Проблема в том, что для процессора Switch здесь используется слишком сложная математика и выборка текстур. Нам нужно было что-то гораздо более быстрое, и при этом достаточно качественное. Было непросто. На эту функцию я потратил больше месяца; похоже, ассемблер видеопроцессоров Maxwell теперь мой родной язык.

Финальная версия технологии обрабатывает картинку в разрешении 1080p примерно за 2 миллисекунды, причем используются только девять выборок текстур и кое-какие математические трюки. Побочным эффектом оказалось сглаживание картинки.

Олесь Шишковцов

Правда, у сглаживания были кое-какие артефакты, но заметить их можно было только если знать, куда смотреть. Эта технология использовалась и в портативном режиме, и при подключении Switch к базе, когда производительность консоли возрастает.

слева PlayStation 4, справа Nintendo Switch

На самом деле, объясняет Олесь, подключение к базе не так уж сильно помогало улучшить качество картинки. GPU консоли разгонялся, но пропускная способность памяти практически не менялась. Впрочем, это все равно лучше, чем портативный режим.

При подключении к базе разработчики могли увеличить количество объектов, отрисовываемых полностью корректно: это позволяло повысить качество сглаживания. Кроме того, здесь не так агрессивно использовались уровни детализации.

В обоих режимах используются оригинальные модели с версий для PS4/X1, но в портативном режиме активнее используются уровни детализации: на маленьком экране это все равно непросто заметить.

С точки зрения игрока портативный режим всегда работает в разрешении 720p, при подключении к базе разрешение вырастает до 1080p, а в остальном все выглядит одинаково.

Олесь Шишковцов

Весь набор оптимизаций позволил разработчикам добиться действительно стабильных 30 кадров в секунду. Теоретически, отмечает Олесь, можно было выдать и 60 кадров в секунду, но пришлось бы запускать два тика рендеринга на один тик симуляции игрового мира и значительно понизить качество картинки.

Остановившись на 30 кадрах в секунду, мы не жертвовали качеством: даже материалы и шейдеры освещения тут точно такие же, как на PS4 и Xbox One.

Олесь Шишковцов

Metro Redux выйдет на Nintendo Switch 28 февраля 2020 года.

Читать далее