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

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

big
Original size 1393x750

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

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

post

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

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

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

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

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

Original size 1920x1080

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

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

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

post

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

Зададим выделенной части геометрии цвет, для того чтобы ограничить область применения будущего эффекта. Поверхность, окрашенная в белый, будет удалена, а та часть геометрии, которая будет иметь черный цвет, и станет основной рабочей поверхностью. Создав ноду Color, необходимо выбрать Group Type: Primitives. В графе Attribute укажем ранее созданную маску «mask». В Attribute Ramp окрасим левый ползунок в белый цвет, а правый — в черный.

Original size 971x415

Через ноду Blast удалим ненужную часть геометрии, применив к точкам выражение «@Cd>0».

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

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

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

post

Внутри ноды применим к направляющим vellum-симуляцию.

Original size 1920x1080
I.IV. Корректировка направляющих

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

post

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

Через ноду Hair Generate создадим направляющие.

Original size 1280x679

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

Original size 1122x564
post

Для того чтобы гайды были направлены вверх, создадим через Guide Process параметр Set Direction.

Original size 868x541
Original size 0x0

Основные этапы создания груминга

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

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

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

Original size 1152x648
post

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

При помощи атрибута pscale определим длину лент, используя рампу, зависящую от маски.

Original size 1099x637

Добавим ноду Polyframe, для того чтобы создать атрибуты N и up, необходимые для просчета вектора нормали.

post

Настроим параметр offset_spline, определив отклонение кончиков лент. Для этого в Attribute Wrangle укажем выражение:

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

Original size 1110x612

В качестве основы будущих всполохов создадим кривую.

post

Используя атрибут curvev, добавим маску для управления шириной через рампу.

Copy to points, skin, reverse, normal

Для того чтобы сделать ленты выпуклыми в центре, используем ранее созданную маску «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 935x493

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

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

post

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

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

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

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

Original size 1280x679

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

Original size 1280x679

Настроим параметры 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
4
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