Основы системы частиц Thinking Particles

В этом уроке я попытаюсь объяснить вам основы мощнейшего плагина Thinking Particles для 3D max. Урок рассчитан  на новичков, поэтому вся информация будет очень подробной. Сразу скажу что цель, состоит не в том, чтобы создать крутой эффект, а в том, чтобы изучить интерфейс и показать вам как работают узлы (ноды) в TP.

Итак, после установки плагина у вас в меню Geometry в свитке Particles появится новая кнопка Thinking. Нажмите на неё и ещё раз нажмите во вьюпорте и увидите крестик с надписью TP, тем самым мы вставили нашу систему в сцену. Выделите крестик и перейдите в закладку Modify. Нажмите на кнопку Properties. Раскроется окно системы TP.

Для начала создайте новый Dynamic Set, просто щелкнув на Create во втором окне. Выделите его. Итак, что мы здесь видим.

1)В этом окне мы можем создавать различные группы частиц. Манипуляции с группами происходят с помощью нижних четырёх кнопок:

Create (создать новую группу),

Remove (удалить выделенную группу),

UP и DOWN (переместить группу вверх и вниз соответственно),

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

3)В этом окне (поле) происходят все манипуляции с операторами или узлами, имеющимися в TP.

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

5)В этой группе вкладок находятся:

1-ая Group, вкладка с плюсиками содержит созданные группы. Сейчас там одна группа All.

2-ая Conditions, здесь находятся различные условия. Для чего нужны некоторые из них узнаем позже.

3-ая Operators, вкладка в виде шестеренки. Тут уже находятся операторы для управления нашими частицами. Все операторы сгруппированы по функциям, просто нажмите выпадающий список, названия говорят сами за себя. К примеру, операторы из списка Dynamics отвечают за движение наших частиц.

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

5-ая Black Boxes, здесь находятся заранее собранные схемы, которые также сгрупированны в списке.

Область 4 мы видима, если выделано одно из событий. Давайте теперь выделим строчку Master Dynamic в окне 2. У нас в правой части экрана появились глобальные настройки системы TP. К примеру, варианты отображения частиц, показ Mesh частиц, настройки симуляции и тогдалее (Думая подробнее мы рассмотрим их в следующих уроках).

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

Теперь немного о принципах работы TP. Рассмотрим следующий рисунок.

В данном случае у нас имеется хелпер (зеленый, с буквой H в названии) и один оператор рождения (красный с буквой О в названии). У каждого узла есть свои входы и выходы (далее I/O), через которые они обмениваются друг с другом информацией. Для этого нужно просто соединить нужные названия I/O. Чтобы это сделать нажмите ЛКМ на выходе одного узла и отпустите на входе другого узла.

Можно соединять I/O содержащие однотипные данные, вы просто не сможете соединить разнотипные. Также можно выбирать из списка нужные I/O, для этого необходимо нажать ЛКМ на зеленые краешки у узлов. Можно двойным щелчком на названии узла скрыть все I/O.Если повторно нажать два раза ЛКМ, то появятся только используемые I/O.

Так же если нажать ПКМ то выпадет меню, через которое также возможно добавление или скрытие I/O, или же вообще отключить узел или удалить его. Если нажать ПКМ на поле, то можно выбирать нужные операторы из выпадающего списка. Если необходимо удалить несколько узлов, выберите их, щелкните ПКМ на поле и выберите удалить.

Ну что ж, на этом краткий экскурс по интерфейсу пока закончим, давайте, наконец, что-нибудь сделаем. У нас имеется одно событие Dynamic Set, и ничего внутри него. Выделим наше событие и переименуем его щелчком ЛКМ в Birth и вставим оператор рождения частиц. Для этого в Operators из выпадающего списка выберем Generators, нажмем на Position Born и еще раз нажмем на наше клетчатое поле, тем самым мы создадим оператор рождения частиц. Сверните окно TP и насладитесь вашей первой TP-анимацией :-). Развернем окно TP и посмотрим, что за настройки имеются у нашего оператора Position Born.

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

Давайте теперь рассмотрим конкретный пример. Для начала увеличьте время нашей сцены до 500 кадров. И настройте оператор Position Born так:

Count: 200, Life Span: 500, Direction Z: 1, Direction Var.: 0, Speed: 150, Variation Speed 20.

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

Шаг первый: Сделать генерацию частиц со всей плоскости.

Сейчас наши частицы создаются из центра координат, нас это не устраивает. Создадим плоскость во вьюпорте, которая будет нашим импровизированным морем. Теперь нам нужно указать TP какой объект будет испускать наши частицы. Для этого, нам понадобится хелпер Node. Он находится в Helpers (в окне TP, не в закладке Макса). Выберите и поместите его на нашем клетчатом поле рядом с Position Born. Выделите наш Node, у него в правой части экрана имеется только одна кнопка Pick, нажмите на неё и выберите нашу плоскость. Для того чтобы указать TP что мы хотим чтобы частицы рождались не с Pivot объекта, а со всей поверхности, необходимо воспользоваться еще одним хелпером. Перейдите в Helpers выберите из выпадающего списка Position и вставьте в поле хелпер Surface Position. Обратите внимание, что у Surface Position вход node подсвечен желтым, это означает, что он не будет работать без подключения к его входу Node какого-нибудь узла. Некоторые другие узлы также должны работать совместно друг с другом.

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

На этой схеме Node передаёт информацию об объекте в Surface Pos. Тот в свою очередь выделяет из всей информации только информацию о поверхности объекта и передаёт её на вход позиции оператора рождения частиц.

Нажмем теперь на Surface Position, у него есть несколько не сложных настроек, в зависимости от выбора он может считывать позиции с вершин, граней, или полигонов. Нам нужна позиция полигонов, поэтому выбираем Face. Проигрываем анимацию и видим что получилось. Наши частицы испускаются со всей плоскости. Вот для чего нам нужен хелпер Surface Position в связке с Node.

Давайте теперь сгруппируем наши создаваемые частицы. Это необходимо сделать для нашего примера. Нажмите Create в окне создания групп. Назовём нашу группу Evaporations (испарение). Выделите оператор рождения частиц, и выберем для него нашу созданную группу в его настройках из выпадающего меню. Теперь Position Born рождает частицы принадлежащие группе Evaporations.

Шаг второй: Создать влияние сил на наши частицы.

На этом шаге мы явно делаем новое событие, в котором заставим наши частицы двигаться по нашим законам. Для этого выделяем Master Dynamic и жмём Create.

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

Подобную иерархию можно создать и из событий:

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

Вернемся к нашему примеру. Вновь созданное событие назовём Force. Теперь нам нужно «сказать» TP что мы всё еще работаем с группой частиц Evaporations. Для этого нам нужно нажать на вкладку Groups (кнопка с плюсиками, если забыли) и поместить на поле нашу группу Evaporations. Нам понадобится оператор стандартной силы. Перейдите во вкладку Operators выберите из выпадающего списка Dynamics и вставьте оператор StdForce. Теперь нам нужно указать StdForce что он должен влиять на нашу группу частиц. Свяжите узлы как показано на рисунке.

Итак, у нас есть оператор силы, но специфика этого оператора такова, что он использует стандартные максовские силы. Давайте вставим в нашу сцену один Drag. Теперь выберите инструмент Bind to space Warp (третья кнопка от Redo вправо) зажмите левую клавишу мыши на Drag и отпустит на крестике TP. Обратите внимания, во вкладке Modify TP появилась строчка «Drug Binding (WSM)». Это значит, что наша сила привязалась к TP. Здесь же её можно либо отключить, либо вообще удалить. Теперь выделите наш оператор силы в TP, и вы увидите, что Drag находится в Deactive List. Для его активации нажмите на кнопку Activate, Drag переместится в Active List. Таким способом можно включать и выключать необходимые силы, если их много. Настройки для Drag делаются как обычно, поставьте для всех осей 25, думаю, этого хватит. Теперь наши частицы сначала движутся быстро, а затем останавливаются и скапливаются в тучку.

Теперь давайте добавим движение нашей импровизированной туче. Для этой цели мы будем использовать другой оператор силы из TP. Итак, выберем теперь оператор Force (находится там же где и StdForce) и поместим его на поле. Теперь нашему новоявленному оператору нужно указать направление, вдоль которого он будет действовать. Для этого воспользуемся TP хелпером Poin3. Данный хелпер даёт нам вектор исходя из вводимых данных по осям. Введите в Y-value 1. Теперь наша сила действует только по оси Y, и наши тучи уносит туда же. Окончательная схема будет выглядеть так:

На этой схеме мы будем указывать группе частиц Evaporations, что им нужно подчиняться силам. Для оператора Force мы применили хелпер Poit3 для задания направления. Здесь мы видим, что у нас связаны Vector и Direction. Как уже было написано, эти I/O однотипные величины (векторные), поэтому они связуемы.

Шаг третий: сделать выпадение дождя.

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

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

В событие Condensation вставьте группу Evaporations. Теперь добавьте оператор Group из списка операторов Standard, нажмите на него и выберите из его выпадающего списка группу Rain. Свяжите Particle у оператора Evaporations и оператора Group. Мы видим, что наши частицы  пара сразу переходят в дождь, устраним эту проблему. Добавим для оператора Group новый вход On. Просто нажмите на зеленой точке слева и выберите нужное. Теперь необходим, какой-то критерий для включения этого оператора. Добавит для этого оператор Distance из вкладки Conditions, который вычисляет дистанцию. И добавим Volume Pos., который позволит нам определять объем Box, а не только позицию его Pivot. Volume Pos. работает также в связке с Node, добавьте его. Свяжите все узлы как показано на рисунке.

У Distance выставьте Radius 2: 50. Radius 1: 0

Теперь пар превращается в дождь только при условии, если он пересекает объема куба. Вы можете добавлять интенсивность наших осадков простым увеличением Radius 2 у Distance. Однако наши частицы дождя по инерции движутся вместе с частицами пара, только цвет меняют. Давайте устраним эту проблему.

Добавим гравитацию в сцену из списка стандартных сил макса. Свяжем её с TP.В TP создадим новое событие и назовем его Rain Fall. Добавим StdForce и группу Rain. Далее свяжем выход и входы particles, и активируем нашу гравитацию. Добавим оператора Particle Die, который находится в стандартных операторах, и свяжем его с группой Rain. Можете ввести в него любое значение для времени жизни частиц.

Окончательная схема выглядит так:

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

Всё дождь падает как надо.

Окончательная структура событий выглядит так:

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

В дальнейшем, если этот урок вам понравится, я попытаюсь написать еще несколько уроков по TP, но более сложных. Надеюсь, данный урок будет кому-то полезен.

Всем спасибо за внимание!

522 0 850 19
13
2010-07-02
Отлично Спасибо!!!
2010-07-03
а где красивая картинка с каким-нибудь интересным результатом?
2010-07-03
[quote=[hidden]] а где красивая картинка с каким-нибудь интересным результатом? [/quote] Если разберётесь с основой TP, то и красивую картинку сможете сами получить! Конечно одного этого урока не достаточно для получения общих представлений. Сейчас я пишу еще один урок который дополнит этот.
2010-07-09
Класс,а то по подобным вещам не так много информации,а как отличается кракота от тикин партикл? И если вы пользовались кракотой что можите про ниё сказать?А новый урок жду с нитерпением )) Спасибо за труд..
2010-07-11
[quote=Сергей Пастухов] Класс,а то по подобным вещам не так много информации,а как отличается кракота от тикин партикл? И если вы пользовались кракотой что можите про ниё сказать?А новый урок жду с нитерпением )) Спасибо за труд.. [/quote] Отличие TP от Krakatoa принципиальное. TP вы создаёте частицы, а в Krakatoa вы их визуализируете. Krakatoa просто превратщает все ваши частицы в точки когда вы рендерите сцену. Вообще Krakatoa это очень крутой плагин (где еще можно визуализировать такое колосальное количество частиц), где то на этом сайте лежит урок посвященный ему. ЗЫ: Вопрос адресованный хорошо знающим TP. Как уменьшить количество отображаемых на экране частиц? ЗЫЫ: Я, кстати, только что отправил второй урок на сайт так что ждите.
2010-10-04
[quote=TotalCommander] ЗЫ: Вопрос адресованный хорошо знающим TP. Как уменьшить количество отображаемых на экране частиц? [/quote] на самом деле никак, увы. только при использовании MatterWaves.
2011-01-21
Как уменьшить количество отображаемых на экране частиц? на самом деле никак, увы. (через 15 минут изучения ДЧ) Поможет уменьшение в ноде *Born параметров Счёт\Частитв сек/Пистоль. Спасибо К.О.! проверил в PositionBorn - работает, как и предполагалось :)
2011-01-21
[quote=Reactive] Как уменьшить количество отображаемых на экране частиц? на самом деле никак, увы. (через 15 минут изучения ДЧ) Поможет уменьшение в ноде *Born параметров Счёт\Частитв сек/Пистоль. Спасибо К.О.! проверил в PositionBorn - работает, как и предполагалось :) [/quote] Вы наверное не поняли. Нужно что бы во вьюпорте отображалось как можно меньше частиц, чтобы не тормозил комп, а при рендеринге количестов частиц было максимально приемлемым. Подобная штука есть в максовском PF. И пистол шот, это просто генерация всех частиц разом. ЗЫ: 15 минут явно не достаточно чтобы понять что к чему, не мните себя самым умным.
2012-10-23
Автору большое спасибо за урок!!! Подобные уроки материал редкий. Давно ищу документацию по ТР, с описанием операторов. Буду очень признателен автору или участникам данной дискуссии, если поделятся документацией (если такова имеется). Распространять ее не буду. Устал разбираться с ТР методом тыка, ... очень устал. Мой почтовый адрес samakrasa@mail.ru Заранее спасибо!!!
2013-05-24
Объясните, пожалуйста, зачем нужен Distance и почему имено выход Output и зачем включать On? Этот момент не очень понятный...
2013-05-24
[quote=ШКІПЕР] Объясните, пожалуйста, зачем нужен Distance и почему имено выход Output и зачем включать On? Этот момент не очень понятный... [/quote] Всё просто. Когда дистанция между двумя объектом и партиклом становиться равной или меньше указанной в ноде дистанс, то из Output выходит значение True (правда), в ином случае False (не правда). При False частицы не переходят в другую группу, при True переходят. Если бы мы не использовали ноду дистнас с его хелперами, то оператора Group переводил бы все частицы в свою группу без каких либо условий, на вход On по умолчанию подавался бы всегда True.
2014-02-15
интересно, а этот плагин еще акутален для 3ds MAX ?
2017-04-28
[quote=Денис Глаголев] интересно, а этот плагин еще акутален для 3ds MAX ? [/quote]да
RENDER.RU