Render.ru
Поддержать

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

Sergey Shevelev

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

Alex7

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

ShMon

Активный участник
Рейтинг
16
еще вариант - слои. Первый предложенный правда лучше

Sergey Shevelev

Мастер
Рейтинг
638
мне в общем-то надо по разу для модели выделить эти источники - для подготовки к припечке. и потом больше их выделять не надо. сеты создавать предварительно будет дольше, чем один раз выделить источники. у сетов в принципе есть недостаток, если источник обновляется.
но спасибо за советы..

GoodMan

Мастер
Рейтинг
275
Скриптом наверняка очень простым - это решается..

GoodMan

Мастер
Рейтинг
275

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;

По желанию скрипт можно превратить в кнопку - выделив текст и перетащив его на любой тоолбар..

Sergey Shevelev

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

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

GoodMan

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

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


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