ищу скрипт для 3ds max, который назначит material ID

Автор
Сообщение
На сайте c 12.04.2011
Сообщений: 114

Добрый вечер. Ищу скрипт для 3ds max, который назначал бы материал ID в зависимости от ориентации полигона в пространстве (есть несколько деталей (вырезка из фанеры), торцы которых должны отличаться от основного материала). Может быть есть такой?

p/s например есть бокс, надо чтобы скрипт автоматически сделал верхний и нижний полигон с  id 1, все что между ними с id 2. Только этот бокс может быть по всякому повернут в пространстве.

На сайте c 19.02.2011
Сообщений: 3539
Москва
Для этого не обязательно менять ID. Есть карта falloff, которая идет в качестве маски. Вам нужно Towards/away local Z axis
На сайте c 07.10.2010
Сообщений: 1709
Минск

Ксожалению, видимо таблица рейтига важнее возможности вставки кода на фрум или прикрепления файлов, поэтому так выложу:

poly_count = (Polyop.getNumFaces $)

currentTM = $.transform

$.transform = (matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])

for i = 1 to poly_count do( 

   nm_array = #()    

nm = polyop.getFaceNormal $ i    

for j = 1 to 3 do    ( 

       append nm_array (abs nm[j])

    )    

max_value = amax nm_array    

max_value_index = finditem nm_array max_value    

--polyop.setFaceMatID $ i max_value_index    

case max_value_index of    (        

1: polyop.setFaceMatID $ i 1        

2: polyop.setFaceMatID $ i 2        

3: polyop.setFaceMatID $ i 3

    )

)

$.transform = CurrentTM

Тут всё просто - 1 - х, 2 - y, 3 - z. Case выбирает какая из осей нормали полигона ближе к данной глобальной оси и назначает ИД. ИД находятся после i, можете назначить 2м осям одинаковые ИД, будет окрашивать все вертиклаьные поверхности в 1 цвет, все горизонтальные - в другой.

Естественно, объект должен быть выделен и конвертирован в эдит поли.

На сайте c 12.04.2011
Сообщений: 114
Цитата Sean:

Ксожалению, видимо таблица рейтига важнее возможности вставки кода на фрум или прикрепления файлов, поэтому так выложу:

poly_count = (Polyop.getNumFaces $)

currentTM = $.transform

$.transform = (matrix3 [1,0,0] [0,1,0] [0,0,1] [0,0,0])

for i = 1 to poly_count do( 

   nm_array = #()    

nm = polyop.getFaceNormal $ i    

for j = 1 to 3 do    ( 

       append nm_array (abs nm[j])

    )    

max_value = amax nm_array    

max_value_index = finditem nm_array max_value    

--polyop.setFaceMatID $ i max_value_index    

case max_value_index of    (        

1: polyop.setFaceMatID $ i 1        

2: polyop.setFaceMatID $ i 2        

3: polyop.setFaceMatID $ i 3

    )

)

$.transform = CurrentTM

Тут всё просто - 1 - х, 2 - y, 3 - z. Case выбирает какая из осей нормали полигона ближе к данной глобальной оси и назначает ИД. ИД находятся после i, можете назначить 2м осям одинаковые ИД, будет окрашивать все вертиклаьные поверхности в 1 цвет, все горизонтальные - в другой.

Естественно, объект должен быть выделен и конвертирован в эдит поли.

большое спасибо, буду пробовать

Читают эту тему: