|   Регистрация (Registration)   Вход  



1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9

Управление освещением в Xpresso

Использование Xpresso для настройки освещения может оказать большую помощь особенно если вы используете большое количество источников освещения, которыми надо управлять.
Цель данной конструкции создать коридор, освещенный определенным числом источников света, управление которыми зависит от расстояния до объекта, который движется по коридору. Представим комнату, которая будет автоматически освещать те свои части, где вы проходите. Простое включение и выключение света будет малость страшновато и вообще нам не нужен коридор всегда совершенно темный.
Обычно существует несколько путей решения этой проблемы. Мы покажем 2 из них.
Первый - создать Xpresso конструкцию для каждого источника света, а потом управлять ими.
Второй - создать одну конструкцию, которая будет управлять всеми источниками.
По сути оба они работают одинаково, главное отличие - адресация источников света. Первая конструкция более портативна и поэтому ее проще использовать повторно, в то время как вторая проще в настройке поскольку понадобиться изменить только одну конструкцию.
Начнем с реализации первого метода, после чего готовую конструкцию преобразуем в реализацию второго метода.
Базовая сцена.

Создадим Xpresso expression tag в первом источнике света и перетащим сам источник и объект сфера (Sphere) в Xpresso editor. Нам потребуется глобальное положение обоих объектов чтобы определить растояние между ними. Расстояние можно вычислить как разность радиус-векторов объектов с последующим преобразованием в действительное число (Info) или используя нод Distance (расстояние). В нашем примере мы будем использовать нод Distance.
Наша конструкция должна быть похожа на эту:
Теперь мы должны преобразовать расстояние в яркость источника света (связать эти 2 параметра). Взяв за основу идею о промежутке значений мы говорим о создании нода Result и соединении его с выходом нода Distance. Переключимся в Animation Refesh в Xpresso Calculate menu чтобы получить результат исходя из реальных "живых" значений.
Подвинем сферу вдоль ее z-оси и протестируем конструкцию. Если Вы не поменяли значения X, Y в положении сферы минимальное расстояние должно быть приблизительно 140 единиц (units), это и есть то минимальное расстояние которое даст максимальную яркость источника света. Теперь продвинем сферу вдоль ее z-оси до следующего источника света. Расстояние должно получится около 330 единиц. Это расстояние должно давать минимальную яркость источника света, от которого мы удалились.
Поскольку мы не хотим чтобы источник света становился полностью темным мы будем использовать промежуток от 20% до 100% (0.2 - 1.0). Для преобразования промежутка (Info) 330/140 в 20%/100% можно использовать несколько математических нодов или нод Range Mapper (преобразователь промежутков). Мы будем использовать нод Range Mapper, поскольку именно для этого он и предназначен. Заменим нод Result нодом Range mapper. Теперь надо взять под контроль яркость второго источника света. Просто перетащите его из Оbject Manager-а и разместите справа от Range Mapper. Вы можете создать соединение протянув коннектор от выхода Range Mapper и подтащив его к голубому квадратику в левом верхнем углу нода Light (источник света).
Установите параметр Output Range нода Range Mapper в проценты (Percent), а значение параметра Clamp Lower (Info) в позицию включено так же как и параметра Clamp Upper. Поскольку наши промежутки инвертированы (обратно пропорциональны - большему значению соответсвует меньшее) включите опцию Reverse. Мы не будем использовать опцию Spline в этом примере поэтомы выключите ее. Введите значения границ промежутков в соответствующие поля.
Теперь один источник света работает как и намечалось (сцена). Создайте анимацию движения сферы от одного конца коридора к другому для того, чтоб можно было протестировать нашу конструкцию (анимация).
Скопируйте эту конструкцию к другим источникам света и сделайте сперва несколько изменений. Надо изменить ссылку на источник света (Lights Object node). Сейчас она установлена в значение light1 и копирование Xpresso tag в другие источники света это значение не поменяло. Решение в данном случае таково - использовать относительные ссылки (Relative reference). Выберите оба нода Lights и измените ссылочный тип (reference type) с абсолютного (absolute) на относительный (relative).
С этого момента эти ноды этих объектов будут ссылаться на объект, в котором заключен Xpresso tag, не обращая внимания на тип объекта. Если Вы скопировали tag в объект, в котором нет портов входа/выхода их значения будут интерпретироваться как неустановленные (undefined). Т.е. значение яркости (Brightness) не будет вычислено для объекта куб (Cube).
Теперь аккуратно создадим копии Xpresso tag для всех остальных источников света изпользуя Ctrl+drag (сцена) (анимация).

Созданная нами конструкция имеет несколько недостатков. Если Вы захотите изменить расстояние или яркостный интервал Вы должны будете внести изменения в каждый отдельный Xpresso tag или заменить все эти таги одним. Чтобы облегчить эту задачу сначала создадим возможность доступа к значениям вне Xpresso редактора одним из методов описанных ранее здесь. Это позволит использовать множественный выбор источников света (при использовании пользовательских полей User Data) или тагов (XGroup Ports) и изменять все значения одновременно. Однако мы по прежнему связаны условием один Xpresso tag на каждый источник света (сцена).
Чтобы избежать этого мы будем использовать итератор (счетчик) для повторения одних и тех же операций для каждого источника света. В данном случае используются два итератора. Итератор Hierarchy и итератор Object List. Hierarchy позволяет пересчитать всех "детей" наших Null - источников света, которые могут стать проблемой если вы используете световую конструкцию со сложной иерархией. В этом случае наилучший выбор итератор списка(List iterator), который позволит просмотреть все объекты, находящиеся в списке.
Удалите все Xpresso tags кроме Light1, потом создайте нод List iterator. Поскольку мы начинаем конструкцию с Null объекта измените ссылочный тип на абсолютный, в противном случае изменение Null объекта внесет помехи в изменение яркости. Теперь передвиньте таг из объекта Light1 в Null объект названный Lights.
Теперь соедините выход (Instance output port) объекта List iterator со входами двух нодов источников света. Этот способ ссылки изменит все объекты в списке объектов. Чтобы упростить конструкцию будем преобразуем все параметры, которые могут потребоваться для тонкой настройке в свойства Xpresso tag. (Info). Также надо изменить порядок следования портов перетаскиванием имен портов. Это упростит конструкцию сделав ее более понятной. (сцена)

Вы можете легко изменять эту конструкцию так чтобы вместо источников света становящихся ярче автоматически открывались и закрывались двери. Просто санимируйте открытие(вращение) двери вместо изменени яркости источника света.

Помните, что всегда сущесвует более одного пути решения проблемы.
Старайтесь находить альтернативные пути решения, это поможет Вам когда придется туго и нужно будет сделать что-то в короткий срок или при других ограничениях.

1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9


  К списку уроков

 новости   plugin db   а-чем-а-как   форум   ссылки   о проекте  
Вся ответственность за содержание материалов, опубликованных на сайте, лежит на их авторах.
Использование материалов, опубликованных на сайте, разрешено только со ссылкой на источник.

Copyright © 2003-2011 C!NEMAXiMUS