Источники света
Источники света и камеры
Источники света и камеры являются подклассами класса Node. Все, что было сказано в главе 4 в отношении наследования классов, распространяется и на источники света, камеры и геометрические объекты.
В MAXScript можно создать любой тип источника света из тех, которые доступны в пользовательском интерфейсе 3dsMax. У каждого типа источника света имеется свой конструктор. Например, конструктор свободно направленного источника света выглядит следующим образом:
directionalLight()
Работа с объектами в MAXScript
Если ввести приведенную выше строку кода в окне приемника команд, в ответ появится результат, очень похожий на тот, который был получен для геометрического объекта:
$Free_Directional_Light:FDirectOl @ [0.000000, 0.000000, 0.000000]
В этом результате представлены класс объектов Free_Directional_Light (обозначаемый также как Directionallight), путевое имя объекта $FDirect01 и местоположение объекта в точке мирового пространства с координатами [0,0,0].
Полный перечень типов источников света, которые можно создавать средствами MAXScript, приведен в следующем разделе справочного руководства по MAXScript: MAXScript Language Reference ⇨ 3dsMax Objects ⇨ Node: MAXWrapper ⇨ Node Subclasses ⇨ Light: Node (Справочник по языку MAXScript ⇨ Объекгы 3dsMax ⇨ Класс Node: MAXWrapper ⇨ Подклассы класса Node ⇨ Класс Light: Node).
Все доступные типы источников света перечислены в книгах Standard Lights и Photometric Lights данного справочного руководства, посвященных стандартным и фотометрическим источникам света соответственно.
Многие свойства источников света являются общими для них. К ним относятся следующие свойства:
<light>.rgb- цвет RGB
<light>.excludeList - массив узлов, исключаемых из световых эффектов <light>.projectorMap - карта, хранящаяся в объекте textureMap
Полный перечень общих свойств источников света приведен в разделе "Light Common Properties, Operators, and Methods" (Общие свойства, операторы и методы источников света) справочного руководства по MAXScript.
Для того чтобы исключить объекты из сферы влияния источника света, выполните следующее упражнение.
1. Установите 3dsMax в исходное состояние.
2. Введите в новом окне редактора MAXScript Editor следующий фрагмент кода, чтобы создать на сцене несколько объектов:
for i = -1 to 1 do
(
box pos: [i*40, 0, 0]
sphere pos: [i*40, 0, 60]
)
myPlane = plane length:150 width:150
Глава 6
3. Создайте всенаправленный источник света с устанавливаемыми по
умолчанию свойствами и задайте его положение:
myLight = omnilight pos:[0, -100, 100] castshadows: on
Свойство excludeList воспринимает массив узлов. В данном упражнении необходимо исключить сферы из освещения всенаправленным источником света.
4. Создайте массив сферических узлов:
sphereArray = for obj in objects \
where (classof obj == sphere) collect obj
В приведенном выше цикле for возвращается массив сферических объектов. В данном случае использована специальная форма синтаксиса цикла for, в которой вместо ключевого слова do, указывающего тело цикла, введен оператор collect, предписывающий создать совокупность объектов, удовлетворяющих заданному условию. Это условие также указывается в специальной форме цикла for, где оно является частью определения данного цикла. Нетрудно заметить, в чем именно состоит проверка: если объект является сферой, возвращается логическое значение true. Это довольно компактная и удобочитаемая форма цикла for.
5. Установите свойство excludeList источника света следующим образом: myLight.excludeList = sphereArray
6. Вычислите сценарий.
7. Визуализируйте сцену.
Теперь на сцене видны только параллелепипеды.
Работа с объектами в MAXScript
Как упоминалось выше, каждый источник света имеет свойство .projectorMap. Далее вам предстоит присвоить этому свойству текстурную карту. Существует более 30 типов текстурных карт, в том числе карты планеты, мрамора и клетчатого рисунка. Как только будет создан объект textureMap, его можно присвоить свойству .projectorMapисточника света.
Примечание. В свойствах источников света можно также указывать растровые текстуры, но из-за большого числа свойств Объекта BitmapTexture с ними нелегко обращаться. Более подробные сведения об этом приведены в разделе "BitmapTexture: TextureMap", справочного руководства по MAXScript.
Для изучения свойства .projectorMap выполните следующее упражнение.
1. Продолжите работу с предыдущим примером сценария, удалив со сцены все объекты. Введите две следующие строки кода в конце предыдущего сценария, чтобы создать текстурную карту и назначить ее для источника света:
marbleMap = marble Vein_Width: 0.1 size: 12
myLight.projectorMap = marbleMap
В этих строках кода изменены свойства ширины и размера карты, чтобы сделать мраморный эффект более заметным. Все свойства объекта textureMap могут быть установлены по отдельности. В данном случае установлены только два из них, а остальные используются в том виде, в каком они установлены по умолчанию.
В видовом окне текстурная карта не наблюдается, но после визуализации сцены она должна выглядеть так, как показано на приведенном ниже рисунке.
С объектами textureMap вам еще предстоит поработать в этой главе, когда речь пойдет о материалах.
Глава 6