|
Сразу вначале повествования
хотел бы сказать, что не претендую на
оригинальность (возможно, кое-кто из наших
гуру по Майе уже поднимали эту тему). Мне
хотелось бы рассказать здесь о том, как
можно управлять динамикой, используя
стандартную keyframe анимацию. Многие
трехмерщики в работе, возможно,
сталкивались с проблемой слабой
управляемости динамических эффектов.
Я с этой проблемой столкнулся несколько лет
назад, когда мне нужно было создавать
большое количество разнообразных эффектов,
в частности взрывов и анимации одежды. Итак,
приступим.
Начнем с самого простого примера. Итак
попробуем смоделировать простой наземный
взрыв. Создадим группу из 50 частиц с
радиусом 2, назовем ее "Explode" (здесь и
далее я буду дублировать свои слова
командами меловского скрипта):
particle -n Explode -jbp 0 0 0 -nj 50 -jr 2 -c 1 ;
В Attribute Editor'е (далее AE), поменяем тип частиц
на cloud и устанавливаем параметр threshold в 0.75:
setAttr "ExplodeShape.threshold" 0.75;
Теперь к частицам добавим динамический
аттрибут, этот аттрибут назвается radiusPP:
addAttr -ln radiusPP -dt doubleArray ExplodeShape;
либо AE>general>particle>radiusPP.
Далее, понятно, что для моделирования
взрыва нужно придать частицам начальную
скорость разлета. Для этого можно
воспользоваться например radial field. Я, с
вашего позволения, воспользуюсь своими
разработками - я люблю для этого дела
использовать скрипты. Итак, небольшая
программка:
float $Ro;
float $Fi;
float $Teta;
int $ii;
int $ind;
for ($ind=0;$ind<50;$ind++)
{
$Ro = rand (2,7);
$Fi = `deg_to_rad(rand (0, 360))`;
$Teta = `deg_to_rad(rand (0, 90))`;
$rad = rand(1, 1.5);
float $PosX=$Ro*cos($Fi)*sin($Teta);
float $PosY=$Ro*cos($Teta);
float $PosZ=$Ro*sin($Fi)*sin($Teta);
particle -e -or $ind -at velocity -vv $PosX $PosY $PosZ ExplodeShape;
particle -e -at radiusPP -or $ind -fv $rad ExplodeShape; //Строчка
делает разный размер для каждой частицы.
};
В этой программке я задаю направление
вектора скорости частиц в сферических
координатах. Итак, мы получили
разлетающиеся частицы по оси Y. Хорошо. Они
разлетаются равномерно и прямолинейно (по
умолчанию ускорение частиц равно 0). Теперь
я хочу, имея полученную картину,
смоделировать вразумительный взрыв.
Немного пояснений. Любая
динамика в Майе работает с солвером (не буду
углубляться в детали, но если говорить
проще - то это нод, в который мы подсовываем
глобальное время в сцене, а он нам генерит
позиции объектов, имеющих динамику, в
данном случае это частицы). Идея
заключается в том, чтобы подсунуть вместо
глобального времени анимацию, тогда нам
будет довольно легко настроить фазы
развития нашего взрыва. Ну приступим.
Выделяем наши частицы, ищем аттрибут currentTime,
далее отправляемся в нулевой кадр и делаем
операцию breakConnections:
CBdeleteConnection "ExplodeShape.cti";
Частицы двигаться прекратили (разумеется,
время не меняется и солвер все время
считает позицию для нулевого кадра). Теперь
все просто. Анимируем параметр currentTime и
подгоняем под наше представление о фазах
развития взрыва - к примеру значения frame 0 -
currentTime 0, frame 4 - currentTime 27, frame 15 - currentTime 47, frame 30 -
currentTime 51. Ну, допустим, со скоростью разлета
мы определились. Теперь хотелось бы чтобы
менялся еще и размер частиц в процессе
разлета. Для этого напишем runtime expression:
ExplodeShape.radiusPP = mag(ExplodeShape.position)/3;
размер
частицы меняется в зависимости от позиции.
Далее достаточно анимировать параметры
particleCloud1 и получаем взрыв. Теперь предлагаю
коротенько рассмотреть другие примеры
применения этой технологии.
Пример
- создание эффекта замедленной съемки при
использовании предметов с динамикой
твердых тел. Итак делаем сценку из 16 кубиков
и шара. Нажимаем play все проигрывается
равномерно. . Теперь заходим в пункт F4>Solvers>rigidSolver.
Видим наличие того же самого аттрибута
currentTime. C ним мы работать уже умеем. Итак
делаем кадры 0-0, 40-40, 200-50, 260-121. В результате
наших "злодеяний" с 40 по 200 кадры
динамика как бы "замедляется" .
Аналогичные вещи можно проделать и с
одеждой и без особых ухищрений получить
эффект замедления. Итак, благодарю за
внимание.
Источник: www.render.ru
|