Основы системы частиц Thinking Particles. Часть 2

Всем привет! Меня зовут Олег Иванов, я из Калининграда. Это мой второй урок по системе Thinking Particles. Рекомендую изучить сначала первый урок:

http://www.render.ru/books/show_book.php?book_id=922

Я объясню вам еще несколько важных моментов в TP, которые остались за кадром.

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

Плейн - 1шт,

Замоделеная ракета - 1шт,

Замоделеные, разноцветные шарики - 5шт.

Ну и конечно система частиц ТР - 1шт.

Расположите их как на рисунке ниже:

Открываем наш любимый TP. Создаём новую группу частиц Air Balls (воздушные шарики). Выделите Master Dynamic и поставьте галочку напротив Show Mesh, дабы видеть оболочку частиц. В Master Dynamic создаём новое событие точнее группу событий, которые будут касаться только воздушных шаров. Назовём его также Air Balls. Выделяем вновь созданное событие и создаём подсобытие Birth Target (шарики будут у нас мишенями). Создайте и соедините ноды как на рисунке ниже:

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

Едем дальше, придадим нашим частицам форму. Выделите событие Air Balls создайте новое событие Shape Target, поместите на поле узлы и соедините их как на рисунке ниже:

В этом событии мы используем новые узлы это:

Geom Instance (Оператор геометрии по оригиналу) – используется, если необходимо задать частицам определённую форму, в нашем случае это шарики.

Random (хелпер случая) – используется для генерации чисел в задаваемом диапазоне, с разными способами генерации.

Давайте настроим всё это дело. Выделите Geom Instance и прощелкаем все наши шарики кнопочкой Pick Object. Выделите хелпер Random и введите Value1: 0, Value2:4; поставьте режим Animation.

В этом событии всем созданным частицам будет присвоена определённая форма шарика, посредством оператора Geom Instance. Обратите внимание на то, что этот оператор нумерует заносимые в его список объекты, начиная с нуля. Этим мы и воспользовались, подключив к Shape Number хелпера Random который и генерирует числа от 0 до 4. Всё очень просто.

Теперь создадим ракеты, которые будут стрелять по шарикам. Прежде всего, создайте новую группу частиц Rackets. Выделите Master Dynamic создайте событие Launch Rackets. В нём создайте событие Birth Rackets. Во вновь созданном событии поместите на поле и соедините ноды как на рисунке ниже:

В качестве цели для Node используйте созданный приметив трубу. Скорее всего, вам пройдется переворачивать Pivot трубы, для правильного направления движения частиц. Настройте оператора рождения так, чтобы частицы вылетали не очень часто, но быстро летели и долго жили. И присвойте эти частицы к группе Rackets.

Давайте разберёмся, зачем это нужно. Дело в том, что частицы рождаются из Pivot объекта, и если мы повернём нашу трубу, то частицы на это никак не отреагируют. Поэтому мы и связали подобным образом ноды.

Создайте новое событие  Shape Racket в событие Launch Rackets. Создайте и соедините ноды как на рисунке ниже:

В качестве Geom Instance выберите замоделеную ракету. Здесь мы используем новый оператор Alignment (Выравнивание). У него выберите из выпадающего списка Direct to Travel. Если его не использовать, то частицы ракет будут направлены так же, как направлен референс частиц.

Давайте добавим шлейфы дыма к ракетам. Выделите событие Launch Rackets и создайте событие Birth Racket trails. Так же создайте новую группу Trails. Создайте и соедините ноды как на рисунке ниже:

Настройте Position Born так, чтобы это было похоже на дым из частиц.

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

Выделите Master Dynamic и создайте новое событие Find Target. В этом событие мы заставим ракеты САМОСТОЯТЕЛЬНО нацеливаться на шарики и взрываться при столкновении. Создайте и соедините ноды как на рисунке ниже:

Здесь мы используем новый оператор PPassAB, он очень полезен, когда нужно выудить данные из двух групп частиц. У это - A Particles: Air balls и B Particles: Rackets. Так же этот оператор имеет внутри себя опцию активации Distance (совсем как одноимённое условие). Поставьте Distance 50. Оператор BringTo позволяет нам направить частицы ракет к частицам шариков. Поставьте у него In Frames: 100 (время, за которое ракеты будут долетать до шариков).

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

Давайте создадим внутри события Find Target событие Explode. Создайте и соедините ноды как на рисунке ниже:

Создайте также новую группу частиц Explode. Присвойте рождаемые частицы в событии Explode к созданной группе. Ноду Distance поставьте Radius 2 примерно как радиус шарика. Оператору рождения частиц задайте Direction Variation: 180, и выберите режим испускания Pistol Shot.

В событии Explode мы рождаем взрывную волну посредством Position Born,  при этом нам необходимо, чтобы ракета и шарик были уничтожены, это мы делаем с помощью Particle Die.

Теперь выделите событие Find Target, и вы увидите, что на центральном поле показывается выделенное событие, а ниже его подсобытие. Вот теперь главное не запутаться в паутине связей.  Чтобы вам лучше было видно, я пока удалю оператор Bring To.

Свяжите ноды как на рисунке ниже:

Наверное, проще для восприятия представлять созданное и связанное таким способом событие как новый нод, внутри которого находятся другие ноды. В итоге окончательно событие Find Target выглядит так:

Итак, давайте разберёмся во всём этом безобразии. Нам необходимо рассчитать две дистанции между частицами (ракетой и шариком): дистанция при которой ракета обнаруживает цель и начинает лететь к ней, вторая дистанция это расстояние, при котором происходит взрыв. В первом случае, в событие Find Target мы использовали встроенный Distance у оператора PPassAB. Во втором случае, нам необходимо рассчитать минимальную дистанцию между этими же частицами. По этому, можно использовать тот же оператора PPassAB и вытащить из него нужные данные. Так же мы использовали нод условия Distance для расчета второй дистанции.

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

Что ж основная тема урока выполнена. Но еще несколько моментов, о которых нельзя не сказать.

В прошлом уроке я вскользь упомянул о BlackBox (заранее составленных сохранённых событиях). Там полно всякой всячины, давайте, и мы добавит туда чего-нибудь своё. Выделите событие Find Target и нажмите на кнопку сохранения (находится под Remove). Сохраните его по такому пути: Ваш диск:\Documents and Settings\All Users\Документы\cebas\3dsmax2009\ThinkingParticles_3\3rdpartyBlackBox\User sets.

Как видите, я создал свою папку User sets, куда и буду складывать свои события, которые могут пригодиться в будущем. Появится табличка с выбором типа сохранения. Выберите Create New. И сразу же у нас появится в выпадающем свитке BlackBox наша папка и наша кнопка с событием Find Target. Теперь вы можете уже составленное событие вставить в другой проект, и всё что вам понадобится это указать в PPassAB нужные группы частиц. Так же можно сохранять ноды и даже целый Master Dynamic. Для этого выделите нужное и сохраняйте.

Предположим, что ваш проект слишком тяжёл для вашего компьютера и анимация сильно подтормаживает. Для этого можно воспользоваться записью анимации в специальный файл. Все данные при этом будут браться из него. Для того что бы это сделать, выделите Master Dynamic найдите список Recorder, нажмите Select record File, дайте имя файлу и нажмите на Record внизу списка. Пойдёт запись анимации частиц. По завершении всё будет проигрываться гладко. Допустим, если вам нужно что-нибудь поменять в симуляции, просто нажмите в том же списке на кнопку Simulate, вносите изменения, а затем перезаписывайте симуляцию. Данная опция позволит сэкономить кучу ресурсов и нервов.

В заключении хотел бы сказать, как работает шейдинг частиц. Если у вас установлен After Burne, FumeFX, Krakatoa или же что ещё, то при выборе частиц появится табличка, по которой вы можете выбирать группы частиц который нужно зашейдить.

Для дальнейшего обучения абсолютно всем советую просмотреть видео уроки с этого сайта: www.community.ro

И обязательно просмотрите готовые сцены, которые идут с TP в качестве уроков. Они все рассортированы по папкам и затрагивают все аспекты работы с TP (мне в своё время они очень помогли самостоятельно во всём разобраться).

Так же если у вас возникнут трудности, можете обратиться ко мне, помогу, чем смогу.

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

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

511 0 850 15
3
2010-10-02
Спасибо
2012-10-23
Автору большое спасибо за урок!!! Подобные уроки материал редкий. Давно ищу документацию по ТР, с описанием операторов. Буду очень признателен автору или участникам данной дискуссии, если поделятся документацией (если такова имеется). Распространять ее не буду. Устал разбираться с ТР методом тыка, ... очень устал. Мой почтовый адрес samakrasa@mail.ru Заранее спасибо!!!
2013-01-06
Thanks!!!!
RENDER.RU