От Resogun до Returnal: развивающаяся магия визуальных эффектов, которая оживила Атропос

От Resogun до Returnal: развивающаяся магия визуальных эффектов, которая оживила Атропос

Захватывающий взгляд на то, как в игре появились щупальца, объемный туман и многое другое.

Помимо увлекательного игрового процесса, Housemarque известен невероятными эффектами частиц. В таких играх, как Resogun, Alienation, Matterfall и Nex Machina, использовалась запатентованная технология VFX, которая выводила на экран красочные взрывы, чтобы вознаграждать игроков за уничтожение врагов или прохождение уровней. В Returnal Hausmarque переключились не только с top down камеры на камеру от третьего лица, но также на более приземленный и темный художественный стиль, чем раньше. В этой статье Risto Jankkila, ведущий художник по визуальным эффектам, и Sharman Jagadeesan, старший программист графики, рассказывают нам, как они использовали свои технологии визуальных эффектов, чтобы оживить чужую планету Атропос и ее жителей.

Ниже вы можете найти полное видео с описанием некоторых демонстрационных особенностей визуальных эффектов Returnal. В дополнение к этому, в этой статье мы подробнее рассмотрим некоторые из них.

Returnal — VFX Breakdown | PS5

История нашей технологии визуальных эффектов

Мы работали над нашей проприетарной технологией визуальных эффектов со времен Resogun (игра для PS4 2013 года), где первый прототип нашей текущей системы частиц использовался для некоторых демонстрационных эффектов. После Resogun система частиц получила графический пользовательский интерфейс, и мы начали называть ее системой частиц следующего поколения (NGP). В 2014 году мы приняли решение производить все эффекты частиц для Alienation с помощью NGP. После выпуска Alienation система использовалась для Nex Machina и портирована на Unreal Engine для Matterfall.

NGP разработана, как система работающая только на графическом процессоре с минимальным задействованием CPU. Основное внимание уделяется хорошей производительности и гибкости. Создание частиц выполняется художниками VFX, которые пишут фрагменты вычислительных шейдеров, которые определяют поведение частиц и данные. NGP заботится о распределении памяти и большей части стандартного кода, в то время как художники могут сосредоточиться на поведении и визуальных эффектах.

В настоящее время NGP не предназначен для обработки только эффектов частиц. Его также можно использовать для управления поведением вокселей в объемах или для создания динамической процедурной геометрии. У нас также есть несколько модулей, которые генерируют данные, которые будут использоваться в качестве входных данных для эффектов.

Например, у нас есть собственный модуль моделирования жидкости, который может передавать данные моделирования в NGP. Другой пример - модуль voxeliser, который может преобразовывать анимированную сетку в воксели. Затем эти данные можно использовать для создания объемных эффектов персонажей. Другие ресурсы, такие как текстуры, матрицы костей и буферы вершин, также могут использоваться в качестве входных данных для эффектов частиц.

Магия визуальных эффектов за щупальцами и следами полета вражеских снарядов: узловые частицы

С самого начала разработки Returnal было ясно, что мы хотим сделать что-то особенное с вражескими существами на Атропосе. Директор игры Harry Krueger хотел, чтобы они напоминали глубоководных существ, обладающих такими свойствами, как биолюминесценция и щупальца.

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

К счастью, у нас уже было решение. Команда экспериментировала с растительностью из частиц для более ранних проектов, и был разработан специальный тип частиц для ветвления растительности, такой как деревья. Мы назвали этот тип частиц «Узловая частица», чтобы отразить его свойства и поведение.

Этот тип частиц позволяет нам создавать однонаправленные родительско-дочерние связи. Частица может быть родительским элементом для нескольких дочерних элементов, но у частицы может быть только один родительский элемент. При чтении родительской частицы, её данные имеют возраст на один кадр, то есть не те данные, которые записываются в текущем кадре. Это делает невозможным строгое «следовать» за родительским элементом и приводит к побочному эффекту, из-за которого движение частиц кажется «органическим». Этот побочный эффект широко используется в эффектах частиц в Returnal, и он был особенно полезен для таких вещей, как щупальца.

Но прежде чем мы начали работать над поведением щупалец, нам нужно было решить, как мы будем их отображать. Сначала мы поэкспериментировали с отрисовкой плоских полос многоугольников. Качество было близко к приемлемому, но отсутствовало в некоторых областях, например, в тенях. Через некоторое время мы остановились на рендеринге щупалец в виде цилиндрических сеток, которые были построены NGP во время работы.

После того, как мы остановились на рендеринге цилиндров, мы могли сосредоточиться на поведении щупалец. Имея возможность контролировать поведение частиц, мы больше не были ограничены только физическим моделированием, но могли удобно изменять движение щупалец в зависимости от состояния врага. Это облегчило нам эксперименты с такими вещами, как принуждение щупалец двигаться определенным образом, когда противник готовится к атаке. Мы согласовали тайминги с командой и дизайнерами, которые отвечали за разработку врагов, чтобы убедиться, что поведение щупальца поможет передавать состояние врага вместе с анимацией и другими визуальными эффектами.

Узловые частицы также пригодились для многочисленных лент и следов в игре. Мы хотели, чтобы у некоторых самонаводящихся снарядов оставался длинный след, который на некоторое время задерживался бы на экране позади. Также в следах вражеских атак в ближнем бою используются узловые частицы. Ниже вы можете увидеть видео, на котором частицы узла следуют за своим родителем, создают ленточный след, за которым следует атака самонаводящейся пулей со стороны Phrike.

Моделирование жидкости

Один из наших ключевых принципов в Housemarque в отношении визуальных эффектов - как можно больше моделировать во время выполнения, используя как можно меньше предварительно запеченных данных. Поскольку мы использовали моделирование жидкости в наших предыдущих играх, таких как Alienation и Matterfall, нам с самого начала было ясно, что мы не должны довольствоваться предварительно запеченными данными для Returnal.

Вместо этого мы используем симуляцию жидкости вокруг игрока в реальном времени, чтобы имитировать воздушный поток, который влияет на движение частиц, растительности и других элементов VFX. В дополнение к этой симуляции (которую мы называем Global Fluid Simulation) мы можем иметь дополнительные симуляции, прикрепленные к различным участникам игры.

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

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

Вокселизатор и объемные эффекты

Одним из элементов окружающей среды, который мы хотели иметь в первом биоме Returnal (заросшие руины), был густой объемный туман, как на кладбище. Из-за разницы высот на наших уровнях процедурное размещение тумана оказалось проблематичным. Вместо этого мы решили разместить объемы тумана вручную. Поскольку команда по окружающей среде должна была разместить большое количество зон, нам пришлось максимально упростить процесс.

Гибкость нашей системы частиц позволила нам построить эти объемы в NGP. Поскольку данные и поведение частиц можно полностью настроить, мы можем сохранить трехмерный индекс для ряда частиц и сделать так, чтобы они представляли объем. Границы объема могут передаваться как постоянные данные от ЦП к NGP. Наряду с трехмерным индексом мы также можем хранить любые другие данные для каждого воксела. Это дает нам возможность хранить разные состояния для каждого вокселя внутри объема. Помимо возможности хранить состояния вокселей, мы также можем изменять их логику обновления в зависимости от их положения в игровом мире или внутри зоны.

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

Собираем все вместе, чтобы создать битву с боссом Phrike

Для встречи с боссом Phrike мы хотели иметь возможность испускать объемный туман из её скелетной сетки. Это создало проблему, поскольку объемный туман и каркасные сетки построены из различных типов элементов. Скелетная сетка - это набор вершин, анимированных точек в трехмерном пространстве, которые упорядочены для формирования треугольников, которые можно визуализировать. Вершины можно размещать произвольно, образуя самые разные формы от деревьев до гуманоидов. С другой стороны, объемный туман использует кубы. Эти кубы состоят из более мелких элементов, называемых вокселями. В отличие от скелетных сеток, объемы тумана в Unreal Engine всегда имеют форму кубов, как и воксели, из которых они построены.

От Resogun до Returnal: развивающаяся магия визуальных эффектов, которая оживила Атропос

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

От Resogun до Returnal: развивающаяся магия визуальных эффектов, которая оживила Атропос

Решением этой проблемы стал real-time вокселизатор. Вокселайзер принимает скелетную сетку в качестве входных данных и выводит объем, в котором каждый воксел, находящийся внутри скелетной сетки, помечен как занятый. Это упростило процесс испускания тумана, поскольку нам нужно было только проверить вывод вокселизатора и посмотреть, помечен ли данный воксел как занятый или нет. На видео ниже вы можете увидеть результат работы вокселизатора, использующего сетку Phrike в качестве вводных данных.

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

На этом мы завершаем наше глубокое погружение в визуальные эффекты Returnal. Мы надеемся, что вам понравилось это читать, и хотим поделиться другими нашими приемами и методами в будущем.

Увидел этот пост в блогах Playstation, но только на английском. Мне игра очень зашла и захотелось поделиться статьей с теми, кому Returnal тоже понравилась, но статью пропустил или не смог прочитать (перевода у нее нет).

Прошу прощения, если местами перевод не совсем понятный. Старался, как мог.

Всем добра.

135135
33 комментария

Ну количество всяких частиц и эффектов - мое уважение

23
Ответить

Комментарий недоступен

8
Ответить

Некстген в деталях получается.
Очень круто

14
Ответить

Спасибо за перевод!

4
Ответить

Был рад стараться. Яб ее еще в Игры репостнул, но не знаю, как.

7
Ответить

Ух, Фрика, больше всего смертей от тебя я получил. 
За статью спасибо, почитаем-с. 

5
Ответить

Да ладно, один из самых простых же боссов. И меньше бегать до него надо, и атаки не очень опасные. Самая опасная - это рывок к тебе с ударом. Но он ее делает всегда после другой, так что легко определяется заранее. Хотя тут как с оружием повезет. Вот что не нравится, это жуткий рандом с оружием. При этом буквально несколько пушек реально юзабельные. Выпали - прошел, не выпали - либо дрочи босса 3 часа, либо умирай, если самообладания не хватит. У меня так Гиперион на одном трае даже не успевал все атаки скастовать, так как я фазу заканчивал до того, как он это делал.

1
Ответить