1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем 4D_designer 131899, 6 окт 2013.

Модераторы: Savin Denis
  1. 4D_designer

    4D_designer Знаток

    С нами с:
    12.07.2011
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    36
    Доброго времени суток!

    В процессе написания скрипта возникла следующая проблема: нужно к "пустому" 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!!!! ((((


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

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Попробуйте такой вариант:
    Код:
    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
     
  3. 4D_designer

    4D_designer Знаток

    С нами с:
    12.07.2011
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    36
    Получилось! Спасибо огромное!
     
Модераторы: Savin Denis

Поделиться этой страницей