Render.ru

Как сохранить мульти-материал при использо

4D_designer

Знаток
Рейтинг
37
#1
Доброго времени суток!

В процессе написания скрипта возникла следующая проблема: нужно к "пустому" editable mesh "приаттачить объект", сохранив при этом материал объекта и его ID_mat. Если материал простой, то все элементарно. Но если материал - мультиматериал, то начинаются проблемы. Суть заключается в том, что если количество ID_mat не совпадает с количеством подматериалов в материале, то портится либо то, либо другое. То есть Макс "подгоняет" одно под другое. При операции meshop.attach (или attach) "портится" материал. Его можно заранее сохранить, но потом при присвоении его новому объекту "портятся" уже ID_mat.

Текст скрипта приблизительно такой:


Вариант1

-- test - объект, который аттачим. Например, Box.

current_name = $test.name --сохраняем имя объекта
null_object = editable_mesh() -- создаем нулевой объект
convertToMesh $test -- конвертируем присоединяемый объект в меш
meshop.attach null_object $test -- аттачим. . И ПОРТИМ МАТЕРИАЛ. ЕСЛИ КОЛИЧЕСТВО ПОДМАТЕРИАЛОВ В МАТЕРИАЛЕ БОЛЬШЕ, ЧЕМ КОЛИЧЕСТВО ID_MAT, ТО МАКС ПРОСТО УБИВАЕТ "ЛИШНИЕ" ((( !!!
null_object.name = current_name -- называем его именем исходного объекта


Вариант2

-- test - объект, который аттачим. Например, Box.

current_name = $test.name --сохраняем имя объекта
current_material = $test.material --сохраняем материал объекта
theMat = copy current_material -- делаем копию материала ХОТИМ СОХРАНИТЬ МАТЕРИАЛ!!!
$test.material = theMat -- присваиваем обратно объекту, чтобы не испортить при аттаче исходный материал
null_object = editable_mesh() -- создаем нулевой объект
convertToMesh $test -- конвертируем присоединяемый объект в меш
meshop.attach null_object $test -- аттачим
null_object.name = current_name -- называем его именем исходного объекта
null_object.material = current_material -- хотим вернуть обратно его материал. ЕСЛИ В ОБЪЕКТЕ НЕТ ФЭЙСОВ С ID_mat=1, ТО ПОРТИМ ВСЕ ID_mat!!!! ((((


Если кто-то уже сталкивался с подобной проблемой - подскажите, что делать! Заранее спасибо!)))
 

igorznag

Мастер
Рейтинг
103
#2
Попробуйте такой вариант:
Код:
current_name = $test.name 
current_material = $test.material 
--theMat = copy current_material 
--$test.material = theMat 
$test.material = undefined
null_object = editable_mesh()
convertToMesh $test 
meshop.attach null_object $test 
null_object.name = current_name 
null_object.material = current_material
 

4D_designer

Знаток
Рейтинг
37
#3
Попробуйте такой вариант:
current_name = $test.name
current_material = $test.material
--theMat = copy current_material
--$test.material = theMat
$test.material = undefined
null_object = editable_mesh()
convertToMesh $test
meshop.attach null_object $test
null_object.name = current_name
null_object.material = current_material
Получилось! Спасибо огромное!
 
Сверху