Удалить неиспользуемые материалы из сеток 3DS-Max - PullRequest
1 голос
/ 28 марта 2012

У меня довольно большая 3DS-сцена с множеством отдельных сеток - пару тысяч.Каждая сетка должна использовать только один материал, т.е. все треугольники в этой сетке используют один и тот же материал, назначенный сетке.Кажется, что это так, но у нас есть много случаев, когда есть несколько подматериалов, назначенных мешу, которые фактически не используются в этом меше.

Это хорошо в 3DS, но мы экспортируем нашу сцену для использования в3D-движок в реальном времени, и это портит экспорт ... поэтому я подумал, могу ли я написать скрипт, который будет действовать как для всей сцены, так и для выбранных в данный момент сеток и удалит все [под] -материалы из каждой сеткикоторые не используются.

Я не художник, надеюсь, это имело смысл, и я правильно понял всю свою терминологию.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Как мы узнаем, какой материал является правильным из многосискового материала? Если это всегда только первый материал, вы можете сделать что-то вроде

-- walk over all geometry find which has multiSub and apply first material
for o in geometry where isKindOf o.material multimaterial do o.material = o.material.material1

Edit1: Если мы предположим, что грань 1 является ведущей для идентификатора материала, мы можем сделать

-- walk over all geometry find which has multiSub and apply first material
for o in selection where isKindOf o.material multimaterial do 
(
    -- Get face material ID from face 1
    local id = getFaceMatID o.Mesh 1
    -- Assign that material
    o.material = o.material[id]
)
0 голосов
/ 10 января 2017

Попробуйте:

for i in 1 to meditMaterials.count where (MeditUtilities.isMaterialInUse meditMaterials[i] == false) do meditMaterials[i] = Standard()
ATSOps.Refresh()
freeSceneBitmaps()

Или вы также можете обнаружить текстуры на модификаторах, как это:

modTexMaps = #()
for obj in geometry where obj.modifiers.count != 0 do
(
for m = 1 to obj.modifiers.count do
(
    for p in (getpropnames obj.modifiers[m]) \
    where isKindOf (tex = getproperty obj.modifiers[m] p) texturemap do 
    (
        append modTexMaps tex
    )
)
)
modTexMaps
...