Естественно, что выборочно редактировать атрибуты частиц с конкретными номерами можно не только в Creation Expression, но и в Runtime Expression, изменяя свойства конкретных частиц.

Как сделать часто или редко?

Иногда надо сделать так, чтобы изредка происходило некоторое событие, и степень «редкости» хотелось бы регулировать.

Перепишите предыдущий expression следующим образом: if(rand(1 )>0.9) velocity=-velocity; Эта конструкция означает, что если очередное случайное число от нуля до единицы оказалось больше, чем 0.9, то скорость частицы (ведь дело происходит при ее создании) меняется на противоположную. Иначе можно сказать, что с вероятностью 10 процентов каждая следующая частица полетит в другую сторону.

Формула if(rand(1 )>Х) является универсальным способом организации вероятных событий. Чем ближе X к единице, тем реже будет происходить событие.

В случае if(rand(1 )>0.5) событие будет происходить с вероятностью пятьдесят процентов.

Ода функции rand

Как заметили пытливые умы, редкий expression обходится без применения функции rand. Действительно, эта простая функция, возвращающая одно число в заданном диапазоне, позволяет организовать не только «массовые беспорядки», но и равномерное распределение некоторых свойств среди достаточного большого количества частиц.

Главное достоинство этой функции - ее свойство возвращать новое случайное число при каждом её вызове. То есть если в Runtime Expression для объекта из пяти тысяч частиц встречается выражение типа

radiusPP=radiusPP+rand(-0.01, 0.01); это означает, что в каждом кадре функция rand будет вызвана пять тысяч раз и добавит к радиусам всех частиц пять тысяч разных значений.

С одной стороны, эта функция позволяет задать неодинаковость различных свойств для частиц. С другой стороны, эта неодинаковость распределяется равномерно в том диапазоне, который указан при вызове функции.

Примечание. Вызов rand(1) эквивалентен вызову rand(0,1). Соответственно, rand(12.5) соответствует rand(0, 12.5).

Специально для трехмерных атрибутов типа скорости или позиции, существует объемная реинкарнация этой функции под название sphrand(L), возвращающая случайный вектор заданной длины. Компоненты этого вектора могут быть отрицательными. А для цвета можно воспользоваться вызовом rand(<<x, у, z >>), возвращающим вектор (три числа), компоненты которого лежат в диапазоне, от нуля до х, у, z, соответственно.

Измените expression из предыдущего примера следующим образом: if(rand(1 )>0.5) velocity=sphrand(0.5); Половина частиц полетит в случайном направлении, а половина продолжит прямолинейное движение.

До и после динамики Обладатели «послепятых» версий MAYA, наверное, уже сгорают от желания узнать, когда нужно выполнять Particle Expression до или после динамики. До шестой версии MAYA в Attribute Editor просто была неприметная, выключенная по умолчанию галочка Expression After Dynamics, позволявшая выполнять имеющийся единственный Runtime Expression после динамики. Начиная с шестой версии, для одних и тех же частиц можно создавать два разных Runtime Expression, один из которых будет выполняться до вычисления динамики, а второй после. Я напомню, что все это будет происходить в каждом кадре (точнее, в каждом oversampling-отсчете). Вся предыдущая литература, учебники, упражнения и даже родная документация MAYAссылается на Runtime Expression, предполагая, что он один, и не указывая, когда он выполняется: до или после динамики.


⇐ вернуться назад | | далее ⇒