So basically this is the code I have written which is getting the required paired meshes of character in maya and I need to assign similar shader to Leg, Arm and Hand respectively.
And I was able to get meshes with different shaders and I assign the same to both of them.
but I am facing error while renaming them , the first time it's working fine but If i am trying to run this script again , it's chanding name with incremented counts like Hand_MAT1 & Hand_MATSG1.
I even tried deleting existing shaders but that doesn't works as well instead it deleted every information of those meshes.
How can i achieve it ? Any help would be great.
Thanks & Regards
import maya.cmds as cmds
transforms = cmds.ls(transforms=True)
shading_engines = {}
selected_body_parts = ["Arm","Leg","Hand"]
valid_failed_list = []
selected_transforms = []
for transform in transforms:
if "LT_" in transform or "RT_" in transform:
if "Hand" in transform or "Arm" in transform or "Leg" in transform:
shapes = cmds.listRelatives(transform, shapes=True)
if shapes:
shading_engine = cmds.listConnections(shapes[0], type="shadingEngine")
if shading_engine:
shading_engine_name = shading_engine[0]
shader_name = \
cmds.connectionInfo("%s.surfaceShader" % shading_engine_name, sfd=1).split(".")[0]
selected_transforms.append(transform)
shading_engines[transform] = [shading_engine[0], shader_name]
for transform in selected_transforms:
if "LT_" in transform or "RT_" in transform:
paired_transform = transform.replace("LT_", "RT_") if "LT_" in transform else transform.replace(
"RT_", "LT_")
if paired_transform in shading_engines.keys():
if shading_engines[transform][0] != shading_engines[paired_transform][0] or \
shading_engines[transform][1] != shading_engines[paired_transform][1] or \
shading_engines[transform][0] != (transform.split('_')[1] + '_MATSG') or \
shading_engines[transform][1] != (transform.split('_')[1] + '_MAT'):
valid_failed_list.append(transform)
for body_part in selected_transforms:
first_shader = shading_engines.get(body_part)[0]
for transform in valid_failed_list:
if body_part.split('_')[1] in transform:
shapes = cmds.listRelatives(transform,shapes=True)
if shapes:
cmds.sets(shapes[0],e=True,forceElement=first_shader)
for k, v in shading_engines.items():
old_shading_engine_name = v[0]
old_shader_name = v[1]
body_part = k.split("_")[1]
new_shading_engine_name = "{}_MATSG".format(body_part)
new_shader_name = "{}_MAT".format(body_part)
if cmds.objExists(old_shading_engine_name):
cmds.rename(old_shading_engine_name, new_shading_engine_name)
if cmds.objExists(old_shader_name):
cmds.rename(old_shader_name, new_shader_name)