Rubber Matreshka “Nikolay Valuev”
Wednesday, August 27th, 2008



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

Вот как это сделано.
Сначала создаем произвольную форму, которую будем облеплять частицами — у меня это был ядерный гриб.
Создаем источник частиц ParticleFlow (PF) и настраиваем в нем вот такой флоу:

Опять рассматриваем, что делает каждый из операторов.
С Birth все понятно — он создает 5000 частиц. Speed задает начальную скорость частиц, мне динамика тут была не нужна (это же плакат), поэтому скорость нулевая.
Position Object задает их начальное положение:

Тут видно, что частицы привязываются к поверхности (Surface) двух объектов Line01 и Torus01 — это гриб и колечко вокруг его ножки. Surface Offset задает минимальное и макимальное смещение частиц от поверхности объекта, мне нужно было чтобы форма была “рыхлой”. Галочка Separation указывает PF чтобы он по возможности создавал частицы на расстоянии Distance=5 друг от друга — это нужно чтобы при рендеринге объекты в которые превратятся частицы не слипались и не имели взаимных пересечений.
Мне нужно было сделать частицы разных цветов/материалов, поэтому задаем материал частиц через оператор Material Frequency :

Как видим, частицам присваивается один материал — 09-Default (какое редкое название), но разный Material ID: 50% частиц с айди 1, 20% — с айди 2 и т.д. Материал 09-Default это обычный Multi/Sub-Object, где на каждый айди привязан один из нужных мне материалов частиц:

Получается, что 50% частиц будут розовыми, 20% — желтыми, 15% – радужными и т.д.
Теперь задаем форму частиц. Делает это оператор Shape Instance:

Оператор указывает, что все частицы при рендере заменяются на объект Star01, размером 80% от оригинала с разбросом 50% — мне нужно, чтобы детальки гриба немного отличались по размерам.
НО! Гриб из одних звездочек мне не нужен, надо как-то указать части частиц (да, странно звучит) рендериться объектами другой формы.
Вот для таких случаев и нужны условные операторы в PF. В данном случае это оператор Split Amount:

В этом примере он отделяет 25% частиц и отправляет их на обработку в событие Event 04, а там уже знакомым оператором Shape Instance им присваивается другая форма. Аналогично задается другая форма для третей и четвертой четвертей общего количества частиц. Напомню, у первой четверти форма осталась без изменений, это форма звезды.
Ну вот и все.
Примерно вот так это выглядит во вьюпорте:

А что из этого получается после рендера вы видели в начале поста.
Визуализация траекторий движения частиц. Например, вот такая:

Делается это достаточно просто. Спасибо богам написавшим офигенный скрипт.
Сначала сетапим источник частиц PF. Заморачиваемся над динамикой. После того как движение частиц нас радует, качаем вот отсюда скрипт PF Spliner 3.0.
Запускаем его в максе и видим вот такое окошко:

Сверху кнопка выбора источника частиц, для которого надо создать траектории.
Start и End промежуток кадров, из которого берем траекторию частиц.
Increments — шаг между кадрами, по положению частиц в которых созаются опорные точки траектории. Чем меньше это число тем детальнее прорисовка траектории движения частицы, и тем сильнее задумывается комп когда ее рендерит.
Переключатель Attach Splines объединяет созданные скриптом сплайны в один объект — удобно включать если траектории будут иметь один материал и один способ отрисовки.
Жмем Generate Splines, комп озадачивается на какое-то время и создает нереально красивые траектории.
Это обычные сплайны, поэтому по умолчанию при рендеринге их не видно. Чтобы не забивать память лишней геометрией лофтов я делаю вот так:

Тут важно поставить галочку на Enable in Render — теперь эти сплайны будут видны при ренедере.
Не забываем включить Generate Mapping Coords, если материал нуждается в мэппинге.
Форма сечения сплайна может круглой/овальной, или прямоугольной — за это отвечают соответсвующие поля интерфейса.
Все.
Короткий рассказ для интересующихся как была сделана надпись “ВЕТЕР” на этой картинке:

Предупреждение первое.
Подразумевается, что вы достаточно хорошо знакомы с 3dsMAX и в то же время абсолютно незнакомы с ParticleFlow. Достаточно редкая ситуация, но, например, я в эту группу попадал еще месяца 3 назад.
Предупреждение второе.
Тут нет никаких секретных приемов в работе с Particle Flow. Если вы хотя бы немного с ним работали, то продолжать читать скорее всего не имеет смысла.
Предупреждение третье.
Описанный способ точно не является самым простым, более того, для создания одной статичной картинки он неоправданно сложный. Я делал все так как описываю, так как мне нужна была максимальная гибкость настроек размещения частиц и возможность в будущем делать _анимацию_ на основе этого проекта.
Поехали.
Средство для работы с частицами Particle Flow (дальше по тексту PF) раньше продавалось как отдельный плагин к 3dsMAX, а, по-моему, с седьмой версии макса (тут я могу ошибаться) вошел в его стандартную поставку. В отличие от стандартных максовских источников частиц типа Blizzard и прочих, он не иммеет жестко заданых параметров поведения частиц, а позволяет создавать из типовых операторов практически любую модель поведения.
Посмотрим как это работает.
Для начала создаем сам источник частиц:

Создаем ветер. Он нам пригодится позже, чтобы добавить хаотичности поведению частиц:

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

Как видите, сила (Strength) у него нулевая, чтобы частицы не сдувало в каком-либо направлении, а включена только турбулентность (Turbulence) — как раз это будет смещать частицы в случайном направлении.
Теперь выбираем источник частиц PF и жмем кнопку Particle View, чтобы открыть окошко работы с частицами:

Открывается окно PF:

Окно поделено на 4 части.
Левая верхняя — основное поле, как видите, описание поведения частиц типично для любого визуального языка программирования. Есть “события” задающие поведение частиц с помощью входящих в них операторов и связи между событиями.
Правая верхняя часть содержит настройки параметров для выделенного оператора или события.
Левая нижняя – доступные операторы. Зеленые отвечают за создание частиц, синие — за описание поведения частиц, желтые — условные операторы, нужны для передачи управления частицой в другое событие при наступлении оперделенных условий. Операторы добавлюятся в событие простым перетаскиванием.
Правая нижняя – тут показывается короткий хелп по выделенному оператору.
Набор операторов у вашего свежесозданного источника будет немного другой – смело удаляйте те, которых нет на этой картинке и добавляйте из нижней части те, которые есть.
Теперь посмотрим что делают операторы нашего единственного события Event01.

Итак, оператор Birth — самый важный, он создает частицы. В моем случае создается 6000 частиц (Amount) в промежутке времени от 0-го (Emit Start) до 10-го (Emit Stop) кадров.

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

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

Оператор Speed by Icon отвечает за направление движения частиц. Он создает во вьюпорте иконку, анимация которой передается частицам. Об этой анимации чуть-чуть позже, а пока посмотрим какие параметры есть у этого оператора.
Ifluence определяет на сколько точно движение частиц совпадает с анимацией иконки. При малых значениях имеем “смазанный”, усредненный путь. При больших — практически полную копию исходной анимации.
Speed Variation задает максимальную и минимальную скорости частиц в процентах от скорости заданной анимацией иконки. Чем больше тут разница тем сильнее частицы размазываются по пути анимации. Мне она была нужна именно большой, чтобы на картике весь путь был заполнен частицами.
Включенный переключатель Steer Towards Trajectory указывает частицам следовать по самой траеткории анимации с нулевым отклонением от нее (Distance). Если это переключатель выключен, то частицы движутся вдоль пути в виде облака, которое они образовали при рождении.

Оператор Rotation управляет углами поворота частиц в пространсве, мне подошло случайное распределение (Random 3D)

Оператор Shape определяет как будут выглядеть частицы при рендеринге. В данном случае это кубики со сторой 12.
Если вас не устраивают кубики и вообще ни один из стандартных способов представления частиц, то можно воспользоваться оператором Shape Instance и определить свой объект для отображения частиц. Об этом опять же в другом туториале.
В двух последних операторах я настроек не менял, картинок не будет.
Оператор Cache нужен для кэширования параметров всех частиц и, как следствие, ускорения работы с ними.
Оператор Display задает как показывать частицы во вьюпорте. Там же можно указать процент показываемых частиц — полезно, когда их у вас много, а комп не очень быстрый.
Мне не был нужен какой-то особый материал для частиц, поэтому я не добавлял оператор Material Static, а ограничился просто указанием цвета кубиков в операторе Display.
Уффф. Вроде все с настройками частиц.
Осталось добавить анимацию. Рисуем путь, по которому движутся частицы — у меня это было слово “ВЕТЕР”. Находим во вьюпорте вот такую иконку:

Теперь привязываем ее перемещение к нарисованному пути. Выбираем ее, нажимаем на Animation -> Constraints -> Path Constraint, после чего кликаем на нарисованный путь.

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

Ну вот. Вроде все.
Для интересующихся настройками рендера, материалами сцены, и для тех кому просто не хочется повторять все действия с нуля — вот исходная максовская сцена.
Можете покрутить параметры частичек и посмотреть как и на что они влияют, это самый быстрый способ понять как что работает =)
А вот как должен выглядеть у вас рендер где-то 480-го кадра:

Только солнце там желтое, а не красное и текстовых блоков нет =)


The Making of (in Russian).