|   Регистрация (Registration)   Вход  



1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9

Thinking Particles Softbodies (Упругие тела)

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

Начнем с простой сцены, в которой содержатся два идентичных плана, именуемых Default и Softbody. Default становится невидимым когда нам требуется видеть деформированный мэш в конце действия.
Теперь надо создать по частице(particle) на каждую точку(vertex) (Info) для Softbody.
Для того, чтобы упростить управление нашим Softbody создадим таг Xpresso для него и сделаем все нужные параметры доступными как свойства (Info).

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

В данном случае нам нужны следующие элементы управления:
  • Название / Name (Тип данных)
  • Переключатель вкл/выкл / Enable/Disable switch (Bool)
  • Группа частиц / Particle group (Link)
  • Элементарная геометрия / Default Geometry (Link)
  • Время создания частицы / Time of particle creation (Time)
  • Время жизни частицы / Lifetime of the particles (Time)
  • Значение упругости тела / Flexibility of the Softbody (Float)
    Вспомните о том, как переключиться в режим видимости портов (Info).
  • Наша конструкция состоит из трех основных частей.
  • Генерация частиц и инициализация нужной информацией
  • Фиксация частиц эластичности на начальных позициях
  • Связывание мэша Softbody с этими частицами
    Для того, чтобы сгенерировать частицы мы будем использовать определенное число нодов-генераторов. В нашем случае нужно использовать нод PBorn, который является наиболее гибким в использовании.
    Прежде всего, надо определиться с числом частиц. Оно зависит от количества точек (Info) в Default Geometry. Нод Point обеспечит нас этой информацией. Просто соединим его вход object с портом Default Geometry, который находится в главном ноде XGroup и выход нода Point Count соединим со входом Shot нода PBorn. Почему Shot? Мы хотим чтобы все частицы возникли единовременно, а не в течение некоторого периода времени. Для этого надо перевести нод PBorn в режим Shot.
    Следующая часть - старт и контроль над продолжительностью жизни (Lifetime) частиц. Lifetime можно просто связать с нодом PBorn, но время начала нуждается в определении. Нод Compare позволит нам определить в текущей анимации время равное установленному времени старта (т.е. когда наступит время, когда надо стартовать) и соответсвенно включит PBorn. Так как у нас есть общий порт Enable нам надо использовать булевскую функцию AND для того, чтобы убедиться, что нод Enable так же как и нод Compare дает нам добро на старт генерации частиц. сцена / документированная сцена
  • Основная часть по прежнему отсутствует и это привязка позиций частиц. Для этого нужен второй нод Point и нод PSetData. Второй нод Point необходим потому, что нельзя использовать один и то же нод для разных целей в пределах одной конструкции. Первый нод Point используется только один раз когда ноду PBorn требуется получить информацию о том, сколько частиц надо сгенерировать, в то время ка второй используется столько раз сколько есть частиц и точек. В основе своей PBorn - это нод итератор (Info).
    Настроим нод Point для оценки деформации, в случае наличия анимации меша в этом месте, также убедимся что в ем используются глобальные координаты (Info) так как позиция частиц всегда определена как глобальная.
    Нод PSetData надо соединить с портом Birth нода PBorn, чтобы знать какая частица на данный момент активна. Индексом Point можно управлять посредством Birth Num, который содержит индекс текущей активной частицы. Это очень похоже на использование переменной счетчика в цикле For Next loop. сцена документированная сцена
    Как Вы можете видеть наша конструкция растет как и время затраченное на ее создание. Выберите ноды, определяющие время старта и преобразуйте их в единичную группу XGroup, выбрав Convert to XGroup в контекстном меню.
    Переключитесь из режима view для этой группы в режим Standard и сделайте доступными имена портов. Переименуйте группу во что-нибудь более осмысленное, чтобы потом понять что это такое. Сцена.
    Теперь о времени, в течении которого конструкция работает. Включите параметр enable box из параметров тага Xpresso и убедитесь, что объект default geometry связан с соответствующими полями типа Link. Жизненный цикл частиц надо установить равным длине Вашего документа, а время старта равным 1 (Второй кадр)
    Нажмите play.
    Будем надеяться, что Вы били вознаграждены маленьким белым крестиком для каждой точки на плане Default.

    Теперь частицы стоят на нужных местах, что дальше?
    Прежде всего надо сделать так, чтобы они оставались на своих местах и как обычно существует более одного пути добиться этого.
    Первый вариант - сохранять текущую позицию частицы и передавать ее по ссылке, другой - всегда использовать позиции точек объекта Default. Мы будем использовать второй вариант, так как это позволит вернуть softbody в исходное соостояние из подвинутого/деформированного мэша.
    Поскольку эта часть абсолютно отдельна от предущей имеет смысл почистить наше рабочее пространство, чтобы освободить место для новых нодов. Просто выберите все ноды и преобразуйте их в группу Xgroup. Снова переключитесь из режима view в режим Standart. Сцена

    В этом месте я заметил, что забыл о двух вещах в первой конструкции. Что делать? Переписать весь материал и создать новые скриншоты и сцены? Нет! Почему? ПОтому, что это будет случаться и с Вами и довольно часто, поэтому это хороший шанс посмотреть как исправить и использовать то, что уже есть.
    Что мы пропустили? Это не выглядит очень важным сейчас но позже при просчете нашей конструкции покажется более или менее полезным. Это группа частиц, у которой нет привязки. Группы частиц нам нужны, чтобы различать частицы (какие привязаны - какие нет). Без этого будет очень тяжело поскольку нет возможности различать частицы и определить какая и как используется. Второй аспект - это отсутствие способа хранения связи частица-точка, на данный момент у нас есть пучок частиц но никакого способа узнать какая какой точке соответсвует.


    Прежде всего начертим соединение от порта Link внешней XGroup к голубому квадратику в левом верхнем углу новой созданной группы Xgroup и свяжем Link порт с ней. Переключимся из режима View этой XGroup в режим Fullscreen. Новый нод PGroup соединим с PBorn->Birth и получим порт Link извне.


    Вторая часть чуть более сложна. Нам нужен менеджер установок Thinking Particles (Thinking Particles settings manager) (к нему можно добраться либо через меню Plugins либо через пользовательское меню Xpresso редактора). В менеджере выберите вкладку Channels (Info) и создайте канал со значениями целочисленного типа (integer), который назовите Number.
    Для установки значения этого Number просто постройте соединение между поротом Birth Num нода PBorn и подтяните его к голубому квадратику в верхнем левом углу нода PSetData. Теперь только что созданный нами канал доступен по этому порту.
    После всех изменений внесенных нами снова переключитесь из View в Standart. Сцена.
    Теперь займемся эластичностью нашего упругого тела. Нам надо чтобы частицы гибко следовали за мешем Default. Основной кандидат на исполнение этого нод PPositionFollow. Он позволяет передвигать частицу на определенное место но не мгновенно, а в течение некоторого времени. Он может работать при постоянной скорости (Constant Speed) либо при с ускорением (Spring Speed). Мы будем использовать Spring так как Constant Speed не даст нужного нам эффекта. Опция Spring Speed содержит значение ускорения с которым частица достигает заданой позиции. 100% означает, что частица окажется на месте мгновенно без какого бы то ни было эффекта эластичности.
    Для того, чтобы связать наше значение эластичности (Elasticity) с этим промежутком (0-100) мы будем использовать простой математический нод для расчета разности между 1 и значением упругости (Flexibility) таким образом инвертируя промежуток.

    Для получения доступа к частицам нам нужен нод PPass. Для определения группы частиц (Particle Group) надо соединить порт Link нода Particle Group из внешней группы Xpresso с соответствующим портом входа нода PGroup.
    Еще нам нужнен индекс частицы (Number), к которому можно доступиться через PGetData. Этот Number подается на вход ноду point чтобы правильно выбрать точку объекта default (убедитесь, что существует соединение между Point и портом Link Default и переключите ноды на использование деформированного меша).
    ПОзиция полученная из нода Point для каждой частицы используетяс для установки позиции следования (Follow Position).
    Этот путь позволяет нам быть уверенными в том, что каждая частица будет следовать за точкой, к которой привязана.
    Установим математический нод (Math) в разность (Substract) и значение первого поля подгоним под область упругости (flexibility range).
    Теперь значение упругости (Flexibility value) равное 0 приведет к полной жесткости Softbody, тогда как между 0 и 1 сделает его упругим. Сцена
    Если Вы передвините объект Default во время анимации Вы увидите как частицы последуют за ним.

    Теперь последняя часть, привязка меша Softbody к нашим частицам.
    Эта конструкция аналогична последней, в которой нам требовались ноды PPass и PGetData. PGetData даст позицию частицы равно как и Number - индекс. Эти параметры подадим на вход ноду point. Порт Object нода point соединим с новым нодом Object, который создадим перетаскиванием объекта Softbody в Xpresso редактор. Установим ссылку на нод object в стартовую позицию (Start Position), что позволит конструкции работать даже если мы передвинем таг к другому объекту, который захотим использовать в качестыве упругого тела.

    Теперь все круто. У нас есть реально работающее упругое тело (Softbody), не хватает только одной вещи Действия (Action).
    Что осталось сделать так это оказать воздействие на Softbody каким-нибудь образом чтобы мы смогли увидеть что же Softbody может делать.
    Один из способов - это выстрелить в него пучком частиц. Нам потребуется эмиттер и способ столкнуть частицы.
    Я думаю мы получили достаточно сложный Xpressions и вот почему мы будем использовать некоторые presets, которые идут в поставке с Tinking Particles, чтобы позабавиться.
    В меню Objects->Object Library вы найдете TP Basic Emitter и TP Particle Collision. Передвиньте эмиттер на -300 вдоль оси z. Надо использовать группы частиц (Particle Groups), чтобы разделить частицы Softbody, от других, которыми будем его бомбардировать. В Thinking Particles Settings создадим две группы под всеми группами (All group) и переименуем их в соотвествии с их назначением.
    Свяжем группы с presets. Группа projectile связывается с эмиттером и с сollsion preset, а группа Softbody используется в конструкции Softbody, а также с collsion preset. Сцена.
    "Приправить" сцену можно добавив ветер (wind preset) с высокими значениями силы(strength) и турбулентности(turbulence).
    В последней сцене я сделал некое приспособление для регулироваки скорости эмиттера, также как и размера частиц. Анимация.

    1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9


      К списку уроков

     новости   plugin db   а-чем-а-как   форум   ссылки   о проекте  
    Вся ответственность за содержание материалов, опубликованных на сайте, лежит на их авторах.
    Использование материалов, опубликованных на сайте, разрешено только со ссылкой на источник.

    Copyright © 2003-2011 C!NEMAXiMUS