Vampire: The Masquerade – Bloodlines 2: Погружение в разработку игры нового поколения
Перевод пятого выпуска дневников разработчиков игры Vampire: The Masquerade – Bloodlines 2.
Меня зовут Андреа Санчио (Andrea Sancio), я — заместитель технического директора и работаю в The Chinese Room над Vampire: The Masquerade - Bloodlines 2. Для меня было честью работать вместе с нашим техническим директором Ником Славеном (Nick Slaven) и возглавлять нашу талантливую команду, трудившуюся над техническими аспектами игры.
Хочу познакомить вас с подоплёкой работы нашей команды — надеемся, что когда вам доведётся поиграть в игру, вы полюбите её так же сильно, как и мы.
В постоянно меняющемся и развивающемся мире разработок игр нужно постоянно стремиться к тому, чтобы быть на пике прогресса. Выход движка Unreal Engine 5 можно сравнить с существенным сдвигом тектонических плит — он подарил разработчикам целый ряд прорывных технологий и инструментов. Я хочу подробнее рассказать об опыте нашей работы и сложностях, которые мы преодолевали в её процессе, с рядом экспериментальных технологий, определивших UE5 — это Nanite, Virtual Shadow Maps и Lumen. Эти технологии сыграли ключевую роль в создании реалистичного и мрачного мира, превосходно идущего нео-нуарному визуальному стилю нашей игры.
Переход с Unreal 4 на Unreal 5 был настоящей вехой в процессе разработки. Это было рискованным решением, потому что движок обычно утверждается на раннем этапе разработки и уже не меняется. Изменения затронули каждый аспект игры — пришлось переводить на новые рельсы все наши сцены, освещение и визуальные наборы. Все остальные команды разработчиков игры также включились в процесс и просто идеально показали себя в стремлении сделать так, чтобы благодаря новым инструментам игра изумительно выглядела и при этом не подтормаживала.
Lumen — это новая технология глобального освещения в реальном времени. Благодаря ей освещение в игре становится ещё более реалистичным — это достигается рейтресингом, симулирующем проходимый светом путь и его взаимодействие с различными поверхностями и материалами. Технология позволяет симулировать непрямое (отраженное) освещение и отражения. Но над внедрением Lumen в наши игры пришлось попотеть. Для достижения атмосферного освещения, в котором так нуждается наш игровой мир, нужно было обеспечить стабильную и плавную работу. Работать с динамическим освещением и тенями всегда непросто. В плане производительности это очень трудоёмкий процесс — добавление освещения в визуал и перекрытие различных источников света увеличивает сложность и затраты на рендеринг сцены по экспоненте: дело в том, что нужно делать много вычислений для каждого пикселя для каждого же источника света. Обычно это решается путём “пре-засветки”. Все тени уровня сохранялись до его появления, и менять их ты уже не мог. В результате удавалось достичь отличной производительности малой кровью, но свет и тени получались... как бы сказать... бутафорскими. И приходилось прибегать к другим ухищрениям, например, к световым датчикам [в оригинале light probes; в частности, они используются в Unity], располагаемым на объектах, которые перемещаются в данном пространстве.
Lumen же позволил нам менять цвет, положение и интенсивность кучи световых лучей, которые при этом могут ещё и динамически меняться. В итоге для того, чтобы понять, как лучше всего внедрить эту новую технологию освещения, мы очень долго работали с нашими художниками. Работает это дело так - все поверхности, на которые попадает свет, сохраняются в кэш. Этот кэш имеет разрешение ниже того, которое имеет выводимый результат. Это означает, что расчёт эффектов освещения идёт куда быстрее. После этого Lumen применяет Temporal Upsampling, благодаря которому у изображения увеличивается разрешение, причём происходит это без потери качества и детализированности. Этот трюк не удался бы без технологий Nanite, Cached Virtual Shadows и Temporal Super Resolution, которые мы тоже взяли на вооружение!
Virtual Shadow Maps заставила нас подходить к работе с тенями в рамках Unreal Engine 5 на совершенном уровне. Эта технология работает с разрешением теней отдельно от разрешения экрана, что выливается в отточенные тени при минимуме затрат. Внедрение Virtual Shadow Maps вынудило нас пересмотреть методы отбрасывания и обработки отрисовки теней, но оно того стоило — налицо было явное улучшение качества изображения. Без этого бы не удалось создать те мрачные и таинственные тени, что прочно ассоциируются с нео-нуаром.
Для быстрой смены кадров необходимо всегда следить за вызовами отрисовки [в оригинале draw calls]. Вызовы отрисовки — это команды, которые Центральное Процессорное Устройство (ЦПУ, он же ЦП, центральный процессор) посылает Графическому Процессорному Устройству (ГПУ, он же ГП, графический процессор). Если по-простому, вызов отрисовки — это просьба нарисовать или получить изображение определенного набора графических элементов. Каждый такой вызов отрисовки содержит информацию о том, как надо отрисовать часть той или иной сцены — в том числе, текстуры, информацию о затемнении, геометрию (например, координаты). Но если таких вызовов слишком много, игра будет тормозить, потому что каждый вызов подразумевает обмен и обработку информации между ЦП и ГП — а это всё время, ведь на обработку каждого кадра требуется доля секунды. Nanite принципиально меняет подход к обработке геометрии в играх. В отличие от традиционных систем уровней детализации Nanite виртуализирует геометрию объектов, выдавая детализированные визуальные наборы и хорошую производительность. В Nanite все сетки, сделанные с использованием одного и того же материала, помещаются в так называемое "ведёрко” [в оригинале bucket] и обрабатываются во время одного и того же вызова отрисовки, что сильно сокращает количество последних. Благодаря такому подходу уменьшается и сложность создания визуального набора, а также появляется возможность создания доселе недоступных фотореалистических мизансцен. Теперь мы можем наполнять уровни весьма причудливой архитектурой и высоко детализированными мизансценами.
Отладка и оптимизация нашего кода и наполнения мира стали куда сложнее, и мы ясно и чётко осознавали необходимость подстройки под частые обновления движка. Эти обновления были просто необходимы для важнейших правок и улучшения производительности. Большинство студий, наверное, предпочло бы не сталкиваться с такой ситуацией, благо подобные переходы не происходят сами по себе — за всё надо платить. Документации было мало, людей, которые хорошо разбираются в движке и с кем можно посоветоваться, тоже не хватало — во время этого путешествия нам пришлось прибегать к серьёзному исследованию движка, общением с Epic, методу проб и ошибок.
Возможно, это прозвучит пафосно, но все те усилия, которые мы прилагали для того, чтобы всё заработало, укрепили духовные связи между членами нашего коллектива, потому что всем нам приходилось постоянно общаться друг с другом. И оно того стоило, потому что наша команда художников смогла претворить в жизнь искомый нео-нуар. А в силу того, что игры обычно делаются с применением инструментов и технологий, созданных во время работы над предыдущими играми, будущие проекты The Chinese Room также выиграют от результатов нашего кропотливого труда. Все наши сотрудники отлично проявили себя в новых рабочих условиях, используя их максимально эффективно.Лично для меня, человека, который не один год работал в проектах со сходным подходом, эта работа стала глотком свежего воздуха и потрясающим переходом на новый уровень!
Игра должна ощущаться плавной и непрерывной. Скажу так — чем меньше вы обращаете внимание на технические детали во время игры, тем больше у нас оснований считать, что мы потрудились на славу. Мы очень гордимся тем, что нам довелось поработать над столь сложным по многим параметрам проектом и дать ему возможность стать настоящим прорывом в плане визуальной достоверности.
А что же дальше?
В январе, уже после праздников, мы опубликуем другие дневники разработчиков, а также расширенный геймплейный ролик Vampire: The Masquerade - Bloodlines 2.