Render.ru

Выделить источники света, освещающие модель

Рейтинг
638
#1
Есть модель, которую часть источников освещает, часть не освещает (через Include/Exclude). Как выделить те источники, которые освещают модель?
 

Alex7

Знаток
Рейтинг
56
#2
Как конкретно эту задачу решить не знаю (может быть скрипт написать какой-то), но если объектов, для которых это надо делать мало, то можно попробовать использовать Named Selection Set. Создать для данного объекта Selection Set источников его освещающих.
 
Рейтинг
638
#4
мне в общем-то надо по разу для модели выделить эти источники - для подготовки к припечке. и потом больше их выделять не надо. сеты создавать предварительно будет дольше, чем один раз выделить источники. у сетов в принципе есть недостаток, если источник обновляется.
но спасибо за советы..
 

GoodMan

Мастер
Рейтинг
260
#6
objArr = #()

for i in $objects where superclassOf i == light do
(
for n in $selection do
(
-- search and find object in <Exclude> list:
try(
if findItem i.ExcludeList n == 0 do append objArr i
)catch()

-- search and find object in <Include> list:
try(
if findItem i.IncludeList n != 0 do append objArr i
)catch()
);
);

select objArr
Скрипт также работает с множеством объектов и определяет освещает ли ИС объект не только по Exclude списку но и по Include списку в ИС-е..

Как его запустить:
1. Меню MaxScript->New Script;
2. В появившееся окно вставляем текс скрипта;
3. Жмем Ctrl+E или File->Evaluate All;

По желанию скрипт можно превратить в кнопку - выделив текст и перетащив его на любой тоолбар..
 
Рейтинг
638
#7
Спасибо, Гудман!
У тебя сейчас ищется в двух списках сразу. То есть если источник освещает объекты из своего exclude листа, но в его include листе есть мой объект, то такой источник тоже выделяется.

Гудман, все равно большое спасибо, ты реально много чем помог. :)
 

GoodMan

Мастер
Рейтинг
260
#8
Ну.. если например надо отключить Include лист - то в скрипте поставить на против каждой из строчек последнего блока кода по два дефиса:

-- search and find object in <Include> list:
--try(
--if findItem i.IncludeList n != 0 do append objArr i
--)catch()


Такие строчки будут восприниматься как комментарий и не учитываться при интерпретации скрипа..
 
Сверху