1

我有一个相当大的 3DS 场景,其中包含许多单独的网格 - 几千个。每个网格应该只使用一种材质,即该网格中的所有三角形都使用分配给网格的相同材质。这似乎是这种情况,但我们在很多情况下也有几个子材质分配给一个网格,这些子材质实际上并未在该网格中使用。

这在 3DS 中很好,但我们导出场景以在实时 3D 引擎中使用,这会弄乱导出......所以我想知道我是否可以编写一个脚本来作用于整个场景或当前选择的网格并将从每个未使用的网格中删除所有 [sub]-materials。

我不是艺术家,我希望这是有道理的,并且我的所有术语都是正确的。

4

2 回答 2

2

我们如何从 multisb 材料中知道哪种材料是正确的?如果它总是第一个材料,你可以做类似的事情

-- 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 领先于材质 ID,我们可以这样做

-- 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]
)
于 2012-03-29T19:42:32.017 回答
-1

试试这个:

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
于 2017-01-10T14:26:17.920 回答