Пайплайн создания визуального эффекта в Houdini
Original size 1140x1600
Данная глава посвящена технологии создания основной симуляции пламени в Houdini

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

big
Original size 1393x750

Визуализация векторного поля генерируемого дыма

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

post

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

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

I. Подготовка к созданию эффекта

— экспорт 3Д-модели и анимаций персонажа

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

Original size 3500x1676

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

I.I. Экспорт геометрии персонажа
post

Для начала работы создадим новую Geometry-ноду в Houdini. В ней будет храниться геометрия персонажа. Внутри geo-контейнера добавим ноду «FBX Character Import». В строке «FBX File» укажем путь к статичной геометрии, а в «Animation FBX File» — путь к аналогичной 3д-модели с ранее созданной анимацией.

Для работы с грумингом персонажа потребуется статичная версия геометрии в Т-позе. Для этого добавим null к первому выходу ноды «FBX Character Import», переименуем его в «GEO_rest» (использование заглавных букв в названии поможет быстрее находить необходимую геометрию).

Original size 3500x1526

Импорт геометрии персонажа в SOP-контексте

Помимо статичной позы для дальнейшей работы также потребуется VDB-геометрия (не имеющая полых областей внутри), необходимая для отработки коллизий. После null’а добавим ноду «VDB From Polygons». Чем меньше будет значение параметра Voxel size, тем детальнее будет производится просчет симуляции.

I.II. Добавление анимации персонажа
post

Для того чтобы персонаж начал двигаться, необходимо добавить ноду «Bone Deform».

I.III. Настройка анимации

Для удобства работы можно зациклить имеющуюся анимацию. Для этого добавим ноду Extract Locomotion, которая помогает извлечь информацию о перемещении и ориентации в пространстве персонажа. В качестве Locomotion Joint необходимо выбрать одну из ключевых групп костей, например Hips. Затем при помощи ноды MotionClip просчитаем положение скелета для каждого кадра анимации. Используя MotionClip Cycle, сделаем движение персонажа непрерывным. В строке Cycles After необходимо указать номер кадра, начиная с которого анимация будет повторяться. Для плавности перехода во вкладке Blend необходимо выбрать метод Overlap Sequences, а в качестве параметра Blend Frames указать количество кадров, в течение которых будет происходить наложение двух циклов.

II. Подготовка основы для эффекта

— создание направляющих для будущей геометрии всполохов через систему груминга
I.I. Груминг в Houdini — введение

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

Original size 1920x1080

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

I.II. Ограничение области применения эффекта

Для формирования основного объема прически создадим направляющие. Для этого в новой geo-ноде «groom_source» экспортируем геометрию персонажа через Object Merge, указав путь к статичной модели.

Original size 3500x1278

Настройка груминга на obj-уровне

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

Original size 3500x1526

Создав Guide Groom, во вкладке Guide Creation необходимо для параметра Density указать Skin Attribute и выбрать созданную ранее маску. Таким образом направляющие будут созданы только в выделенной области геометрии персонажа.

I.III. Корректировка направляющих
Original size 3500x1526

Настройка длины и формы направляющих внутри Guide Groom

Так как всполохи пламени у линии роста волос должны быть короче, чем на макушке, необходимо создать дополнительную маску «mask_length», которая позволит управлять параметром длины лент огня.

Original size 1984x1526
post

Добавим Guide Process, выбрав тип операции Set Length. В качестве параметра, определяющего длину направляющих, добавим Skin Attribute и укажем созданную маску «mask_length».

Для того чтобы геометрия всполохов огня была направлена вверх, создадим через Guide Process параметр Set Direction. В качестве Lift Amount Attribute так же укажем маску, для того чтобы в зоне линии роста волос направляющие чуть меньше прилегали к голове.

Original size 3500x1593

Так как колебание всполохов огня должно быть более интенсивным на концах, при помощи операции Frizz можно сделать основание всполохов менее подвижным. Для этого в качестве Frequency Attrib необходимо использовать маску curvemask.

I.IV. Деформация направляющих при анимации
post

Для того чтобы будущая геометрия всполохов огня корректно деформировалась при движении персонажа, необходимо создать симуляцию направляющих. Для этого после Guide Groom добавим Guide Deform. Помимо этого, создадим новый geo-контейнер, содержащий информацию об анимации геометрии, назовем его «groom_anim». Через Object Merge укажем путь к трехмерной модели персонажа с анимацией. Подсоединим «groom_anim» ко второму входу Guide Deform.

Для симуляции направляющих добавим ноду Guide Simulate. В качестве источника информации о деформации гайдов создадим новую geo-ноду, назовем ее «guide_sim».

Original size 3500x2480

Внутри ноды применим к направляющим vellum-симуляцию. Для этого добавим Vellum Constraints и Vellum Solver.

Original size 1920x1080

II. Настройка формы «всполохов» огня

— создание геометрии вдоль кривых
post

Для формирования геометрии вдоль полученных направляющих создадим ноду Hair Generate.

Добавим цикл For-Each Connected Piece, позволяющий сформировать геометрию вдоль каждой направляющей грума. На входе получим единичную кривую. Создадим ноду Resample, для того чтобы задать атрибут curveu.

Original size 1280x672
post

Настроим параметр offset_spline, определив отклонение кончиков лент. Для корректной работы условия добавим ноду Polyframe, для того чтобы создать атрибуты N и up, необходимые для просчета вектора нормали. После в Attribute Wrangle укажем выражение:

vector n = normalize (cross (v@N, v@up)); v@P -= n * chf ('offset') * chramp ('mask', f@curveu);

После создания параметра необходимо удалить созданные ранее атрибуты N и up через Attribute Delete.

Придать направляющим форму лент можно через ноду Sweep, указав в Surface Shape тип геометрии «Ribbon». Через параметр Width можно управлять шириной лент. А во вкладке Scale, активировав Apply Scale Along Curve, при помощи рампы можно задать необходимую форму.

Так как всполохи, находящиеся на висках, должны быть меньше, через Attribute Wrangle можно задать дополнительный параметр, который позволит управлять их размером. Используем ранее созданную маску «mask_length»:

@pscale = chf («scale») * chramp («scale_mask», f@mask_length);

Для того чтобы использовать значения маски, необходимо перенести атрибут с геометрии (вход Skin), используя Attribute Transfer.

Для того чтобы сделать ленты выпуклыми в центре, используем ранее созданную маску «mask»:

v@P += v@N * chf ('offset') * f@mask * chramp ('mask', f@curveu);

Original size 1280x678

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

post

Основная геометрия всполоха готова, осталось скорректировать uv-развертку, добавив выражение:

v@uv = set (f@uu, f@curvev * chf ('uv'), 0);

III. Настройка симуляции движения

— анимация всполохов пламени
III.I. Vellum Solver — принцип работы

Для анимации полученной геометрии всполохов можно использовать Vellum Solver. Этот инструмент позволяет создавать различные виды симуляций.

Original size 1280x720

Для создания эффекта пламени будет использоваться несколько видов vellum-симуляции: имитация ткани (Cloth), позволяющая управлять пластичностью геометрии всполохов, и симуляция волос (Hair), необходимая для управления общим объемом направляющих.

III.II. Подготовка к симуляции
post

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

Original size 3500x2480

Группа точек «pin_points»

Добавим атрибуты, необходимые для vellum-симуляции. Через ноду Attribute Wrangle для ранее созданной группы точек «pin_points» напишем следующее выражение:

i@disableexternal = 1; i@disableself = 1;

post

Для того чтобы всполохи пламени не распадались при симуляции, а образовывали единую форму, добавим еще один параметр — set_stretchstiffness. Для этого через Attribute Wrangle напишем выражение, которое позволит управлять параметром через рампу:

f@stretchstiffness = chramp ('mask', f@curveu);

III.III. Корректировка формы при быстром движении
post

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

Original size 3500x1392

Деформация до и после применения Blend Shapes

III.IV. Настройка симуляции

Добавим Vellum Constraints типа Cloth.

Original size 3500x1746

Добавим Vellum Constraints типа Pin to Target.

Original size 937x399

Настроим параметры vellum-солвера. Для более динамичного движения «язычков» пламени на концах, добавим симуляцию их движения, ограничив подвижную область. Для этого создадим ноду Vellum Rest Blend, используя атрибуты «stretch» и «bend», созданные через Cloth Vellum Constraints.

Original size 866x439

Добавим силу, действующую на геометрию всполохов, настроив параметры ноды POP Wind.

Original size 866x487
post

Для движения общей массы пламени создадим второй солвер. Значение гравитации по оси Y сделаем равным -5, это позволит передать движение огня в направлении снизу вверх. Добавим силу, действующую на геометрию в вертикальном направлении, через ноду POP Wind.

Original size 739x490
Original size 1920x1080
Основная симуляция пламени готова. В следующей главе будет рассмотрен процесс настройки эффекта в Unreal Engine
Пайплайн создания визуального эффекта в Houdini
Chapter:
1
2
3
4
5
We use cookies to improve the operation of the HSE website and to enhance its usability. More detailed information on the use of cookies can be fou...
Show more