Применение модификаторов
Введение
Итак, вы уже умеете создавать геометрические объекты средствами MAXScript. В этой главе вы научитесь создавать и модифицировать источники света, камеры и материалы.
Приступая к работе в пользовательском интерфейсе 3dsMax, вы обычно настраиваете средство визуализации и пользуетесь его настройками в течение всей работы. В этой главе поясняется, как средство визуализации настраивается в MAXScript для автоматизации процесса визуализации.
Кроме того, вы ознакомитесь с обратными вызовами и методом вызова сценария, когда на сцене происходит определенное событие. И наконец, вы научитесь формировать случайные значения средствами MAXScript.
Все, что создается в MAXScript, считается объектом или элементом определенного типа, даже при отсутствии физического проявления. Модификаторы также считаются объектами, хотя они и не являются трехмерными объектами, а скорее относятся к элементам, обладающим определенными свойствами, которые можно устанавливать и изменять аналогично трехмерным объектам сцены. Об этом различии уже упоминалось в главе 4.
Сначала создается объект-модификатор, а затем устанавливаются его свойства. Для того чтобы создать и применить модификатор, выполните следующее упражнение.
1. Установите 3dsMax в исходное состояние.
2. Создайте модификатор Bend с помощью конструктора bend и укажите угол сгибания, введя в приемнике команд следующую строку кода:
b = bend angle:90
Переменная b содержит ссылку на модификатор Bend, тогда как угол сгибания (angle) относится к свойствам данного модификатора. Теперь модификатор можно применить к любому трехмерному объекту.
Работа с объектами в MAXScript
3. Создайте цилиндр и установите число его сегментов по высоте равным 2C. чтобы лучше видеть воздействие на него модификатора. Для этого введите следующую строку кода:
c = cylinder height:50 heightsegs:20
4. Примените модификатор Bend к цилиндру. Для этого введите следующую строку кода:
addmodifier c b
В этой строке кода модификатор применяется к цилиндру с помощью метода addmodifier, после имени которого указываются ссылка на цилиндр и ссылка на данный модификатор. А поскольку конкретная ось действия модификатора не указывается, то по умолчанию в 3dsMax используется ось Z.
5. Этот же сценарий можно было бы написать короче. Введите следующий фрагмент кода:
cc = cylinder pos: [100, 0 ,0] height:50 heightsegs:20
addmodifier cc (bend angle:90)
В последнем пункте предыдущего упражнения конструктор модификатора был помещен в круглые скобки. Это еще один пример передачи выражения в виде аргумента функции. В данном выражении создается объект-модификатор, который затем применяется к цилиндру.
Свойства модификатора можно изменить тремя способами.
• Присвоить явную ссылку на модификатор. В приведенном выше упражнении переменной b была присвоена ссылка на модификатор. После этого свойства переменной b могут быть установлены с помощью таких выражений. как следующее:
b.angle = 80
Глава 6
При установке свойства объект автоматически обновляется в видовом окне. Так, в приведенном выше упражнении это оказало влияние не на новый, а на исходный цилиндр, поскольку к нему был применен модификатор Bend, ссылка на который делается в переменной b.
• Изменить свойства модификатора посредством объекта, к которому он применяется. Если используется метод addmodifier, модификатор исполняет роль свойства геометрического объекта. Изменения могут быть внесены в модификатор следующим образом:
cc.bend.angle = 75
Доступ в этой строке кода осуществляется сначала к свойству bend цилиндра cc, а затем к свойству angle модификатора Bend. Таким способом удобно пользоваться в отсутствие явной ссылки на модификатор, как в примере сокращенной записи кода сценария из п.5 приведенного выше упражнения.
• Получить доступ к массиву свойств модификаторов, применяемых к объекту. Каждый объект имеет свойство .modifiers, возвращающее массив модификаторов, применяемых к данному объекту. Первым элементом данного массива является модификатор, находящийся на вершине стека в том виде, в каком он представлен на панели команд Modify. Вторым элементом массива является следующий вниз по стеку модификатор и так далее до последнего элемента массива, который соответствует модификатору, находящемуся на дне стека. Если воспользоваться упоминавшимся ранее примером цилиндра, то можно написать следующее:
c.modifiers[1].angle
В этой строке кода осуществляется доступ к свойству angle модификатора Bend. Такой способ доступа к свойствам модификатора удобен для выполнения операций над всеми модификаторами, применяемыми к объекту.