Вы играли в Halo 5: Guardians? Если так, то вы уже испытали на себе свободное падение. Fxguide узнали у команды разработчиков 343 Industries и студии анимации Axis Animation, как создавался вступительный ролик, снятый практически целиком одним кадром.
fxg: Как создавалась воздушная среда, включая облака и горы?
Sergio Caires: Еще до начала работы я играл с планетарной/атмосферной системой рендеринга, которая позволила бы камере пройти весь путь от земли через детализированные облака до места, где видна вся облачная система, и где общая структура является реально узнаваемой (используя The Blue Marble от NASA в самом высоком разрешением), в том числе реалистичные визуальные явления, такие как цвета заката, когда солнце низкое, эффект радуги и т. д.
Плотность планетарной атмосферы и облаков были созданы с помощью процедурного шейдера объема CVEX в Houdini (прим. пер.: Houdini — профессиональный программный пакет для работы с трёхмерной графикой.) что, следовательно, означало, что эти детали были видны только во время рендеринга, но тот же шейдер использовался для размещения облаков и т. д. при низком разрешении в окне просмотра.
Планетарные облака в основном представляют собой сферическую проекцию. Это создало своеобразные экструдированные облака в качестве начальной точки. Различные шумы, пирокластические и т. д. используются для того, чтобы «разрушать» данные в разных точках, чтобы создавать детали и волнообразные эффекты на шкале пикселей облаков.
Воздушно-десантная команда
Чтобы заставить атмосферные явления работать, мне нужно было выяснить, как создать объемный шейдер со спектральной прозрачностью, что означало бы, что если плотности/масштабы правильны, то небо будет естественно реагировать на Солнце и положение камеры.
прим. пер.: Шейдеры используются программами, работающими с трёхмерной графикой и видео, для определения параметров геометрических объектов или изображения, для изменения изображения (для создания эффектов сдвига, отражения, преломления, затемнения с учётом заданных параметров поглощения и рассеяния света, для наложения текстур на геометрические объекты и др.).
Эту часть было очень просто сделать в Mantra (рендерер Houdini), которая может отренерить практически все, что вы только можете себе представить, через пользовательские шейдерные сети, при этом не требуя от вас высокого уровня программирования.
Если вы делаете вычисления плотности к непрозрачности для каждого канала непрозрачности RGB отдельно, где каждый канал соответственно умножается на параметр цвета неба, тогда каждый канал будет иметь разные коэффициенты затухания плотности/непрозрачности и поэтому итоговая интеграция в Mantra будет показывать смену оттенков цвета как в природе.
Действие происходит на похожей «виртуальной планете», однако все низкие/близкие облака являются дополнением. С этой целью они также являются конструкциями CVEX, которые либо берут SDF основных форм как водные данные, либо используют входные данные SDF для удаления массы. Эти поля добавляются или вычитаются с помощью различных шумов и деформируются, чтобы имитировать некоторые облачные функции, такие как сглаживание и перетаскивание облачных масс.
прим. пер.: SDF – a signed distance field, представляет собой функцию над пространством, которая оценивает расстояние до поверхности объекта.
Все это и все остальное в сцене, коли на то пошло, зависит от света, проходящего через атмосферу, так что на разных высотах все соответствующе и автоматически подкрашено.
Для местности также использовались полностью процедурные подходы, чтобы обеспечить необходимый охват с любой возможной точки зрения, с которой мы можем столкнуться в параллельном производстве. Местность низкого разрешения была разделена, потом преобразована в репрезентативные объемы VDB, которые могут быть изменены различными процедурными шумам (в основном базирующимися на voronoi — Эта процедурная текстура, основанная на эффекте полигонов Вороного), чтобы добавить скальных рельефов и пещеры. Они были замаскированы на основе очевидных вещей, таких как склон/подъем, так же как процедурно генерируемые маски маршрутов анимированных ассетов, чтобы персонажи/корабли не проходили сквозь вещи, которые они не собирались уничтожать.
В результате получилась сетка довольно высокого разрешения, но все же недостаточно детализированная для крупного плана, поэтому те же самые шумы, которые «высекают» пейзаж, также используются в качестве displacement.
Продолжение битвы
fxg: В вашем ролике полно таких замечательных эффектов — от взрыва кораблей до дыма, снега, кусков земли и огня — можете побольше рассказать о техническом подходе к этим элементам?
Sergio Caires: Я расскажу немного об аспекте рабочего процесса, а детали оставлю нашему ведущему художнику по спецэффектам.
Мы работали с двухсторонней системой обмена активами. Я постоянно обновлял ассеты окружения, в то время как fx-ребята ссылались на них в своей работе и тестировали интеграцию. Взамен они производили легкие ассеты, содержащие только отложенную загрузку геометрии, шейдеров, fx-света, что я в свою очередь возвращал в основной файл рендеринга, а при необходимости «покручивал» цвета шейдеров или плотность для лучшей интеграции с жесткой поверхность.
Jayden Paterson (FX-Супервайзер в Axis): С самого начала мы решили использовать гораздо более физически подход, чем обычно. Мы хотели получить как можно больше спецэффектов, освещенных и визуализированных в реальной сцене. По этой причине мы рассматривали каждый эффект как отдельный ассет.
Это означало, что мы могли бы начать работать над базовой версией, например, снежного взрыва, затем создать ассет для сцены освещения. И начиная с этого момента по мере того, как мы приближаемся к финальному виду самого эффекта, этот актив будет постоянно обновляться и влиять на всю главную сцену с правильно отброшенными тенями, глобальным освещением и т.п. И это было сделано почти для всех спецэффектов в кадре.
Еще одна проблема заключалась в том, чтобы соединить все спецэффекты в одну длинную сцену. Окружающий мир и путь, который проходят спартанцы в этом ролике, огромны, поэтому важно было определить место и время попадания FX в кадр. Это все-таки место военных действий! К тому времени, когда мы начали заполнять пространство камеры как можно большим количеством отдельных эффектов, мы могли вставлять и манипулировать всеми этими ассетами намного быстрее, чем если бы мы выбрали более традиционный пайплайн.
Это был также первый случай, когда у нас была возможность опробовать систему частиц Houdini (PBD), которую мы использовали для моделирования снега. Повторюсь, гораздо более физический, скрупулёзный подход к симуляции, где обычно можно схалтурить. Толстый дым, мелкий распыляемый дым, пыль и т.п. – всем управляло первоначальное движение частиц. Важная вещь при такой сложной работе по симуляции заключается в том, чтобы точно знать, где и как долго эффект будет видимым, ведь если снег будет скрыт за скалой, мы могли бы удалить снег. Все эти ассеты в конечном итоге были втиснуты в один большой файл сцены, так что мы не могли тратить память на загрузку частиц, которые вы бы не видели в течение более чем 100 кадров!
Производство с большим количеством эффектов.
fxg: Что действительно приятно, так это вспышки, движение камеры, которые «находят» действия — можете ли вы рассказать о виртуальном кинематографе, включая освещение?
Brien Goodrich: Мы действительно хотели, чтобы этот ролик выглядел реально. Очень важно было передать ощущение присутствия оператора, чтобы пригласить аудиторию в команду «Осирис». Но после прыжка из Пеликана, камера движется просто не реалистично. Когда вы делаете что-то подобное — вы рискуете «сломать» только что созданное погружение. Поэтому мы попытались подчеркнуть некоторые элементы, которые помогли бы «заземлить» камеру — вес, движение, вибрацию, удары, вспышки объектива и дефекты изображения — мы все еще хотели чувствовать присутствие оператора. Мы представили себе, что оператор-суперспартанец прыгает из Пеликана вместе с командой и следит за ними в действии. Кроме того, общий вид освещения играет огромную роль в поддержании этого погружения. Кусок бы провалился без освещения.
Sergio Caires: Я полагаю, что про освещение уже рассказали выше, но в дополнение к физическому подходу к небу/атомам, некоторые горы были удалены или добавлены, чтобы обеспечить нужное количество игры света и тени.
fxg: Как выглядел кинематографический рендер и какие трудности он принес?
Sergio Caires: У нас был всего один главный файл для рендеринга. Но масштаб и размеры требовали промежуточных остановок. С этой целью рендеринг был разделен на начальный средний и конечный отрезки, а fx-ресурсы и клиентская анимация, просмотр, утверждение были приоритетными.
Визуализация была разделена на два основных дорогих отрезка и несколько дешевых. В основном были части с окружением (и фантомное все остальное), а в другом – все остальное – атмосфера, облака, ассеты, спецэффекты. В дополнение к этому было еще несколько разделений, освещение происходило от световых вспышек, снарядов и спартанских костюмов. Такие вещи были отделены, потому что вероятнее всего потребовали бы обновления, будучи при этом очень дешевыми для визуализации. Было бы безумием рендерить дорогие куски вместе ними!
Кадр из финальной сцены
В игре были различные факторы, которые повлияли на вышеупомянутый подход к рендерингу. В сцене повсюду находились объемы (объекты и другие активы/ассеты) внутри других объемов, множество в размытом движении, так что по разным причинам мы не могли использовать глубокую комбинированную съемку (deep compositing). Что касается внесения коррективов в главный рендер – это было похоже на работу с реально отснятым материалом.
Конечно, можно ожидать экономических потерь делая повторный рендеринг за несколько подходов, но, учитывая все подробности, это решение лучше всего подходит для этой проблемы. На практике я нахожу, что экономический вопрос повторной визуализации может быть довольно спорным. Учитывая, что компоненты взаимодействуют друг с другом, они нуждаются в повторной обработке при любом изменении, например, тени или текстуры. Если происходило изменение затеняющих текстур персонажа, было относительно просто исправить это с помощью уже существующей маски.
Я думаю, основываясь на этом и других прошлых опытах, лучший подход в такого рода проекте — попытаться сохранить его максимально простым и управляемым, не разбивая на миллион кусков и не имея слишком большого количества рабочих рук. Для начала мы поставили перед собой цель создать хорошо интегрированные спецэффекты, вместо того, чтобы тратить уйму времени на создание чудовищно сложных структур.
Я думаю, что надо отдать должное программам Мантра и Гудини, потому что все объекты, все эффекты, тени, рефлексы и все анимированные ассеты находятся в одном и том же файле, в одном и том же пространстве; и визуализируются в очень разумное время при довольно скромном распределении ресурсов, обеспечивая гибкость и низкий уровень доступа для создания таких вещей.
Я также хочу подметить, что не весь рендер был основан на физике! Должны были быть сделаны различные оптимизации для своевременного рендера, например, некоторые объекты не «ловили» непрямой свет атмосферных объектов, вместо этого использовался стандартный физический свет неба. Другими словами, некоторые менее значимые взаимодействия со светом были либо отбракованы, либо наложены.
fxg: Не могли бы вы рассказать о музыке, которая также поспособствовала погружению в ролик?
Brien Goodrich: Изначально мы создали превиз, используя музыку из Halo 4, что помогло дать общее ощущение. Затем наш композитор Kazuma Jinnouchi написал композицию, которая получилась просто потрясающей. Я даже не могу это описать – мне кажется, что у него замечательный инстинкт, как выразить такие большие и тонкие моменты с помощью музыки – меня разрывает каждый раз, когда я слышу его работы! Наш звукорежиссер Sotaro Tojima для работы над аудиоэффектами использовал как комнаду 343 Industries, так и одного из наших внешних аудио-партнеров — Brian Watkins. Я благодарен за весь их вклад. Звук и музыка действительно являются основой погружения для этого ролика.