[MAYA腳本] 根據(jù)材質(zhì)分離OBJ文件腳本

MAYA導(dǎo)入OBJ的時候經(jīng)常會遇到這種即使勾選了多重物體之后導(dǎo)入的模型也是相連在一起的情況,

可以點擊Mesh→Seperate將模型按照相連的面片分離,

但是遇到那種分離之后有成百上千零件的物體想再把同類的部分合并起來就麻煩了,比如這只冰箱

實際上其他軟件導(dǎo)出的obj如果設(shè)置正確都會一個mtl文件

如果maya讀取到了這個文件的話就會把物體的材質(zhì)組信息一起導(dǎo)入進(jìn)來,我們可以根據(jù)這個材質(zhì)組來選擇物體的面進(jìn)行分離(當(dāng)然你也可以選擇fbx或者abc格式)


一個一個分離太麻煩了,我們輸入腳本來按照材質(zhì)自動將模型分離好,復(fù)制以下代碼
#The?selected?item?must?be?Obj?by?imported
import?maya.cmds?as?cmds
def?seperateObj(merger):
????mergerShape?=?cmds.listRelatives(merger,?s=1)[0]
????allSG?=?cmds.listSets(o=mergerShape,?type=1)
????
????for?sg?in?allSG:
????????locals()[sg]=[]
????
????components?=?cmds.polySeparate(merger,?ch=0)
????grp?=?cmds.listRelatives(components[0],?p=1)
????
????for?element?in?components:
????????sgname?=?cmds.listSets(o=cmds.listRelatives(element,?s=1)[0])[0]
????????locals()[sgname].append(element)
????????
????for?sg?in?allSG:
????????if?len(locals()[sg])==1:
????????????cmds.sets(locals()[sg][0],?e=1,?forceElement?=?sg)
????????????cmds.rename(locals()[sg][0],?(merger+"_"+sg))
????????
????????else:
????????????part?=?cmds.polyUnite(locals()[sg],?ch=0,?n=(merger+"_"+sg))
????????????cmds.sets(part,?e=1,?forceElement?=?sg)
????????????cmds.parent(part,?grp)
for?obj?in?cmds.ls(sl=1):
????seperateObj(obj)
打開腳本編輯器,粘貼到python標(biāo)簽頁,選中需要分離的物體點擊執(zhí)行

OK,分離好了,每個物體的名字是未分離物體的名字加上屬于它的著色組名字作為后綴

也支持多選物體一起分離


不想每次都打開腳本編輯器執(zhí)行的話可以選擇保存到工具架把腳本變成按鈕

Tip:不推薦在maya里進(jìn)行面給材質(zhì)這樣的操作
(發(fā)現(xiàn)有時候會遇到不存在于任何面上的材質(zhì)導(dǎo)致腳本失效,更新了一下代碼,詳情在這個最后面https://www.bilibili.com/read/cv6783312)