maya绑定,批量约束骨骼链 | 您所在的位置:网站首页 › maya台灯骨骼绑定 › maya绑定,批量约束骨骼链 |
选中根骨骼,在mayapython栏,执行下面代码: # -*- coding: utf-8 -*- """ #根据骨骼链创建控制器, #并对骨骼进行约束。 """ import maya.cmds as cmds import maya.mel as mel def Create_Control(bone='Best'): #根据骨骼的名称和轴向,创建控制器和控制器的组 grp = cmds.group(name =bone+'_CTRL_GRP',em=True) control = cmds.circle(n=bone+'_CTRL',)[0] print(control) cmds.parent(control,grp) cmds.matchTransform(grp,bone) cmds.setAttr(control+'.ry',-90) cmds.setAttr(control+'.sx',5) cmds.setAttr(control+'.sy',5) cmds.setAttr(control+'.sz',5) cmds.select(cl=True) cmds.select(control) mel.eval('DeleteHistory;') mel.eval('FreezeTransformations;') cmds.parentConstraint(control,bone,mo=True) return(control) #对选中的物体进行进行类型判断,筛选出骨骼 all_objects = cmds.ls(sl=True) parent_joints = [] if all_objects: for obj in all_objects: if cmds.nodeType(obj)=='joint': parent_joints.append(obj) else: cmds.warning('the %s is not joint!'%obj) #对筛选出的骨骼进行进一步筛选,分类出有骨骼链的和单骨骼的。 single_joints = [] chain_joints = [] if parent_joints: for joint in parent_joints: jointA= cmds.listRelatives(joint,c=True,typ='joint',ad=True) if jointA: jointA.append(joint) jointA.reverse() print(jointA) chain_joints.append(jointA) else: single_joints.append(joint) #根据骨骼轴向和名称创建控制器,并父子约束 print(single_joints) print(chain_joints) print(len(chain_joints[0])) if single_joints: for sj in single_joints: Create_Control(bone=sj) if chain_joints: for i in range(0,len(chain_joints)): ctrl1 = Create_Control(chain_joints[i][0]) for j in range(0,len(chain_joints[i])-1): ctrl2 = Create_Control(chain_joints[i][j+1]) print(ctrl2) print(ctrl1) cmds.parent(ctrl2+'_GRP',ctrl1) ctrl1=ctrl2 #========================================= 即可自动根据骨骼链的轴向和层级关系,创建出控制器,并完成父子约束。 注意: 1,如果是maya2022以上版本,需要把第一行的:# -*- coding: utf-8 -*-,删掉。 2,请确保骨骼无重名!!!!! 3,代码会在骨骼名称的基础上添加_CTRL后缀,作为控制器的名称。 |
CopyRight 2018-2019 实验室设备网 版权所有 |