我有一个相当大的3DS场景,有许多单独的网格 - 几千个。每个网格应仅使用单个材质,即该网格中的所有三角形使用分配给网格的相同材质。这似乎是这种情况,但是我们有很多情况下,还有一些分配给网格的子材料在网格中实际上没有使用。
这在3DS中很好,但是我们导出我们的场景用于实时3D引擎,这会弄乱导出...所以我想知道我是否可以编写一个脚本,它可以作用于整个场景,或者当前选择的网格物体将删除每个网格中未使用的所有[子]材料。
我不是艺术家,我希望这是有道理的,我的所有术语都是正确的。
答案 0 :(得分: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]
)
答案 1 :(得分:-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