int $i;
int SemitCount = 10;
string $objectName= "particleObj”;
string SemitCmd = “emit -o “ + $objectName;
string SemitCmd 1 = " -at velocity
for( $i = 0; $i < SemitCount; $i++ ) {
SemitCmd += “ -pos “ + $col; vector $vel = sphrand(5);
$emitCmd1 += “ -w “ + $vel;
}//endfor
eval( SemitCmd + SemitCmdl );
} //endif
Для испускания частиц я использовал функцию emit, которая позволяет создать некоторое количество частиц без всяких источников. Не забудьте только предварительно создать пустой объект из частиц particleObj, который будет содержать испускаемые частицы. Это можно сделать, просто выполнив команду “particle -n particleObj”.
Идея о том, чтобы в момент столкновения сдвигать источник точно в место столкновения и включать его там, не является удачной. Попробуйте и убедитесь сами, почему. В этом случае expression будет выглядеть следующим образом:
if(rigidBody17.contactCount) {
emitter2.tx = rigidBodyl 7. contactPosition[0],contactX;
emitter2.tx = rigidBodyl7.contactPosition[0].contactY;
emitter2.tx = rigidBodyl 7.contactPosition[0].contactZ;
emitter2.rate=1000;
}
else emitter2.rate=0; Уловки и трюки при работе с динамикой Далее я хочу сформулировать некоторое количество уловок, советов и комментариев по поводу работы с динамикой твердых тел. В принципе сформулированных законов динамики достаточно для эффективной работы. Главное: надо помнить, что взаимодействие конкретного тела и поля устанавливается абсолютно независимо от других полей и тел и что поля могут быть проанимированы точно так же, как и другие объекты в MAYA. Сначала некоторое количество общих советов о том, как работать с твердыми телами.
Поведение, а не траектория Когда вы пытаетесь заставить двигаться в нужном направлении систему твердых тел, старайтесь думать о поведении системы, а не о конкретных траекториях. В отличие от ключевой анимации, вы воздействуете на траекторию твердых тел при помощи посредников: полей, свойств, ударов или констрейнов. Поэтому ваше управление движением носит характер инструкций типа «лететь в нужном направлении» или -вести себя определенным образом». Если вы пытаетесь обеспечить точное попадание в нужное место в определенный момент времени, значит вы выбрали не тот инструмент (я имею в виду динамику). Например, если вы пытаетесь попасть с помощью динамики мячом в баскетбольное кольцо, вас ждет длительная возня с начальной скоростью и направлением броска (если вы, конечно, не прочитали предварительно учебник по баллистике). Проще либо бросить мяч назад из кольца, либо нарисовать вручную его траекторию и попасть в кольцо с первого раза, анимируя мяч по пути.
Твердые тела движутся почти так, как вы хотите. Поэтому не требуйте от динамики точного попадания в точку с координатами 5, 5, 5 ровно в десятом кадре.
Твердые тела всегда остаются твердыми Если вы сделаете анимацию формы активного твердого тела прямо во время движения (например, с помощью blendshape, lattice или просто анимируя вершины), вы увидите, что тело ■■фиксирует» свою форму в первом кадре и для расчета столкновения использует именно эту форму, а не полученную в результате анимации. Поэтому не получится «честно» деформировать твердое тело в момент удара. Применяйте в таких случаях уже приведенный выше совет: пусть за столкновение отвечает невидимое твердое тело, а за деформацию - привязанная к нему обычная проанимированная поверхность. Конечно, можно пытаться колдовать с назначением нового начального положения при каждом ударе с помощью expression, однако руками все получится гораздо выразительнее. Кроме того, помните о том, что тела, сильно деформирующиеся при ударе, как правило, не сильно отскакивают от препятствия.