[MAYA腳本] 根據(jù)材質(zhì)分離OBJ文件腳本
優(yōu)化了下https://www.bilibili.com/read/cv6298807/UP提供的代碼 評論區(qū)發(fā)送代碼會改變字符串, 本來是英文的()的括號會變成這個【】 導(dǎo)致復(fù)制也運行不了
以下是代碼
import maya.cmds as cmds
def separate_obj(merger):
merger_shape = cmds.listRelatives(merger, s=True)[0]
all_sg = cmds.listSets(object=merger_shape, type=1)
for sg in all_sg:
locals()[sg] = []
components = cmds.polySeparate(merger, ch=False)
parent_grp = cmds.listRelatives(components[0], parent=True)
for element in components:
sg_name = cmds.listSets(object=cmds.listRelatives(element, s=True)[0])[0]
locals()[sg_name].append(element)
for sg in all_sg:
if len(locals()[sg]) == 1:
cmds.rename(locals()[sg][0], (merger + "_" + sg))
cmds.sets(locals()[sg][0], forceElement=sg)
else:
part = cmds.polyUnite(locals()[sg], ch=False, n=(merger + "_" + sg))
cmds.sets(part, forceElement=sg)
cmds.parent(part, parent_grp)
for obj in cmds.ls(selection=True):
separate_obj(obj)

下面是給工作中需要用到這個代碼的魔改版,會根據(jù)用戶的材質(zhì)球用戶自定義名字賦予分離的模型,比如用戶的材質(zhì)球名字是 H2333_LOW 分離模型后名字為H2333_LOW_Geo,

以下是代碼
import maya.cmds as cmds
def separate_obj(merger):
merger_shape = cmds.listRelatives(merger, s=True)[0]
all_sg = cmds.listSets(object=merger_shape, type=1)
for sg in all_sg:
locals()[sg] = []
components = cmds.polySeparate(merger, ch=False)
parent_grp = cmds.listRelatives(components[0], parent=True)
for element in components:
sg_name = cmds.listSets(object=cmds.listRelatives(element, s=True)[0])[0]
locals()[sg_name].append(element)
for sg in all_sg:
if len(locals()[sg]) == 1:
obj_name = locals()[sg][0]
shader_name = cmds.listConnections(sg + ".surfaceShader")[0]
new_name = shader_name + "_Geo"
cmds.rename(obj_name, new_name)
cmds.sets(new_name, forceElement=sg)
else:
obj_list = locals()[sg]
shader_name = cmds.listConnections(sg + ".surfaceShader")[0]
new_name = shader_name + "_Geo"
part = cmds.polyUnite(obj_list, ch=False, n=new_name)
cmds.sets(part, forceElement=sg)
cmds.parent(part, parent_grp)
for obj in cmds.ls(selection=True):
separate_obj(obj)
?祝您工作愉快
[MAYA腳本] 根據(jù)材質(zhì)分離OBJ文件腳本的評論 (共 條)
