Пламя факела средствами 3ds max ParticleFlow

Введение

В данном уроке мы создадим одну из наиболее востребованных симуляций в Голливуде, которая решается при помощи флюидной динамики, обычно это какой либо объект объятый пламенем (человек, хворост костра и т.д.), в нашем случаи это будет горящий факел. И прежде чем приступить к реализации задачи, нужно рассмотреть такую особенность: из-за большого количества топлива у симуляции будут такие же параметры как и при создании взрыва, а именно цвет, концентрация частиц, дым (по востребованности). В дальнейшем нам нужно будет это учесть. В нашей системе мы создадим именно такой тип эффекта при помощи специального средства 3ds Max Particle Flow.

Реализация эффекта

Путешествие в тысячу миль начинается с первого шага.
(Лао-Цзы)

Шаг 1

Откройте файл Start_Flame.max, который специально был заготовлен для этого урока, и подтвердите изменение единиц измерения сцены, если такое сообщение появится. Если же не принять изменения может получится другой результат (данный файл был заготовлен в 3ds max 2009, т.е. версии ниже 2009 его не откроют). В данной сцене присутствует простая модель факела, в дальнейшем с которой и будем работать, камера, и Timeline настроенная на 300 кадров.

Шаг 2

В окне проекции Top создайте пространственный исказитель (Space Warp) Wind и переопределите его координаты-XYZ(0см, 0см, 0см). При выделенном Wind в меню панели Modifier в настройках Parameters установить следующие значения: Strength: 0,15, Decay:0, Turbulence:0,05, Frequency:0,01, Scale:80. Мы добавили Wind для того чтобы создать турбулентность влияющее на пламя из вне, усиливающее эффект. Wind, также будет отвечать за скорость испускаемых частиц.

Шаг 3

Теперь мы можем приступить к созданию системы частиц.
Для того чтобы открыть окно создания и редактирования систем частиц Particle View необходимо нажать клавишу "6" или на панели Create выбрать Geometry и из выпадающего списка выбрать Particle Systems и создать PF Source для того чтобы открылось окно Particle View, но придется удалить созданную по умолчанию систему частиц, поскольку мы будем создавать новую.
В окне редактора Particle View перетащите на рабочую область Empty Flow, далее нажав правой кнопкой мыши, появится контекстное меню, где необходимо выбрать Rename и введите новое название PF_Flame_Source, и при выделенном PF_Flame_Source установить для него следующие параметры: Quantity Multiplier: Viewport=10, Render=100. Для параметра Render устанавливаем Type : Phantom. Почему мы выбрали именно этот тип, поскольку геометрия пламя будет строится поверх геометрии частиц, при рендере и для удобства мы указываем именно этот тип, что и означает что первичная геометрия частиц не будет видна при визуализации.

Шаг 4

Далее необходимо добавить в рабочую область оператор Birth (рождение), данный оператор не просто так называется, поскольку именно он отвечает за порождение частиц. При выделенном операторе Birth установим следующие настройки: Emit Start=0, Emit Stop=300, Amount = 60000. Emit Start означает то с какого кадра частицы будут порождаться, Emit Stop означает именно до какого кадра они будут порождаемы, Amount представляет общее количество частиц порождаемых на промежутке времени Emit Start и Emit Stop.
После того как, мы настроили оператор Birth, теперь необходимо связать основное событие Event01 с PF_Flame_Source, после чего переименовать Event01 на Initial_Flame.
Далее добавить в Initial_Flame следующие операторы: Position Object, Shape, Force, Delete.

Шаг 5

Теперь более подробно об операторах и их настройках.
Position Object, данный оператор отвечает за то где будут находиться испускаемые частицы, иначе говоря с какого объекта они будут испускаемы. При выделенном Position Object в настройках Emitter Objects нажимаем на кнопку By List и из открывшегося окна выбора объектов Select Emitter Objects выбираем наш будущий источник частиц, который называется source и нажимаем Select. На этом работа с Position Object окончена.
Shape, назначает форму для порождаемых частиц. Выделяем оператор Shape и настраиваем следующим образом: Shape выбираем Tetra, Size устанавливаем 1,6 см.
Force, определяет силы воздействующие на поток частиц. Настраиваем следующим образом: в Force Space Warps добавляем пространственный исказитесь Wind. Параметр Influence =610, SyncBy устанавливаем Particle Age.
Delete, отвечает за удаление частиц. Настраиваем: в Remove устанавливаем By Particle Age(Life Span= 28, Variation=7).

Шаг 6

Далее добавляем четыре оператора KeepApart. Прежде чем приступить к их настройке мы должны скопировать PF_Flame_Source, с заданным числом копий равным 3. При копировании выбрать способ копирования Copy. Скопированные экземпляры переименовываем: PF_Large_Flame, PF_Small_Flame, PF_Turbulence.
Теперь возвращаемся к операторам KeepApart и поочереди начинаем их переименовывать так как показано на рисунке: KA_Initial_Flame, KA_Large_Flame, KA_Small_Flame, KA_Turbulence.

Шаг 7

Итак, теперь настроим первый KA_Initial_Flame : Force:-0,2, выбираем Accel Limit=2000 см, Range: устанавливаем Absolute Size, Core Radius=8см, Fallof Zone=6,5 см, в Scope устанавливаем Selected Particle Systems и выбираем в списке PF_Flame_Source.
Мы установили Force отрицательное значение, чтобы склеивать частицы, а не отталкивать их. Данный оператор объединяет частицы, которые в дальнейшем сгруппируют поток огня, при этом когда частицы будут склеиваться вместе, в результате будет образовываться дополнительная геометрия, добавляя пламени больше яркого цвета за счет специального материала, который мы создадим позже. Как уже говорилось выше, данный оператор будет склеивать сталкивающиеся частицы, за поведение частиц отвеют такие параметры как Core Radius, Fallof Zone. Именно этот оператор будет отвечать за формирование основного поведения пламени, которое будет корректироваться последующими KeepApart операторами.

Теперь поочереди настроим следующие операторы:

KA_Large_Flame: Force:-0,2, выбираем Accel Limit=2000 см, Range: устанавливаем Absolute Size, Core Radius=4см, Fallof Zone=4 см, в Scope устанавливаем Selected Particle Systems и выбираем в списке PF_Large_Flame.

KA_Small_Flame: Force:-0,4, выбираем Accel Limit=500 см, Range: устанавливаем Absolute Size, Core Radius=3см, Fallof Zone=2 см, в Scope устанавливаем Selected Particle Systems и выбираем в списке PF_Small_Flame.

KA_Turbulence: Force:0,01, выбираем Accel Limit=1000 см, Range: устанавливаем Absolute Size, Core Radius=2см, Fallof Zone=2 см, в Scope устанавливаем Selected Particle Systems и выбираем в списке PF_ Turbulence.

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

Шаг 8

Приступим к созданию сторонних систем частиц которые будут дополнять пламя.
Выделим Initial_Flame, далее скопируем его, при этом указываем способ копирования Paste Instance. Скопированный образец переименовываем на Large_Flame, и далее настраиваем. Операторы Birth, Shape, Force и Delete необходимо сделать уникальными, т.е выделить эти операторы, далее нажать на них правой кнопкой мыши и выбрать из контекстного меню Make Unique.

Настройки операторов:

Birth: Emit Start=0, Emit Stop=300, Amount = 12000

Shape: Shape выбираем Tetra, Size устанавливаем 1 см.

Force: Influence =810, SyncBy устанавливаем Particle Age.

Delete: в Remove устанавливаем By Particle Age(Life Span= 32, Variation=8).

Шаг 9

Теперь необходимо повторить такую же процедуру и с событием Large_Flame, создав образец(Paste Instance), переименовываем его на Small_Flame. Делаем уникальными следующие операторы: Birth, Shape, Force, Delete.

Настройки операторов:

Birth: Emit Start=0, Emit Stop=300, Amount = 10000

Shape: Shape выбираем Tetra, Size устанавливаем 2,1 см.

Force: Influence =720, SyncBy устанавливаем Particle Age.

Delete: в Remove устанавливаем By Particle Age(Life Span= 23, Variation=6).

Шаг 10

Создаем образец Small_Flame переименовывая копию в Turbulence. Делаем уникальными следующие операторы: Shape, Force, Delete.

Настройки операторов:

Shape: Shape выбираем Tetra, Size устанавливаем 1,4 см.

Force: Influence =840, SyncBy устанавливаем Particle Age.

Delete: в Remove устанавливаем By Particle Age(Life Span= 32, Variation=8).

Шаг 11

После того как мы настроили события частиц, необходимо их связать PF_Large_Flame с Large_Flame, PF_Small_Flame с Small_Flame, PF_Turbulence с Turbulence.

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

Шаг 12

Вернитесь к кадру 0, и отключите autoback. На этой стадии, сцену проекта желательно сохранить. Теперь добавьте на сцену оператор BlobMesh. На панели Create выбрать Geometry и из списка выбрать CompoundObjects далее выбрать BlobMesh. Настраиваем BlobMesh: Size=2см, Tension=1. Установите Render и Viewport в Evaluation Coarseness =1 и отключите отображение во viewport установив галочку Off in Viewport. Нажмите на кнопку Pick и выберите PF_Flame_Source, PF_Large_Flame, PF_Small_Flame, PF_Turbulence.

Шаг 13

Теперь добавим к оператору BlobMesh три модификатора: Cap Holes, TurboSmooth и Relax.

Настроим их следующим образом:

Cap Holes: выбираем Smooth New Faces.

TurboSmooth: Iteration =1, Surface Paramets=Smooth Result.

Relax: Relax Value=0,5, Iterations=1. отключите Keep Boundary Pts Fixed.

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

Шаг 14

Откройте редактор материалов и добавьте в свободный слот материал Raytrace. Назовите материал Flames. Установите материал для Transparency белый цвет. Index of Refr=1, установите Specular Level и Glossiness = 0. Раскройте Extended Parameters и в Advanced Transparency установите флажок Fog, установите для него Start=0, End=120, Amount=3, и добавьте карту Fallof в ячейку материала, настроив его следующим образом: 1Color=R242,G178,B94, 2Color=R232, G91, B0.Теперь настройте как показано на рисунке.

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



Шаг 15

Примените созданный материал к оператору BlobMesh, и можете сделать тестовую визуализацию.

Пример моей визуализации с освещением и glow можно просмотреть:

Заключение

Реализация данного эффекта весьма интуитивна. Поскольку результат может получиться во многом отличный от моего. Основную роль в этом играют операторы KeepApart и их параметры Force, Accel Limit, Core radius, Fallof Zone. Меняя эти параметры Вы можете получить совершенно разные формы потока частиц. В редких случаях форма пламя может быть совершенно неоднородна, следствием этого являются связи с сторонними системами частиц, и изменять настройки придется только для них. Настройки BlobMesh также оказывают не малозначное влияние на формирование геометрии пламя. Изменяя такие параметры как Evaluation Coarseness Render (изменяя от 0,5 до 5) можно получить сильно раздробленное пламя при 5 (и более) и наоборот от 1 ( и менее). Также высоту пламя можно регулировать с помощью операторов Delete, сокращая и увеличивая жизнь частиц, тем самым увеличивается или уменьшается поток огня. Добавляя и удаляя источники частиц в Blob Object можно отследить, то, как именно формируется геометрия и взаимодействуют системы между собой.
Если же Вас не устраивает получившейся результат, то пробуйте изменять, так параметры, как в вашей ситуации будет удобнее для Вас.

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

724 0 850 25
17
2011-04-21
Интересный способ! Клево!
2011-04-21
Вы не представляете как вовремя! Спасибо!
2011-04-21
Спасибо за Урок! 5/5
2011-04-21
Урок взят из книги Pete Draper - Deconstructing Elements with 3ds max?
2011-04-21
Классный Урок! Очень редкий способ.
2011-04-21
урок интересный и, что очевидно - переводной.
2011-04-22
нереалистично для пакетов без флюидов может и актуально, но не для фьюмфксо-обладателя
2011-04-27
видео понравилось, но с надеждой, что по данному уроку я смогу это сделать. а вообще, по моему, такое горение не для факела, а для целой избы.
2011-04-28
Круто! Давно не было таких уроков. Спасибо!
2011-04-28
изучаю урок, возникают вопросы. к примеру, в шаге 12 на нижнем рисунке активирована кнопка Add, об этом ничего не сказано. почему ? были и другие непонятки, неужели остальным всё ясно? а, народ ? в уроке много интересной информации, но реально ли это сделать ? эй, коментаторы, кто-то это делал ?
2011-04-28
urok klassnii po P.F., deistvitelno klass! :) avtor molodez, spasibo za urok :) P.S. dlya ognya leh4e FumeFX vzyat :))
2011-04-28
вот что у меня вышло без особенного освещения и glow (кадр 101). ну, в принципе, это уже что-то, буду копать. за урок спасибо.
2011-04-28
ах, да. вот собсна - кадр... http://s009.radikal.ru/i310/1104/23/7aeababd028d.jpg
2011-04-28
По поводу Add в 12 шаге: активируется для того чтобы привязать Blob к PF, т.е для того чтобы частицы приняли правильную геометрическую форму диктуемую настройками Blob. По кадру "101": особое внимание посоветовал бы уделить настройкам Blob и его размеру, так же настроить то количество частиц которое необходимо, в разных случаях по разному, от 60000 до 120000 тысяч, ну в редких более. Жалко нет wireframe 101. Если геометрия пламя однородна, то тогда необходимо изменить параметры материала: Fog и Transparency.
2011-05-05
По уроку сделал, всё получилось, очень жаль что не обьясняются некоторые ваще - например я так и не понял какую функцию выполняет Blob Mesh откровенно скажем. Зато урок хорошо помогает разобраться в сути работы некоторых операторов частиц. Минусы - огромные времязатраты на просчёт, у меня на i5 считалось очень долго. Ну и FumeFx делает тоже самое качественнее и на 2-3 порядка быстрее)
2012-01-28
Частицы нужно использовать для того для чего они предназначены Ты как говорится изобрел велосипед fumefx Тут только 1 недостаток много времени уходит хотя способ мне понравился М 1 вопрос почему основание факела не горит?
2012-01-29
Данный урок делался для того чтобы пояснить работу некоторых операторов и на их основе реализовать эффект пламени факела. Тлеющую и обгорающую ткань делать не обязательно, поэтому и сама модель факела особой оригинальностью и детализацией не отличается. Основание факела не горит не только из-за настроек материала, а именно параметра FOG, но и напрямую зависит от плотности (толщины) BLOB геометрии, у основания. Суть такова, что плотность частиц на самом основании сравнительно небольшая, связано с тем, что они порождаются именно с него. Для большей убедительности на рисунке сфера под номером (1), это и есть та ситуация с основанием факела. Сферы 2 и 3 показывают то как влияет плотность (толщина) геометрии относительно того объекта, который находится внутри геометрии пламя, в данной ситуации это основание факела. Изображение(http://www.imageup.ru/img242/873506/spheres.jpg.html) В этом методе есть минусы, и я это не отрицаю. Старался сделать все возможное, чтобы пошагово у пользователей получилось реализовать эффект по данной методике.
RENDER.RU