Источники света

Источники света и камеры

Источники света и камеры являются подклассами класса 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