Гораздо удобнее использовать «строчный» стиль:
sphere -р 0 0 0 -ах 0 1 0 -ssw 0 -esw 360 -г 1 -d 3 -s 8 -nsp 4 -ch 1; string $l[] = 'Is -si -cam'; Однако, традиционные функции типа rand, noise или sin по привычке удобно вызывать с помощью аргументов в скобках, поэтому я обычно смешиваю стили в своих программах. Если вы хотите придерживаться MEL-овского стиля, можете переписать наш цикл как
string $list[] = Is -si'; string $item; for($item in $list)
(
setAttr ($item+”.scaleY”) 'rand 3 7'; Комментарии Иногда удобно комментировать свои действия в самом скрипте. Для этого используются комментарии. Как только MAYA встречает в какой-нибудь строке скрипта две косые черты «//», она игнорирует всё, что написано после них и до конца строки. Если две косые черты стоят в начале строки, эта строка игнорируется, и вы можете писать в этой строке что угодно: полезные замечания или всяческие глупости.
Добавление вращения Если все кубы выбраны, вы всегда можете вернуть их в исходный размер просто задав в Channel Box значение scaleY=1.
Добавьте пару строк в наш мощный скрипт для добавления случайных размеров по осям X и Z.
string $list[] = 'Is -si'; string $item; for($item in Slist)
£
setAttr ($item+”.scaleY”) (rand(3,7)); setAttr ($item+”.scaleX”) (rand(0.3,0.8)); setAttr ($item+”.scaleZ”) (rand(0.3,0.8));
}
Теперь боковые размеры всех кубов случайным образом задаются в диапазоне от 0.3 до 0.8.
Добавим вращения нашим урбанистическим объектам. Вставьте еще одну строку в тело цикла:
string $list[] = 'Is -si'; string $item;
for($item in $list)
{
setAttr ($item+”.scaleY”) (rand(3,7)); setAttr ($item+”.scaleX”) (rand(0.3,0.8)); setAttr ($item+”.scaleZ”) (rand(0.3,0.8));
setAttr (Sitem-*-”. rotateY”) (rand(-30,30));
}
Объекты повернутся на случайный угол вокруг вертикали в диапазоне от -30 до 30.
Далее вы можете продолжать издеваться над полученным «микрорайоном» в соответствии с вашими архитектурными пристрастиями. Помните, что Undo работает даже для выполняемых скриптов.
Чтобы, например, немного подвигать объекты в горизонтальной плоскости, добавьте еще одну строку:
string $list[] = Is -si'; string $item; for($item in $list)
I
setAttr ($item+”.scaleY”) (rand(3,7)); setAttr ($item+”.scaleX”) (rand(0.3,0.8)); setAttr ($item+”.scaleZ”) (rand(0.3,0.8));
setAttr ($item+”.rotateY”) (rand(-30,30));
move -r (rand(-0.5,0.5)) 0 (rand(-0.5,0.5)) $item;
J
Пустые строки вставлены здесь для удобства чтения, MAYA же их просто игнорирует.
Так как команда setAttr задает абсолютные значения атрибутов, пришлось использовать команду move с флагом -г, чтобы задать смещение относительно текущей позиции объектов. Пытливые умы, конечно, сразу заметят, что весь скрипт можно было бы переписать в более компактной и даже более понятной форме:
string $list[] = Is -si’; string Sitem; for($item in Slist)
{
scale (rand(0.3,0.8)) (rand(3,7)) (rand(0.3,0.8)) Sitem; rotate 0 (rand(-30,30)) 0 Sitem;
move -г (rand(-0.5,0.5)) 0 (rand(-0.5,0.5)) $item;
}
Здесь сразу понятно, что с помощью команд move, rotate, scale трансформируется очередной объект в списке, имя которого содержится в переменной $item. Но если бы я сразу написал такой простой скрипт, как бы я тогда рассказал про составление имени произвольного атрибута с помощью склеивания строк типа: ($item+”.scaleY”)?l