欢迎光临散文网 会员登陆 & 注册

[MAYA脚本] 根据材质分离OBJ文件脚本

2023-07-22 11:34 作者:电磁炮真是太可爱啦  | 我要投稿

优化了下https://www.bilibili.com/read/cv6298807/UP提供的代码 评论区发送代码会改变字符串, 本来是英文的()的括号会变成这个【】 导致复制也运行不了

以下是代码

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)


这个是优化后的

下面是给工作中需要用到这个代码的魔改版,会根据用户的材质球用户自定义名字赋予分离的模型,比如用户的材质球名字是 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脚本] 根据材质分离OBJ文件脚本的评论 (共 条)

分享到微博请遵守国家法律