Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # AdvancedSkeleton
- # Copyright (C) Animation Studios
- # email: [email protected]
- import unreal
- import re
- asset_name = "ControlRig"
- package_path = "/Game"
- utilityBase = unreal.GlobalEditorUtilityBase.get_default_object()
- selectedAssets = utilityBase.get_selected_assets()
- if len(selectedAssets)<1:
- raise Exception('Nothing selected, you must select a SkeletalMesh')
- selectedAsset = selectedAssets[0]
- if selectedAsset.get_class().get_name() != 'ControlRigBlueprint':
- raise Exception('Selected object is not a ControlRigBlueprint, you must select a ControlRigBlueprint')
- ControlRigBlueprint = selectedAsset
- def addASCtrl (name, parent, joint, type, typeEls, gizmoName, size, color, preName):
- HierarchyModifier = ControlRigBlueprint.get_hierarchy_modifier()
- RigVMController = getController()
- RigVMGraph = ControlRigBlueprint.model
- sp = '/Script/ControlRig.RigUnit_'
- numNodes = len(RigVMGraph.get_nodes())
- y = ((numNodes-1)/4)*400
- addASControl (name, parent, gizmoName, size, color, joint)
- if name=='Main':
- return
- #GTi
- GTi = addNode (sp+'GetTransform','Execute',node_name=name+'_GTi')
- RigVMController.set_node_position (GTi, [-1300, y+25])
- RigVMController.set_pin_default_value(name+'_GTi'+'.Item.Type','Bone')
- RigVMController.set_pin_default_value(name+'_GTi'+'.Item.Name',joint)
- RigVMController.set_pin_default_value(name+'_GTi'+'.bInitial','True')
- #STi
- STi = addNode (sp+'SetTransform','Execute',node_name=name+'_STi')
- RigVMController.set_node_position (STi, [-900, y])
- RigVMController.set_pin_default_value(name+'_STi'+'.Item.Type','Control')
- RigVMController.set_pin_default_value(name+'_STi'+'.Item.Name',name)
- RigVMController.set_pin_default_value(name+'_STi'+'.bPropagateToChildren','True')
- RigVMController.set_pin_default_value(name+'_STi'+'.bInitial','True')
- #GT
- GT = addNode (sp+'GetTransform','Execute',node_name=name+'_GT')
- RigVMController.set_node_position (GT, [-500, y])
- RigVMController.set_pin_default_value(name+'_GT'+'.Item.Type','Control')
- RigVMController.set_pin_default_value(name+'_GT'+'.Item.Name',name)
- if type=='FK':
- #CON
- CON = addNode (sp+'TransformConstraintPerItem','Execute',node_name=name+'_CON')
- RigVMController.set_node_position (CON, [100, y-90])
- RigVMController.set_pin_default_value(name+'_CON'+'.Item.Type','Bone')
- RigVMController.set_pin_default_value(name+'_CON'+'.Item.Name',joint)
- RigVMController.add_array_pin(name+'_CON.Targets')
- if type=='IK':
- RigControl = addASControl ('Pole'+name, parent, 'Wedge_Solid', size, color, joint)
- RigControl.set_editor_property('offset_transform', unreal.Transform(location=[float(typeEls[9]),float(typeEls[11]),float(typeEls[10])],scale=[1.0, 1.0, 1.0]))
- HierarchyModifier.set_control (RigControl)
- #Space for IK-end
- HierarchyModifier.add_space ('Space'+typeEls[2])#,parent_name='Main'
- parentNode ('Space'+typeEls[2],'Main')
- #STiSpace
- STiSpace = addNode (sp+'SetTransform','Execute',node_name=name+'_STiSpace')
- RigVMController.set_node_position (STiSpace, [-1300, y])
- RigVMController.set_node_position (GTi, [-1700, y+25])
- RigVMController.set_pin_default_value(name+'_STiSpace'+'.Item.Type','Space')
- RigVMController.set_pin_default_value(name+'_STiSpace'+'.Item.Name','Space'+typeEls[2])
- RigVMController.set_pin_default_value(name+'_STiSpace'+'.bPropagateToChildren','True')
- RigVMController.set_pin_default_value(name+'_STiSpace'+'.bInitial','True')
- #IK(Basic IK)
- IK = addNode (sp+'TwoBoneIKSimplePerItem','Execute',node_name=name+'_IK')
- RigVMController.set_node_position (IK, [600, y-130])
- RigVMController.set_pin_default_value(name+'_IK'+'.ItemA.Name',typeEls[0])
- RigVMController.set_pin_default_value(name+'_IK'+'.ItemB.Name',typeEls[1])
- RigVMController.set_pin_default_value(name+'_IK'+'.EffectorItem.Name',typeEls[2])
- RigVMController.set_pin_default_value(name+'_IK'+'.PrimaryAxis.X',typeEls[3])
- RigVMController.set_pin_default_value(name+'_IK'+'.PrimaryAxis.Y',typeEls[4])
- RigVMController.set_pin_default_value(name+'_IK'+'.PrimaryAxis.Z',typeEls[5])
- RigVMController.set_pin_default_value(name+'_IK'+'.SecondaryAxis.X',typeEls[6])
- RigVMController.set_pin_default_value(name+'_IK'+'.SecondaryAxis.Y',typeEls[7])
- RigVMController.set_pin_default_value(name+'_IK'+'.SecondaryAxis.Z',typeEls[8])
- RigVMController.set_pin_default_value(name+'_IK'+'.PoleVectorKind','Location')
- RigVMController.set_pin_default_value(name+'_IK'+'.PoleVectorSpace.Type','Control')
- RigVMController.set_pin_default_value(name+'_IK'+'.PoleVectorSpace.Name','Pole'+name)
- RigVMController.set_pin_default_value(name+'_IK'+'.bPropagateToChildren','True')
- #GTSpace
- GTSpace = addNode (sp+'GetTransform','Execute',node_name=name+'_GTSpace')
- RigVMController.set_node_position (GTSpace, [1000, y])
- RigVMController.set_pin_default_value(name+'_GTSpace'+'.Item.Type','Bone')
- RigVMController.set_pin_default_value(name+'_GTSpace'+'.Item.Name',typeEls[2])
- #CON (for IK this is Space)
- CON = addNode (sp+'TransformConstraintPerItem','Execute',node_name=name+'_CON')
- RigVMController.set_node_position (CON, [1350, y-90])
- RigVMController.set_pin_default_value(name+'_CON'+'.Item.Type','Space')
- RigVMController.set_pin_default_value(name+'_CON'+'.Item.Name','Space'+typeEls[2])
- RigVMController.add_array_pin(name+'_CON.Targets')
- RigVMController.set_pin_default_value(name+'_CON'+'.Targets.0.bMaintainOffset','False')
- #Links
- if name=='Main' or name=='RootX_M':
- RigVMController.add_link(name+'_GTi.Transform.translation' , name+'_STi.Transform.translation')
- else:
- RigVMController.add_link(name+'_GTi.Transform' , name+'_STi.Transform')
- if type=='FK':
- RigVMController.add_link(name+'_GT.Transform' , name+'_CON.Targets.0.Transform')
- if type=='IK':
- RigVMController.add_link(name+'_GTi.Transform' , name+'_STiSpace.Transform')
- RigVMController.add_link(name+'_GT.Transform' , name+'_IK.Effector')
- RigVMController.add_link(name+'_GTSpace.Transform' , name+'_CON.Targets.0.Transform')
- #ExecuteContext
- if numNodes==2:
- RigVMController.add_link('RigUnit_BeginExecution.ExecuteContext' , name+'_CON.ExecuteContext')
- RigVMController.add_link('RigUnit_PrepareForExecution.ExecuteContext' , name+'_STi.ExecuteContext')
- else:
- if type=='FK':
- RigVMController.add_link(preName+'_CON.ExecuteContext' , name+'_CON.ExecuteContext')
- RigVMController.add_link(preName+'_STi.ExecuteContext' , name+'_STi.ExecuteContext')
- if type=='IK':
- RigVMController.add_link(preName+'_CON.ExecuteContext' , name+'_IK.ExecuteContext')
- RigVMController.add_link(name+'_IK.ExecuteContext' , name+'_CON.ExecuteContext')
- RigVMController.add_link(preName+'_STi.ExecuteContext' , name+'_STiSpace.ExecuteContext')
- RigVMController.add_link(name+'_STiSpace.ExecuteContext' , name+'_STi.ExecuteContext')
- def addASControl (name, parent, gizmoName, size, color, joint):
- HierarchyModifier = ControlRigBlueprint.get_hierarchy_modifier()
- RigVMController = getController()
- x = re.search("^Space.*", parent)
- if x:
- key = HierarchyModifier.add_control (name,space_name=parent)
- else:
- key = HierarchyModifier.add_control (name,parent_name=parent)
- RigControl = HierarchyModifier.get_control (key)
- RigControl.set_editor_property('gizmo_name',gizmoName)
- s = 0.01*size
- RigControl.set_editor_property('gizmo_transform', unreal.Transform(scale=[s,s,s]))
- if name!='Main' and name!='RootX_M':
- RigControl.set_editor_property('gizmo_transform', unreal.Transform(rotation=[90,0,0],scale=[s,s,s]))
- Color = unreal.Color(b=color[2]*255, g=color[1]*255, r=color[0]*255, a=0)
- LinearColor = unreal.LinearColor()
- LinearColor.set_from_srgb(Color)
- RigControl.set_editor_property('gizmo_color',LinearColor)
- HierarchyModifier.set_control (RigControl)
- return RigControl
- def parentNode (child,parent):
- HierarchyModifier = ControlRigBlueprint.get_hierarchy_modifier()
- RigElementKeys = HierarchyModifier.get_elements()
- for key in RigElementKeys:
- if (key.name == child):
- childKey = key
- for key in RigElementKeys:
- if (key.name == parent):
- parentKey = key
- HierarchyModifier.reparent_element (childKey, parentKey)
- def addNode (script_struct_path, method_name, node_name):
- #RigVMController.
- #add_struct_node_from_struct_path UE4
- #add_unit_node_from_struct_path UE5
- RigVMController = getController()
- try:
- node = RigVMController.add_struct_node_from_struct_path(script_struct_path,method_name,node_name=node_name) #UE4
- except:
- node = RigVMController.add_unit_node_from_struct_path(script_struct_path,method_name,node_name=node_name) #UE5
- return node
- def getController ():
- try:
- RigVMController = ControlRigBlueprint.get_editor_property('controller') #UE4
- except:
- RigVMController = ControlRigBlueprint.get_controller() #UE5
- return RigVMController
- def main ():
- HierarchyModifier = ControlRigBlueprint.get_hierarchy_modifier()
- RigVMController = getController()
- RigElementKeys = HierarchyModifier.get_elements()
- RigVMGraph = ControlRigBlueprint.model
- #Clear out existing rig-setup
- nodes = RigVMGraph.get_nodes()
- for node in nodes:
- RigVMController.remove_node(node)
- #Clear out existing controllers
- for key in RigElementKeys:
- if key.type != 1: #BONE
- try:
- HierarchyModifier.remove_element(key)
- except:
- pass
- BeginExecutionNode = addNode ('/Script/ControlRig.RigUnit_BeginExecution','Execute',node_name='RigUnit_BeginExecution')
- RigVMController.set_node_position (BeginExecutionNode, [-300, -100])
- PrepareExecutionNode = addNode ('/Script/ControlRig.RigUnit_PrepareForExecution','Execute',node_name='RigUnit_PrepareForExecution')
- RigVMController.set_node_position (PrepareExecutionNode, [-600, -100])
- OutSpaceKey = HierarchyModifier.add_space ('OutSpace')#needed for other spaces to work with custom parents
- #//-- ASControllers Starts Here --//
- addASCtrl ('Main','','DeformationSystem','Main',[],'Circle_Thick',109.0651636,[0, 0.2549999952, 0.6000000238, 1.0],'')
- addASCtrl ('RootX_M','Main','Root_M','FK',[],'Arrow4_Thin',113.7993234,[0, 0.2549999952, 0.6000000238, 1.0],'Main')
- addASCtrl ('FKRoot_M','RootX_M','Root_M','FK',[],'Circle_Thick',69.60995856,[0.3919999897, 0.8629999757, 1, 1.0],'RootX_M')
- addASCtrl ('IKLeg_L','Main','Ankle_L','IK',['Hip_L','Knee_L','Ankle_L','-1','-0','-0','0','1','0','19.51839615','26.60204951','51.38115196'],'Box_Thick',43.3796025,[1, 0, 0, 1.0],'FKRoot_M')
- addASCtrl ('FKToes_L','SpaceAnkle_L','Toes_L','FK',[],'Circle_Thick',31.35710166,[0.3919999897, 0.8629999757, 1, 1.0],'IKLeg_L')
- addASCtrl ('FKSpine1_M','FKRoot_M','Spine1_M','FK',[],'Circle_Thick',67.2020233,[0.3919999897, 0.8629999757, 1, 1.0],'FKToes_L')
- addASCtrl ('FKChest_M','FKSpine1_M','Chest_M','FK',[],'Circle_Thick',84.77685534,[0.3919999897, 0.8629999757, 1, 1.0],'FKSpine1_M')
- addASCtrl ('FKScapula_L','FKChest_M','Scapula_L','FK',[],'Circle_Thick',67.93802755,[1, 1, 0.3880000114, 1.0],'FKChest_M')
- addASCtrl ('FKShoulder_L','FKScapula_L','Shoulder_L','FK',[],'Circle_Thick',66.7038256,[0.3919999897, 0.8629999757, 1, 1.0],'FKScapula_L')
- addASCtrl ('FKElbow_L','FKShoulder_L','Elbow_L','FK',[],'Circle_Thick',37.52736712,[0.3919999897, 0.8629999757, 1, 1.0],'FKShoulder_L')
- addASCtrl ('FKWrist_L','FKElbow_L','Wrist_L','FK',[],'Circle_Thick',44.73973494,[0.3919999897, 0.8629999757, 1, 1.0],'FKElbow_L')
- addASCtrl ('FKCup_L','FKWrist_L','Cup_L','FK',[],'Circle_Thick',35.30348506,[0.3919999897, 0.8629999757, 1, 1.0],'FKWrist_L')
- addASCtrl ('FKRingFinger1_L','FKCup_L','RingFinger1_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKCup_L')
- addASCtrl ('FKRingFinger2_L','FKRingFinger1_L','RingFinger2_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKRingFinger1_L')
- addASCtrl ('FKRingFinger3_L','FKRingFinger2_L','RingFinger3_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKRingFinger2_L')
- addASCtrl ('FKPinkyFinger1_L','FKCup_L','PinkyFinger1_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKRingFinger3_L')
- addASCtrl ('FKPinkyFinger2_L','FKPinkyFinger1_L','PinkyFinger2_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKPinkyFinger1_L')
- addASCtrl ('FKPinkyFinger3_L','FKPinkyFinger2_L','PinkyFinger3_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKPinkyFinger2_L')
- addASCtrl ('FKIndexFinger1_L','FKWrist_L','IndexFinger1_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKPinkyFinger3_L')
- addASCtrl ('FKIndexFinger2_L','FKIndexFinger1_L','IndexFinger2_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKIndexFinger1_L')
- addASCtrl ('FKIndexFinger3_L','FKIndexFinger2_L','IndexFinger3_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKIndexFinger2_L')
- addASCtrl ('FKThumbFinger1_L','FKWrist_L','ThumbFinger1_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKIndexFinger3_L')
- addASCtrl ('FKThumbFinger2_L','FKThumbFinger1_L','ThumbFinger2_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKThumbFinger1_L')
- addASCtrl ('FKThumbFinger3_L','FKThumbFinger2_L','ThumbFinger3_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKThumbFinger2_L')
- addASCtrl ('FKMiddleFinger1_L','FKWrist_L','MiddleFinger1_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKThumbFinger3_L')
- addASCtrl ('FKMiddleFinger2_L','FKMiddleFinger1_L','MiddleFinger2_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKMiddleFinger1_L')
- addASCtrl ('FKMiddleFinger3_L','FKMiddleFinger2_L','MiddleFinger3_L','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKMiddleFinger2_L')
- addASCtrl ('FKNeck_M','FKChest_M','Neck_M','FK',[],'Circle_Thick',56.49939058,[0.3919999897, 0.8629999757, 1, 1.0],'FKMiddleFinger3_L')
- addASCtrl ('FKHead_M','FKNeck_M','Head_M','FK',[],'Circle_Thick',54.92711264,[0.3919999897, 0.8629999757, 1, 1.0],'FKNeck_M')
- addASCtrl ('FKHair_M','FKHead_M','Hair_M','FK',[],'Circle_Thick',52.43528856,[0.3919999897, 0.8629999757, 1, 1.0],'FKHead_M')
- addASCtrl ('FKScapula_R','FKChest_M','Scapula_R','FK',[],'Circle_Thick',67.93802754,[1, 1, 0.3880000114, 1.0],'FKHair_M')
- addASCtrl ('FKShoulder_R','FKScapula_R','Shoulder_R','FK',[],'Circle_Thick',66.7038256,[0.3919999897, 0.8629999757, 1, 1.0],'FKScapula_R')
- addASCtrl ('FKElbow_R','FKShoulder_R','Elbow_R','FK',[],'Circle_Thick',37.52736712,[0.3919999897, 0.8629999757, 1, 1.0],'FKShoulder_R')
- addASCtrl ('FKWrist_R','FKElbow_R','Wrist_R','FK',[],'Circle_Thick',44.73973494,[0.3919999897, 0.8629999757, 1, 1.0],'FKElbow_R')
- addASCtrl ('FKCup_R','FKWrist_R','Cup_R','FK',[],'Circle_Thick',35.30348506,[0.3919999897, 0.8629999757, 1, 1.0],'FKWrist_R')
- addASCtrl ('FKRingFinger1_R','FKCup_R','RingFinger1_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKCup_R')
- addASCtrl ('FKRingFinger2_R','FKRingFinger1_R','RingFinger2_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKRingFinger1_R')
- addASCtrl ('FKRingFinger3_R','FKRingFinger2_R','RingFinger3_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKRingFinger2_R')
- addASCtrl ('FKPinkyFinger1_R','FKCup_R','PinkyFinger1_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKRingFinger3_R')
- addASCtrl ('FKPinkyFinger2_R','FKPinkyFinger1_R','PinkyFinger2_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKPinkyFinger1_R')
- addASCtrl ('FKPinkyFinger3_R','FKPinkyFinger2_R','PinkyFinger3_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKPinkyFinger2_R')
- addASCtrl ('FKIndexFinger1_R','FKWrist_R','IndexFinger1_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKPinkyFinger3_R')
- addASCtrl ('FKIndexFinger2_R','FKIndexFinger1_R','IndexFinger2_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKIndexFinger1_R')
- addASCtrl ('FKIndexFinger3_R','FKIndexFinger2_R','IndexFinger3_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKIndexFinger2_R')
- addASCtrl ('FKThumbFinger1_R','FKWrist_R','ThumbFinger1_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKIndexFinger3_R')
- addASCtrl ('FKThumbFinger2_R','FKThumbFinger1_R','ThumbFinger2_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKThumbFinger1_R')
- addASCtrl ('FKThumbFinger3_R','FKThumbFinger2_R','ThumbFinger3_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKThumbFinger2_R')
- addASCtrl ('FKMiddleFinger1_R','FKWrist_R','MiddleFinger1_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKThumbFinger3_R')
- addASCtrl ('FKMiddleFinger2_R','FKMiddleFinger1_R','MiddleFinger2_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKMiddleFinger1_R')
- addASCtrl ('FKMiddleFinger3_R','FKMiddleFinger2_R','MiddleFinger3_R','FK',[],'Circle_Thick',15.9579963,[0.3919999897, 0.8629999757, 1, 1.0],'FKMiddleFinger2_R')
- addASCtrl ('IKLeg_R','Main','Ankle_R','IK',['Hip_R','Knee_R','Ankle_R','1','0','0','-0','-1','-0','-19.51839615','26.60204951','51.38115196'],'Box_Thick',43.3796025,[1, 0, 0, 1.0],'FKMiddleFinger3_R')
- addASCtrl ('FKToes_R','SpaceAnkle_R','Toes_R','FK',[],'Circle_Thick',31.35710167,[0.3919999897, 0.8629999757, 1, 1.0],'IKLeg_R')
- #//-- ASControllers Ends Here --//
- # HierarchyModifier.remove_element (OutSpaceKey) #UE5 issue with removing this
- print ("ControlRig created")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment