Для начала сделаем источник пара.

Выполните Particles=>Create Emitter.

В Channel Box задайте для него следующие атрибуты:

emitterType=Directional;

directionX=0;

directionY=1;

spread=0.3;

speed=5.

Это создаст источник частиц, стреляющий вертикально вверх с небольшим углом распыления. Переместите источник в нос чайника (в первом кадре!), перетащите и бросьте его на чайник средней кнопкой в Outliner, припарентив его, таким образом, к чайнику.

Теперь из носа падающего чайника непрерывно идет условный пар. Можно теперь установить в ноль значение атрибута rate для эмиттера и попытаться включить его только в момент удара. Пытливые умы уже, конечно, слазили в раздел документации, предназначенный для взрослых мальчиков, то есть в описание ноды типа rigidBody, и нашли, что у нее есть атрибут contactCount, отвечающий за количество столкновений в текущем кадре. Иначе говоря, у любого твердого тела (пассивного и активного) есть атрибут, имеющий, как правило, нулевое значение, но как только в некотором кадре тело соударяется с другим объектом, в этот атрибут записывается количество соударений именно (и только) в этом кадре. Если десять чайников синхронно упадут на плоскость, то для пассивного твердого тела на плоскости в момент удара в атрибут contactCount запишется значение 10. В тех кадрах, где тело ни с кем не контактирует, атрибут снова принимает нулевое значение.

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

Откройте Windows=>Animation Editors=>Expression Editor (еще проще сделать это, выбрав любой атрибут в Channel Box, и по правой кнопке мыши выбрать в меню Expressions…).

Создайте новый expression следующего содержания:

if(rigidBody17.contactCount>0) emitter1.rate=1000; else emitterl .rate=0; Дословно так переводится на человеческий язык: «Если в данном кадре количество соударений больше нуля, то включить источник (emitterl - это точное имя источника частиц) на полную мощность, а в противном случае - выключить его.».

Однако если проиграть анимацию, ничего не происходит. Оказывается, надо включить секретную галку, для того, чтобы MAYA начала отслеживать и накапливать информацию о столкновениях. Эта галка располагается в атрибутах для Rigid Body Solver.

Откройте Solvers=>Rigid Body Solver и в разделе Rigid Solver States включите галку Contact Date. После этого MAYA начнет собирать информацию о контактах твердых тел и обновлять у них атрибуты contactCount. А чайник начнет выбрасывать возмущенные струйки пара в момент удара о плоскость. Если чайник улетает в небо, присоедините его к гравитации и увеличьте упругость отскока: bounciness=1).

С помощью атрибута contactCount и несложного expression можно производить в момент удара различные действия: менять цвет поверхности, включать и выключать деформации и многое другое.

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

Пытливые умы, однако, быстро сообразят, что вместо ключей, можно использовать аналогичный expression для переключения статуса активности осколков точно в момент удара, после чего чайник будет раскалываться на куски при столкновении с любым препятствием. Надо только не забыть про то, что в первом кадре осколки обязаны быть пассивными.


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