Предисловие

В большей мере эта статья основана на статье-интервью 2017 года, которое взяли у создателей фильма ребята из SideFX. Ссылка на оригинал.

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

В силу того, что та статья оформлена людьми из SideFX, почти весь разговор ведётся о том, как аниматоры из Walt Disney Animation Studios использовали Houdini.

И это вполне логично, ведь большая часть всех эффектов для мультфильма делалась именно в Houdini. Однако процесс создания подобных сцен [наполненных эффектами] намного шире, нежели то, как его представили в статье.

Поэтому, помимо авторского перевода оригинальной статьи, я попытаюсь пояснить кое-какие вещи, описанные в ней, а также выскажу свои мысли на этот счёт. Проще говоря, своеобразно прокомментирую проделанную работу художников из Disney Animation.

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

Однако эти примечания будут довольно интересны и, в некоторой степени, полезны.

Мультфильм Walt Disney Animation Studios «Моана», вышедший на экраны в 2016 году, нашёл отклик у зрителей всех возрастов. Режиссёры мультфильма Рон Клементс и Джон Маскер рассказали историю, богатую полинезийской культурой, которая была одновременно смелой, забавной, драматичной и мощной.

Анимационный фильм «Моана», повествующий о молодой девушке (озвученной Аулии Кравалью), которая покидает свой райский остров в поисках полубога Мауи (Дуэйн Джонсон), чтобы тот помог ей спасти свой народ, получил высокую оценку за 3D-анимацию и визуальные эффекты.

Большая часть фильма разворачивается в океане – среде, которая должна быть смоделирована в мельчайших деталях – от спокойных морей до сильных штормов, и даже в виде водяного персонажа.

Чтобы рассказать эту удивительную историю требовалось создание правдоподобной симуляции воды и множества иных эффектов, в том числе связанных с могущественным [вулканическим] демоном Те Ка и будущим пробуждением богини Те Фити. В этой статье члены команды анимации эффектов из Walt Disney Animation Studios описывают, как они выполняли требуемые задачи при создании воды и остальных эффектов для мультфильма «Моана», используя такие инструменты как Houdini и другое программное обеспечение, специально созданное для мультфильма.

Здесь важно упомянуть, что под программным обеспечением в студиях зачастую подразумеваются плагины к существующему ПО или собственные технологии, выраженные в самостоятельных модулях. Проще говоря, [иное] специально созданное программное обеспечение – не означает проприетарный софт уровня тех же Maya и Houdini.

Создание инфраструктуры для эффектов

Столкнувшись с различными проблемами в симуляции воды и [прочих] эффектов, в Walt Disney Animation решили создать свой собственный проприетарный инструмент (решатель) для воды. Он получил название «Splash» и был интегрирован непосредственно в контекст DOP в Houdini.

DOP (Dynamics Nodes) – это набор нод динамики, при помощи которых и осуществляется создание всех физически-управляемых элементов сцены: от воды и песка до рушащихся скал и магмы.

Также студия создала специальную библиотеку эффектов под названием «Foundation Effects», которая была призвана помочь в достижении требуемого уровня правдоподобия воды.

«Эти ресурсы эффектов были доступны в облегчённом представлении GL всем отделам», – говорит руководитель отдела анимации эффектов Дейл Майеда.

Проще говоря, данная библиотека (Foundation Effects) представляет из себя набор эффектов, необходимый для большинства отделов, участвующих в создании соответствующих сцен в мультфильме.

Благодаря централизованности такой системы, каждый из отделов имел доступ к этому набору эффектов и, следовательно, мог выполнять свою работу без ожидания того, пока те или иные базовые эффекты будут созданы.

Простота в их доступности всем отделам заключается в том, что их передавали в упрощённом виде OpenGL-шейдеров (OpenGL Shaders), поддерживающихся Houdini.

Поскольку представление эффектов в хорошем качестве (особенно в таких масштабах как в мультфильме) крайне ресурсоёмкий процесс, к которому прибегает только, непосредственно, отдел по эффектам (так как именно этот отдел и выводит финальные версии эффектов), то в целях оптимизации, прочим отделам нецелесообразно прибегать к тяжёлым расчётам, чтобы использовать нужные эффекты в своей работе. Поэтому упрощённые представления эффектов в виде OpenGL-шейдеров решают проблему оптимизации и позволяют распространять эти наборы [эффектов] на все отделы.

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

«Ресурсы могут добавляться и переназначаться на этапах макетирования (layout'а), анимации, эффектов и освещения, при этом они полностью визуализируются в ходе всего пайплайна. Houdini Pyro и Flip широко использовались для создания библиотеки взрывов лавы, пирокластических дымовых шлейфов, облаков пара, брызг и многих других эффектов» – продолжает Майеда.

Получается, данный набор эффектов представлен гораздо шире; в том плане, что эти ресурсы можно подстраивать под необходимый результат на разных уровнях создания сцены: от макета (layout'а) до финальных эффектов и освещения.

Привычный пайплайн создания сцен, наполненных эффектами, завязан на таких ключевых этапах, как макетирование (layout) и финализация эффектов.

Во время создания layout'а эффектов в сцене (обычно он происходит на этапе layout'а всей сцены, но может производиться и позже) сперва решают все моменты, связанные с художественной частью: их расположение, интенсивность, то как они будут влиять на персонажей в сцене, насколько сильно будет происходить взаимодействие персонажей и эффектов, и прочее.

И зачастую процессы по созданию макета сцены (художниками по макету) и последующие действия других отделов завязаны на то, как быстро отдел по эффектам выполнит свою работу, представив черновые версии эффектов для layout'а. А затем, как быстро он сможет внести соответствующие правки в эти наборы эффектов, если черновые варианты эффектов были забракованы режиссёром при осмотре layout'а всей сцены. Параллельно с этим, отдел по эффектам должен планомерно перейти к этапу создания финальных версий эффектов (которые не были забракованы), со всеми вытекающими техническими особенностями этого процесса, в виде той же оптимизации.

Одним словом, это классический, местами муторный процесс, который очень сильно давит на отдел своими ограничениями по временем и непостоянностью (порой команда должна буквально разрываться – раздваиваться на две группы, одна из которых будет переделывать бракованные эффекты, а вторая перейдёт к созданию финальных версий одобренных эффектов).

Решение же предоставить всем отделам заранее заготовленный набор соответствующих ресурсов (Foundation Effects), чтобы, в случае чего, команда по эффектам сразу могла дорабатывать черновые варианты, не тратя время на создание чего-то с нуля, – наиболее удачное решение для такого сложного пайплайна, как в фильме «Моана».

[Для пояснения], упомянутый Houdini Pyro – относится к пакету объемной симуляции жидкостей и жидкообразных элементов в Houdini. Решатель Pyro используется для воспроизведения движения огня, дыма и взрывов, но также может использоваться для моделирования других явлений, подобных жидкости, таких как туман или лавина.

В свою очередь, Houdini Flip – [своего рода] гибридная система моделирования (симуляции) жидкости на основе частиц и их объема. Все данные о жидкообразных элементах хранятся в частицах, и только сами частицы должны покадрово воспроизводиться, гарантируя тем самым отсутствие нежелательного смешивания или потери жидкообразного состояния. Жидкость или жидкообразный элемент представлены в виде частиц в увеличенном масштабе, что позволяет перемещать их с помощью нод POP (узел, который генерирует частицы из геометрии, часто являющийся ссылкой на SOP (Geometry Nodes), также является нодой динамики) и DOP (Dynamics Nodes).

Уже здесь можно наблюдать, что Walt Disney Animation совершенно спокойно прибегает к стандартным решениям в рамках Houdini, пускай и со своим подходом, но всё же без нагромождения проприетарного софта.

«Библиотека «Foundation Effects» предоставила вышестоящим отделам (анимации и освещения) точные представления эффектов для расположения камер и создания точечной анимации персонажей, которые выполняют действия, соотнося их с этими эффектами», – добавляет Майеда.

«Это также позволило художникам по эффектам использовать ресурсы [эффектов] в качестве композиционного инструмента и обеспечить точность и качество множества универсальных эффектов, необходимых для каждого кадра».

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

Береговая линия

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

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

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

«Специальный риг содержал элементы, созданные в SOP (Geometry Nodes), POP (описание выше), DOP (Dynamics Nodes) и даже COP (Composite Nodes) для карт мокрого песка, которые были получены в результате моделирования береговой линии (симуляции набегающих волн)», – объясняет ведущий аниматор эффектов Эрин Рамос.

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

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

Наличие в этом дереве нод геометрии (SOP) говорит о том, что прототипирование волновых жидкостей выполнялось с использованием грубых кусков геометрии. После чего, данные, полученные в ходе этого прототипирования, могли использоваться для полноценной симуляции. О чём свидетельствует применение нод типа POP, которые позволяют генерировать частицы на основе геометрии.

В большей мере это начинает походить на привычный подход Disney Animation в реализации таких масштабных симуляций: взяли геометрию, создали прототип, произвели расчёты, выбрали наиболее удачный вариант, сделали черновую симуляцию. Однако последующие решения команды гораздо интересней.

«Чтобы создать карты распада и возраста для влажного песка, постоянные затенённые изображения симуляции воды с ортографической камеры [направленной сверху вниз] были обработаны с помощью цикла для каждой ноды типа COP (Composite Nodes)», – говорит Рамос. «Эти карты [времени] распада (убывания воды) и возраста присоединялись к шейдеру песка, чтобы создать впечатление, что тонкий слой воды впитывается в песок».

Разбивающиеся волны различных размеров, в зависимости от сцены, были смоделированы в Houdini с использование решателя «Splash» в DOP (Dynamics Nodes) или сгенерированы процедурным методом в SOP (Geometry Nodes) со слоями флип-частиц поверх этих нод.

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

«Мы использовали Houdini для создания прокси-геометрии волн разного размера, разбивающихся о риф», – продолжает Рамос. «Эта геометрия была передана в отдел layout'а для размещения [её] в сцене, и как только мы получили согласие режиссёра на общее время [продолжительности] и композицию волн, аниматоры приступили к созданию анимации лодки в соответствии с этой геометрией.

Эти опосредованные волны были не просто одноразовой геометрией – они содержали такие атрибуты, как скорость и эмиссия (emission), которые позволяли художникам по эффектам создавать пену, туман, всплеск [вокруг] лодки и другие второстепенные элементы, необходимые для кадра».

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

Имеется ввиду, что, заданные для неё параметры использовались в качестве основы для симуляции сопутствующих воде элементов, таких как пена, всплески и прочее.

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

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

Риг «Береговой линии» (риг для прибрежной воды) содержал ряд кастомных активов Houdini.

«Один из них, – рассказывает Рамос, – проводил контроль качества окончательной геометрии, прежде чем передать её команде по освещению. Поскольку для правильного затенения геометрии требовалось так много атрибутов, нам нужно было иметь возможность быстро запускать рендеры проверки работоспособности [всей системы – и рига, и симуляции], которые визуализировали атрибуты береговой линии (т.е. визуализировали всю симуляцию прибрежной воды, в том числе и сопутствующие элементы в виде пены и прочего)».

Процесс освещения [сцены] и проблемы, связанные с этим – отдельная тема. Однако здесь вновь можно увидеть принцип «просчитывать всё заранее», который избрали создатели фильма для этого пайплайна.

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

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

В нашем случае, вода (как и прочие жидкости и жидкообразные субстанции) и её сопутствующие элементы (пена, брызги) довольно капризный материал, который требует тщательно выверенного PBR.

Всё это осложняется поведением жидкости, поскольку она не статична. Следовательно, для оценки предварительного внешнего вида художники не могут опираться на результаты (предварительные рендеры и отчёты конфигурации) нескольких кадров – им необходимо оценивать всё движение воды, чтобы понять, насколько удачно свет взаимодействует с ней.

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

Построение лодочных эффектов

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

«Чтобы обработать более 350 сцен (shots) мультфильма в открытом океане, двое наших ведущих специалистов по эффектам, Дэвид Хатчинс и Блэр Пирпонт, разработали автоматизированный процедурный риг для следа, двигающегося за лодкой, – говорит Майеда».

«Это позволило загрузить доступные метаданные океана, выраженного из макета, запустить полную симуляцию взаимодействия лодки с [вспененной] белой водой, сгенерировать и обработать наборы уровней и создать композиционный [график] LevelSet, который бы плавно сочетал симуляцию с полями высоты [остального] океана.

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

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

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

После чего, используя всё эти же данные, а также методы, описанные Дейлом Майедой, эти две симуляции совместили.

Как это показано на картинках ниже (Изображение 1).

На самом деле, этот метод – скорее композиционный процесс (композитинг), поскольку это самое совмещение двух симуляций не подразумевает прямого физического взаимодействия. Просто один слой (кусок воды с симуляцией следа лодки) поместили в другой (океан) и, грубо говоря, синхронизировали их движение.

«Мы поставили перед собой цель создать риг, который был бы полностью автоматическим, при воспроизведении вышестоящими отделами [макетирования и анимации], которые публикуют (воспроизводят) свою работу», – говорит Хатчинс.

Система рига была создана в Houdini и распространялась как Houdini Gallery, что позволяло художниками вносить изменения [в связующие элементы] при необходимости.

Если конкретней, то эта система рига имела возможность прямого взаимодействия элементов, которые вносили или меняли те или иные отделы.

То есть, при внесении изменений художниками по layout'у, риг автоматически подгружал эти изменения и взаимодействовал с ними. То же касалось и анимации, которую выполняли художники по анимации эффектов при финальной симуляции: изменения автоматически соотносились с макетом (работой, проделанной художниками по layout'у) и воспроизводились. И всё это в рамках одной системы рига, которая могла подстраиваться под такие метаморфозы.

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

«При симуляции основной водной поверхности использовалась реализация Houdini нашего решателя «Splash», – говорит Хатчинс, – а для вспененной воды использовался Houdini POP Solver (решатель Houdini на уровне нод типа POP)».

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

Изображение 1.
Изображение 1.

Аниматор эффектов Алекс Моавени объясняет, как художники этого добились:

«С помощью кода VEX в DOP (Dynamics Nodes) мы управляли тем, как частицы воды ударялись о поверхность коллайдера (collision surface) и отрывались в виде капель, когда [они] проходили определённый порог плотности и скорости с заданными параметрами.

Эффект пузырьков был достигнут аналогичным образом. Мы использовали VEX для эффективного выделения частиц океана (имеется ввиду более интенсивный разброс частиц от симуляции воды) с достаточной энергией, чтобы 'рождать' пузырьки и управлять их поведением, когда они ударяются о коллайдер [лодки]. Используя атрибут 'Wrangle' (данный атрибут запускает фрагмент кода VEX для изменения значений атрибутов), мы создали эффективные индивидуальные решения и воспроизвели только те элементы управления, которые нам были нужны для точной настройки желаемого эффекта».

VEX – это высокопроизводительный язык выражений Houdini, используемый для решения различных задач, от написании шейдеров до анимации и сложных симуляций.

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

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

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

Ко всему, в типичных сценах (shots) сначала обрабатывалась анимация лодки, после чего запускалась симуляция воды. Этот процесс производили задом наперёд в тех случаях, если движение воды должно было повлиять на анимацию (например, когда Моана находится на лодке, а лавовая бомба попадает в воду поблизости, толкая её и, следовательно, влияя на лодку соответствующим образом). В этих случаях лодка управлялась не анимацией, а симуляцией.

«Это означало, – объясняет аниматор эффектов Мари Толлек, – что аниматор выполняет первый проход, после которого мы проводили быстрые итерации симуляции воды с низким разрешением, чтобы дать приблизительное представление об общем движении воды. Она будет одобрена и отправлена обратно в анимацию для адаптации к движению воды. Затем она вновь вернется в отдел эффектов, чтобы тот запустил финальную симуляцию с высоким разрешением».

Такой метод предусматривает последовательную работу отделов и, в то же время, позволяет добиваться так называемой бесшовной анимации, где, при смене решений (с анимации на симуляцию), изменения не ощущаются, а всё действие однородно от кадра к кадру.

Получение артистичности из.. воды

Решению Моаны покинуть остров в некоторой степени способствовал водный персонаж, обладающий своей особой индивидуальностью, – Океан.

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

Работая с Океаном, отдел эффектов сперва задавал небольшие настройки компонентов (из которых состоит вся его динамика).

«Мы использовали Houdini Gallery для распространения этого рига», – говорит руководитель эффектов персонажа Бен Фрост.

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

Фрост добавляет, что для Океана была разработана целая коллекция ригов. Например, в более спокойные моменты команда [по эффектам] использовала более процедурный подход с картами шума и внутренними пузырьками.

«В более активных сценах, – говорит он, – в основном использовались динамических системы рига (риги для динамического воспроизведения).

Одним из таких решений является симуляция жидкости, выполняемая в позе покоя с привязкой к анимации. Затем объект был 'украшен' воспроизведением интерактивного движения воды [по всему объекту] и всплесков. Примером этого является Моана, 'дающая пять' Океану.

Обычно мы использовали этот метод всякий раз, когда нам требовалось, чтобы персонаж 'распадался' на части. Вторичная симуляция добавляла физически правильный компонент к персонажу (то есть наделяла его необходимыми физическими характеристиками для взаимодействия со всем остальным)».

Наш своенравный Океан, был частью основного океана, хотя в техническом плане выступал как отдельный элемент. И именно этот момент предстояло нивелировать с художественной точки зрения. Команда по эффектам должна была убедиться, что Океан не просто «маленькая форма, выступающая из воды, а нечто, что было частью океана в целом», – отмечает Фрост.

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

Фрост объясняет этот процесс так:

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

«Большая проблема, – добавляет Фрост, – заключалась в том, чтобы иметь возможность реализовать модульную структуру и в то же время [органично] сочетать отдельные элементы друг с другом. Много времени было потрачено на поиск методов, позволяющих заставить швы каждого компонента взаимодействовать друг с другом. Используя процедурные процессы, строящиеся на ограничивающих рамках, вырезанных формах и положениях в UV пространстве, для автоматизации позиционируемых субстанций (персонажа и основного океана), мы могли бы продвинуться довольно далеко, хотя часто требовалась корректировка результатов вручную, чтобы свести к минимуму видимость швов».

Несмотря на то, что геометрические швы удалось довольно точно согласовать, Фрост упоминаем, что отдельные поверхности всё ещё были заметны при рендеринге. Но преобразовав сетки в VDB-данные, команда смогла реализовать свой собственный процесс компоновки данных на уровне LevelSet (описанный при интеграции следа лодки).

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

Эффекты, передаваемые в виде данных VDB реализовываются через библиотеку OpenVDB.

OpenVDB – библиотека, позволяющая представлять объёмные данные в разряженном виде, то есть в виде самостоятельных узлов (точек) в пространстве, на основе которых выстраивается объём.

«Это дало нам возможность объединять поверхности в единую сетку во время рендеринга», – вспоминает Фрост. «Мы дополнительно предусмотрели поля смешивания для дальнейшего сглаживания областей перехода компонентов. Атрибуты также предоставлялись в виде полей, которые были запечены в сетке. Это позволило отделу эффектов предоставить материалы художникам по освещению для извлечения и обработки пост-рендеринга».

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

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

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

В данном случае, для решения этой проблемы прибегли к вышеописанному методу с VDB-данными и объединением сетки [элементов] разных симуляций. Информация из этих источников позволила отделу по свету соответствующим образом подогнать общее световое пространство сцены так, чтобы свести видимость швов к нулю.

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

Создание водных стен

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

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

Конкретно в этой сцене, художникам по эффектам предстояло решить эту задачу в два этапа – сперва, реализовать разделение водной поверхности, а затем, образовать из них два жидких потока.

При том, они должны были выглядеть как текучая водная масса, которая удерживается какой-то силой.

Изображение 2
Изображение 2
Изображение 3
Изображение 3

На картинках выше (на третьем изображении) вы можете видеть layout сцены, в котором видно чёткое разделение [первичной] симуляции краёв воды с остальной водной гладью (которая на том этапе вообще была выполнена кусками геометрии).

«Отдел макетирования предоставил нам различные прокси-геометрии для целевых форм водяной стены», – объясняет художник по эффектам Хироаки Нарита. «Затем мы проанализировали [ход] анимации для дальнейшей последовательности (shots) и превратили океан из обычной водной волны в конкретную водяную стену, не теряя реалистичного потока жидкости и её поведения. Нам также пришлось придумать очень гибкую настройку эффектов в соответствии с различными художественными направлениями (условиями анимации, освещения и прочих составляющих, влияющих на художественную часть кадра), чтобы сделать намерение Океана (как персонажа) читаемым».

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

«Во-первых, – говорит Нарита, – мы применили анимацию деформации поверхности, чтобы получить форму, скорость и время, соответствующие художественному направлению. Затем изменили анимацию, используя контроллер, созданный с применением нод типа VOP (Shader Nodes). После чего сгенерировали пользовательские атрибуты на поверхности и исходные точки для использования при симуляции [жидкости] в DOP (Dynamics Nodes), и после общей симуляции [тоже]».

Проще говоря, была произведена анимация деформации, из которой извлекли соответствующие данные о форме и скорости [движения], на основе которых необходимо было произвести симуляцию воды. При том, информация передавалась посредствам шейдеров.

Первое, о чём подумает пытливый читатель – это Displacement; однако навряд-ли он имел тут место быть, потому как покадровая деформация (составляющая анимацию деформации) подобным образом здесь совершенно неуместна, потому как на основе этих данных должны произвести симуляцию.

Авторами статьи не раскрывается этот момент, а потому, можно предположить, что здесь художники задействовали какие-то проприетарные решения Walt Disney Animation, но никак не Displacement.

В любом случае, подробностей об этом процессе у нас нет.

«Мы также воспользовались доступностью интеграции атрибутов для VOP (Shader Nodes) в DOP (Dynamics Nodes)», – добавляет Нарита. «Мы могли бы применить определённые изменения в поведении, такие как фаза разделения океана и фаза возникновения водной стены, просмотрев пользовательские атрибуты во время симуляции. Все VOP (шейдеры) в DOP (элементах динамики) рассматривались как поведенческие модули, чтобы мы могли организовывать и управлять (включать или отключать) определённое поведение при необходимости. В [общей] пост-симуляции мы могли бы изменить результат симуляции жидкости и интегрировать его в остальную часть океана с помощью точечных операций Houdini с кастомными атрибутами. Дополнительные данные о воде и пене были получены с помощью вторичного симуляции с помощью POP (узел, позволяющий генерировать частицы из геометрии) для всей воды и с помощью DOP (Dynamics Nodes) для вспененной воды».

Здесь вновь идёт речь о разделении симуляций, пусть они и составляют одну общую симуляцию.

Houdini позволяет извлекать информацию из разных типов нод и передавать соответствующим образом другим нодам. Вопрос лишь в подходах и методах реализации такого решения.

Использование нод шейдеров (VOP), передавая информацию из них для построения динамики в сцене (посредствам DOP), достаточно интересный подход, потому как, в первую очередь, он позволяет интерактивно и более предсказуемо контролировать физическую симуляцию. А это, в свою очередь, огромный плюс к построению кадра в художественном плане.

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

Пробуждение лавового монстра

Сцене, описанной выше, предшествует масштабная битва между Моаной и Мауи с вулканическим демоном Те Ка. Для реализации этой сцены, насчитывающей более 100 снимков (shots), художниками было подготовлено огромное количество эффектов лавы, огня, молний и пирокластических шлейфов, исходящих от демона.

Предварительная симуляция этих эффектов в Houdini была создана в виде слоёв, которые и образовывали самого монстра.

«Благодаря нашему новому рабочему процессу с применением «Foundation Effects», – рассказывает руководитель отдела эффектов Иэн Куни, – команда смогла использовать Python SOP для написания скриптов, которые позволяют создавать элементы, совместимые со всем пайплайном, охватывая при этом многие отделы и спокойно интегрируя их в разные пакеты [эффектов]».

В данном случае, библиотека «Foundation Effects» послужила базовым набором эффектов, за счёт которого художники смогли реализовать процедурную генерацию необходимых эффектов по средствам скриптов Python через ноды геометрии (SOP).

То есть, команда вновь прибегла к генерации частиц (для создания симуляции) из исходной геометрии. После чего была произведена симуляция этих частиц в виде лавовых потоков.

При том, огонь и текущая лава, постоянно исходящие из тела Те Ка – обрабатывались в Houdini процедурно, а это означало, что они, как правило, могли быть автоматизированы.

«Используя некоторые встроенные контексты Houdini, как CHOP, от могут автоматически [процедурно] реагировать на манипуляции производимые аниматором персонажа», – говорит аниматор эффектов Натаниэль Симс.

CHOP – узлы каналов, которые позволяют создавать, отфильтровывать и обрабатывать входные данные канала.

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

«Внутренняя молния возникла в складках самого дыма, – описывает аниматор эффектов Роберт Беннетт, – а внешняя молния образовывала дугу из дыма, прежде чем уйти обратно внутрь. Используя симуляцию по средствам POP в качестве основы для каждого удара, молния была сгенерирована в процедурной сети (связке) SOP и обработана для создания эффектов, на которых строится весь эффект молнии, что дало художникам возможность контролировать количество молний в каждом кадре».

Такая тесная интеграция сделала добавленные молнии, дымовые шлейфы, потоки лавы и пирокластические облака ещё более убедительными; так, что они казались частью тела и волос Те Ка.

«Это стало возможным, – говорит аниматор эффектов Андреа Скибетта, – поскольку процедурные изгибы легли в основу причёски персонажа, что позволило придать пирокластическим шлейфам желаемую форму. Эти кривые позволили художникам удобно управлять ориентацией, длиной, толщиной и многим другим, чтобы дополнять анимацию такого огромного и динамичного персонажа. В Houdini мы использовали SOP (Geometry Nodes) для увеличения значений атрибутов в крупномасштабные пиротехнические симуляции, что значительно упрощало управление».

«Режиссеры очень хотели увидеть лавовое чудовище, покрытое пирокластическим дымом так, чтобы он походил на платье», – добавляет Скибетта. «Нам нужно было создать специальные векторные поля, чтобы удерживать дым вокруг Те Ка, не выглядя при этом ни неестественным, ни принуждённым. При создании и манипулировании этими полями использовались классические инструменты Houdini, которые были отрисованы и выравнены прямо на сетке Te Ка в соответствии с её внешним видом и формой, которые нам нужно было достичь с помощью наших симуляций».

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

Не малой проблемой в этом процессе является согласование эффектов с действиями персонажа, то есть с анимацией.

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

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

Однако для согласования поведения самой симуляции (движения пирокластических потоков) было задействован ещё и векторный метод, который позволил задавать нужное направление пирокластического потока.

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

«Это, – говорит руководитель отдела эффектов Марк Брайант, – позволило аниматорам визуализировать пирокластику, исходящую от тела Те Ка, и помогло соотнести анимацию и эффекты. Потенциальные проблемы могли быть выявлены ещё до того, как сцену передадут в отдел эффектов».

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

Руководитель отдела эффектов Блэр Пирпонт говорил:

«Мы использовали HDA (Houdini Digital Assets) в качестве составных элементов для художественных аспектов наших ригов, а также в качестве конкретных задач разных производственных процессов, которые, будучи объединёнными вместе, описывали доставку (процесс передачи) от начала и до конца [всего производственного цикла].

Затем мы упаковали их в Houdini Gallery, чтобы художники могли включать их в свои сцены. Мы разработали дополнительные инструменты, чтобы обеспечить самостоятельность этих Gallery. В случае c Te Ка система рига могла определять какая геометрия требуется для столкновений и выбросов, процедурно импортируя её в риг».

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

Что касается, непосредственно, эффектов, то они передавались за счёт внутренних средств Houdini, таких как Digital Assets и Gallery.

Digital Assets (HDA) – это набор компонентов в Houdini, будь то геометрия, динамика, комбинированные объекты и так далее.

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

Возрождение Те Фити

Осознав, что Те Ка на самом деле является богиней Те Фити, Моана отдаёт сердце существу и возвращает её в естественное состояние.

Эти действия приводят к сцене, в которой довольно подробно демонстрируется возрождение Те Фити и исцеление окружающей среды: океана, островов и массы растительности на них.

«Для этой сцены, - рассказывает руководитель отдела эффектов Джон Косник, – мы создали анимированные сплайны, которые создавали 'растекающиеся' карты Ptex для роста растений, эмиссии частиц, текстурных карт и образования геометрии (то есть для изображения процесса появления растительности). Поскольку все отделы были объединены, команде по окружающей среде приходилось постоянно менять ландшафт в зависимости от художественного направления, поэтому процедурный процесс был просто необходим».

Реализация подобных эффектов в принципе крайне сложна без процедурной генерации.

«Мы хотели создать эффект роста, который заполнял бы пространство и казался органичным», – продолжает Косник. «Аниматор эффектов Джесси Эриксон создал набор цифровых активов (Digital Assets), которые создавали эффекты роста виноградной лозы (лианы) и её распространения в [заданном] пространстве».

Анимированные сплайны (как это показано в видеоряде выше), представляли из себя набор определённый кривых, которые распространялись контролируемым образом, вырисовывая необходимый узор. На основе этой информации (анимации распространения) была сгенерирована геометрия и специальные кривые, преобразованные в частицы, а карты Ptex позволили организовать текстуры для всей анимации.

Ptex – это система отображения текстур, разработанная Walt Disney Animation Studios, которой не требуется назначение UV или иных инструкций.

Поскольку генерирование (по анимации сплайнов) происходило на основе подготовленных активов, которые включали в себя набор определённой растительности, процесс был максимально процедурным.

При этом, инструменты для заполнения пространства (по сплайнам) были организованы за счёт алгоритма «Open Venation», основанного на статье 2005 года из журнала «Journal of Algorithmic Botany».

«Решатель (на основе алгоритма) выполняет итерации по двум наборам геометрии: жилам и аттракторам (лианам и узлам на ней, в виде цветков, листков и прочего), и полагается на обратную связь между ними (т.е. высчитывает расстояние между генерирующимися объектами, чтобы не генерировать одинаковые цветки и листья в одном месте). Аттракторы притягивают кончики лиан и вызывают разветвление в новые участки аттрактора, в то время как лианы уничтожают точки аттрактора, с которыми они соприкасаются, – добавляет Эриксон».

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

Даже в ходе финальной анимации, представленной в мультфильме, вы можете проследить путь, согласно которому происходит генерирование растений.

Здесь использовалась структура DOP (Dynamics Nodes) в Houdini, построенная таким образом, чтобы её можно было задействовать с другими инструментами (решателями). Это позволило использовать преимущества взаимодействия частиц при их столкновении и систему RBD (Rigid Body Dynamics), полагаясь на параметр «Grains» POP, который позволял ограничивать эти столкновения.

Эффект свечения достигается таким же образом – с использованием того же пути, что позволило художникам и аниматорам не прибегать к сложным синхронизациям всей динамики в сцене, а реализовать это, используя всё те же данные.

Эриксон говорил:

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

Как только у нас появились эти карты, их можно было использовать в процессе создания динамики для анализа роста и распада (моменты, когда с Те Фити сыплется растительность) растений [и назначенных материалов]. Симуляция для решения проблемы распространения в пространстве была довольно быстро завершена, что дало нам время для проверки результатов (для последующей корректировки и оптимизации)».

Использование одних и тех же данных и схожих методов, в таких ресурсоёмких пайплайнах, позволяют быстро реализовывать анимацию, динамику и прочие составляющие сцены.

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

Заключение

Размышляя о сложной работе, проделанной его командой для фильма, Дейл Майеда говорил:

«История Моаны представила наш самый эпический фильм с самыми великолепными эффектами на сегодняшний день в Walt Disney Animation Studios».

Oct. 31, 2017

Под конец, авторы оригинальной статьи заключают, что..

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

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

Этот материал подготовлен с той целью, чтобы художники по визуальным эффектам, аниматоры, 3D-моделлеры или просто любители анимации или фанаты мультфильма смогли ознакомиться с производственным процессом Walt Disney Animation Studios.

Различные методы и принципы работы, которые были применены хотя бы в рамках работы над эффектами, уже дают наглядный пример решения совершенно разных задач: от создания береговых волн до демонстрации появления сотен цветов на Те Фити.

Это всё сложные производственные процессы, которые, однако, можно совершенно спокойно рассмотреть в теории, и использовать вышеописанные принципы на практике.

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

Дерзайте!

Примечания

Не воспринимайте данную статью как чистый перевод. Она, скорее, выступает в качестве пересказа в перемешку с собственными домыслами и переводом интервью в виде цитат.

Комментарии (3)


  1. fiter1
    02.09.2022 13:51
    +1

    Увлекательная статья, спасибо @rabbit_graned .

    Кстати нам известно сколько людей работали над созданием эффектов для Moana и какой бюджет был выделен на именно эту часть работы ?


    1. rabbit_graned Автор
      02.09.2022 21:46

      Большое спасибо! Я старался..

      Информацию про команду в любом случае можно где-то достать.. как минимум из титров =) чуть позже могу это сделать.

      А вот насчёт бюджета, выделенного конкретно на эту часть фильма, скорей всего в свободном доступе ничего подобного нет, так как это уже внутренняя бухгалтерия конкретного фильма. Однако тут можно отталкиваться от каких-то общих стандартов в индустрии, сколько обычно тратят денег непосредственно на пайплайн, и какую долю этого пайплайна заняли эффекты..


  1. tas
    02.09.2022 14:26
    +2

    Ранее здесь на сайте был офигенный цикл статей про техническую часть фильма: