Render.ru

Листья на ветру или instancer replasment

Paul_Winex

Знаток
Рейтинг
20
#1
Приветствую. Последние два дня провожу за просмотром уроков по динамике и партиклам майским. Всё для того чтобы найти одну функцию. Суть вот в чем. Допустим я делаю какие-либо объекты, которые летят по ветру. Например листья во время сильного ветра или корова в торнадо. И всё бы хорошо, но встал вопрос насчет вращения. Без вращения это выглядит дешово а с параметром Rotarion = velosity просто глупо и смешно (особенно с коровой в торнадо :). Другие параметры тоже не совсем ясно. Я бы хотел решить вопрос через выражения.
Вопрос - как сделать рандомное вращение? Чтобы каждому инстенсному объекту в каждом кадре записать выражение на rotation? Каждому отдельно, то есть PerParticle.
 

О С (VirtualV)

Активный участник
Рейтинг
5
#2
Ниже вкладки Per Particle есть вкладка Add dynamic Attributes там такаеш General и выбираеш нужный тебе атрибут или создаеш свой, этот атрибут и появиться в Per Particle, ну далее вещаеш на него Експрешенс...
 

Вложения

Paul_Winex

Знаток
Рейтинг
20
#3
Ну на самом деле это я сделал первым делом. Просто не хотел приводить в пример чтобы возможно другие варианты были. Я использовал параметр rotationPP. Но как с ним быть - уже второй вопрос на котором и застрял. В мануале написаны лишь действия с готовыми параметрами. А мне надо экспрешен. При назначении на параметр rotation типа velocity в скриптах пишется команда

Код:
particleInstancer -e -name instancer4 -rotation velocity nParticle01;
При добавлении атрибута rotationPP получается такая команда:

Код:
addAttr -ln rotationPP -dt vectorArray nParticle01;
То есть этот параметр по логике вещей является вектором. И вопрос в общем состоит из двух частей.
- как скриптом работать с вектором? Дело в том что привычный мне доступ nParticle01.rotationPP.X тут уже не катит. И почемуто не катит nParticle01.rotationPP[0] и пр.
- как правильно записать скрипт чтобы он исполнялся в каждом кадре для кажной частицы (а не например только при создании 1 раз)?

Саму формулу я уже заготовил на примере вращения кубика.

Код:
$a = -20; //от
$b = 20;  //до
$s = 3;    //скорость

pCube1.rotateX = pCube1.rotateX + (noise(time*$s)+1)/2*($b-$a)+$a;
pCube1.rotateY = pCube1.rotateY + (noise(time*$s)+1)/2*($b-$a)+$a;
pCube1.rotateZ = pCube1.rotateZ + (noise(time*$s)+1)/2*($b-$a)+$a;
Но его надо модифицировать под работу с вектором.
 

О С (VirtualV)

Активный участник
Рейтинг
5
#5
присвоить значения вектору можно в скобках <<>>, к примеру particleShape1.rotationPP=`rand<<360,360,360>>`;
вобщем всё делается как я и описывал, толкьо я забыл что надо явно указать, что будет отвечать за вращении во вкладке Instancer (Geometry Replacement) и експрешенс будет нормально работать.
p.s. зависимость от времени тут необязательно тк в каждом кадре формула будет расчитыватсья заново.
 

Вложения

Paul_Winex

Знаток
Рейтинг
20
#7
Вот и выяснилась истина. Оказалось помимо создания параметра rotationPP надо его еще назначить как управляющий вращением параметр :) Причем, судя по уроку, можно и свой любой атрибут сделать (вектор) и его назначить. Это такие вот умозаключения чайника.
В общем сделал сцену и оказалось что на сколько бы случайными небыли числа (и с noise и с rand) всё равно получается зацикленная анимация. То есть несколько секунд объект вращается куда угодно и потом анимация зацикливается. В данный момент даже не представляю как это цикл хотябы продлить или вовсе убрать повтор.
 
Сверху