Merge pull request #177 from Yusarina/dictionary-rejig

Bone standardisation fixes #164
This commit is contained in:
Onan Chew
2025-08-03 08:42:45 -04:00
committed by GitHub
2 changed files with 193 additions and 152 deletions
+176 -128
View File
@@ -372,60 +372,62 @@ standard_bones = {
'head': 'Head', 'head': 'Head',
# Arms # Arms
'left_arm': 'UpperArm.L', 'left_shoulder': 'Shoulder_L',
'left_elbow': 'LowerArm.L', 'left_arm': 'UpperArm_L',
'left_wrist': 'Hand.L', 'left_elbow': 'LowerArm_L',
'right_arm': 'UpperArm.R', 'left_wrist': 'Hand_L',
'right_elbow': 'LowerArm.R', 'right_shoulder': 'Shoulder_R',
'right_wrist': 'Hand.R', 'right_arm': 'UpperArm_R',
'right_elbow': 'LowerArm_R',
'right_wrist': 'Hand_R',
# Legs # Legs
'left_leg': 'UpperLeg.L', 'left_leg': 'UpperLeg_L',
'left_knee': 'LowerLeg.L', 'left_knee': 'LowerLeg_L',
'left_ankle': 'Foot.L', 'left_ankle': 'Foot_L',
'left_toe': 'Toes.L', 'left_toe': 'Toe_L',
'right_leg': 'UpperLeg.R', 'right_leg': 'UpperLeg_R',
'right_knee': 'LowerLeg.R', 'right_knee': 'LowerLeg_R',
'right_ankle': 'Foot.R', 'right_ankle': 'Foot_R',
'right_toe': 'Toes.R', 'right_toe': 'Toe_R',
# Fingers Left # Fingers Left
'thumb_1_l': 'Thumb1.L', 'thumb_1_l': 'Thumb_L',
'thumb_2_l': 'Thumb2.L', 'thumb_2_l': 'Thumb_L.001',
'thumb_3_l': 'Thumb3.L', 'thumb_3_l': 'Thumb_L.002',
'index_1_l': 'Index1.L', 'index_1_l': 'Index_L',
'index_2_l': 'Index2.L', 'index_2_l': 'Index_L.001',
'index_3_l': 'Index3.L', 'index_3_l': 'Index_L.002',
'middle_1_l': 'Middle1.L', 'middle_1_l': 'Middle_L',
'middle_2_l': 'Middle2.L', 'middle_2_l': 'Middle_L.001',
'middle_3_l': 'Middle3.L', 'middle_3_l': 'Middle_L.002',
'ring_1_l': 'Ring1.L', 'ring_1_l': 'Ring_L',
'ring_2_l': 'Ring2.L', 'ring_2_l': 'Ring_L.001',
'ring_3_l': 'Ring3.L', 'ring_3_l': 'Ring_L.002',
'pinkie_1_l': 'Pinky1.L', 'pinkie_1_l': 'Pinky_L',
'pinkie_2_l': 'Pinky2.L', 'pinkie_2_l': 'Pinky_L.001',
'pinkie_3_l': 'Pinky3.L', 'pinkie_3_l': 'Pinky_L.002',
# Fingers Right # Fingers Right
'thumb_1_r': 'Thumb1.R', 'thumb_1_r': 'Thumb_R',
'thumb_2_r': 'Thumb2.R', 'thumb_2_r': 'Thumb_R.001',
'thumb_3_r': 'Thumb3.R', 'thumb_3_r': 'Thumb_R.002',
'index_1_r': 'Index1.R', 'index_1_r': 'Index_R',
'index_2_r': 'Index2.R', 'index_2_r': 'Index_R.001',
'index_3_r': 'Index3.R', 'index_3_r': 'Index_R.002',
'middle_1_r': 'Middle1.R', 'middle_1_r': 'Middle_R',
'middle_2_r': 'Middle2.R', 'middle_2_r': 'Middle_R.001',
'middle_3_r': 'Middle3.R', 'middle_3_r': 'Middle_R.002',
'ring_1_r': 'Ring1.R', 'ring_1_r': 'Ring_R',
'ring_2_r': 'Ring2.R', 'ring_2_r': 'Ring_R.001',
'ring_3_r': 'Ring3.R', 'ring_3_r': 'Ring_R.002',
'pinkie_1_r': 'Pinky1.R', 'pinkie_1_r': 'Pinky_R',
'pinkie_2_r': 'Pinky2.R', 'pinkie_2_r': 'Pinky_R.001',
'pinkie_3_r': 'Pinky3.R', 'pinkie_3_r': 'Pinky_R.002',
# Eyes # Eyes
'left_eye': 'Eye.L', 'left_eye': 'Eye_L',
'right_eye': 'Eye.R' 'right_eye': 'Eye_R'
} }
bone_hierarchy = [ bone_hierarchy = [
@@ -434,46 +436,48 @@ bone_hierarchy = [
('Chest', 'Chest.Up'), ('Chest', 'Chest.Up'),
('Chest.Up', 'Neck'), ('Chest.Up', 'Neck'),
('Neck', 'Head'), ('Neck', 'Head'),
('Head', 'Eye.L'), ('Head', 'Eye_L'),
('Head', 'Eye.R'), ('Head', 'Eye_R'),
# Left Arm Chain # Left Arm Chain
('Chest.Up', 'UpperArm.L'), ('Chest.Up', 'Shoulder_L'),
('UpperArm.L', 'LowerArm.L'), ('Shoulder_L', 'UpperArm_L'),
('LowerArm.L', 'Hand.L'), ('UpperArm_L', 'LowerArm_L'),
('LowerArm_L', 'Hand_L'),
# Right Arm Chain # Right Arm Chain
('Chest.Up', 'UpperArm.R'), ('Chest.Up', 'Shoulder_R'),
('UpperArm.R', 'LowerArm.R'), ('Shoulder_R', 'UpperArm_R'),
('LowerArm.R', 'Hand.R'), ('UpperArm_R', 'LowerArm_R'),
('LowerArm_R', 'Hand_R'),
# Left Leg Chain # Left Leg Chain
('Hips', 'UpperLeg.L'), ('Hips', 'UpperLeg_L'),
('UpperLeg.L', 'LowerLeg.L'), ('UpperLeg_L', 'LowerLeg_L'),
('LowerLeg.L', 'Foot.L'), ('LowerLeg_L', 'Foot_L'),
('Foot.L', 'Toes.L'), ('Foot_L', 'Toe_L'),
# Right Leg Chain # Right Leg Chain
('Hips', 'UpperLeg.R'), ('Hips', 'UpperLeg_R'),
('UpperLeg.R', 'LowerLeg.R'), ('UpperLeg_R', 'LowerLeg_R'),
('LowerLeg.R', 'Foot.R'), ('LowerLeg_R', 'Foot_R'),
('Foot.R', 'Toes.R') ('Foot_R', 'Toe_R')
] ]
finger_hierarchy = { finger_hierarchy = {
'left': [ 'left': [
('Hand.L', 'Thumb1.L', 'Thumb2.L', 'Thumb3.L'), ('Hand_L', 'Thumb_L', 'Thumb_L.001', 'Thumb_L.002'),
('Hand.L', 'Index1.L', 'Index2.L', 'Index3.L'), ('Hand_L', 'Index_L', 'Index_L.001', 'Index_L.002'),
('Hand.L', 'Middle1.L', 'Middle2.L', 'Middle3.L'), ('Hand_L', 'Middle_L', 'Middle_L.001', 'Middle_L.002'),
('Hand.L', 'Ring1.L', 'Ring2.L', 'Ring3.L'), ('Hand_L', 'Ring_L', 'Ring_L.001', 'Ring_L.002'),
('Hand.L', 'Pinky1.L', 'Pinky2.L', 'Pinky3.L') ('Hand_L', 'Pinky_L', 'Pinky_L.001', 'Pinky_L.002')
], ],
'right': [ 'right': [
('Hand.R', 'Thumb1.R', 'Thumb2.R', 'Thumb3.R'), ('Hand_R', 'Thumb_R', 'Thumb_R.001', 'Thumb_R.002'),
('Hand.R', 'Index1.R', 'Index2.R', 'Index3.R'), ('Hand_R', 'Index_R', 'Index_R.001', 'Index_R.002'),
('Hand.R', 'Middle1.R', 'Middle2.R', 'Middle3.R'), ('Hand_R', 'Middle_R', 'Middle_R.001', 'Middle_R.002'),
('Hand.R', 'Ring1.R', 'Ring2.R', 'Ring3.R'), ('Hand_R', 'Ring_R', 'Ring_R.001', 'Ring_R.002'),
('Hand.R', 'Pinky1.R', 'Pinky2.R', 'Pinky3.R') ('Hand_R', 'Pinky_R', 'Pinky_R.001', 'Pinky_R.002')
] ]
} }
@@ -506,6 +510,8 @@ acceptable_bone_hierarchy = [
('Head', 'Eye_R'), ('Head', 'Eye_R'),
('Head', 'LeftEye'), ('Head', 'LeftEye'),
('Head', 'RightEye'), ('Head', 'RightEye'),
('Head', 'Eye.L'),
('Head', 'Eye.R'),
# Unity humanoid naming # Unity humanoid naming
('Hips', 'Spine'), ('Hips', 'Spine'),
@@ -516,6 +522,40 @@ acceptable_bone_hierarchy = [
('Head', 'LeftEye'), ('Head', 'LeftEye'),
('Head', 'RightEye'), ('Head', 'RightEye'),
# Old standard bone hierarchy patterns
('Chest.Up', 'UpperArm.L'),
('UpperArm.L', 'LowerArm.L'),
('LowerArm.L', 'Hand.L'),
('Chest.Up', 'UpperArm.R'),
('UpperArm.R', 'LowerArm.R'),
('LowerArm.R', 'Hand.R'),
('Hips', 'UpperLeg.L'),
('UpperLeg.L', 'LowerLeg.L'),
('LowerLeg.L', 'Foot.L'),
('Foot.L', 'Toes.L'),
('Hips', 'UpperLeg.R'),
('UpperLeg.R', 'LowerLeg.R'),
('LowerLeg.R', 'Foot.R'),
('Foot.R', 'Toes.R'),
# New standard bone hierarchy patterns (with shoulders)
('Chest.Up', 'Shoulder_L'),
('Shoulder_L', 'UpperArm_L'),
('UpperArm_L', 'LowerArm_L'),
('LowerArm_L', 'Hand_L'),
('Chest.Up', 'Shoulder_R'),
('Shoulder_R', 'UpperArm_R'),
('UpperArm_R', 'LowerArm_R'),
('LowerArm_R', 'Hand_R'),
('Hips', 'UpperLeg_L'),
('UpperLeg_L', 'LowerLeg_L'),
('LowerLeg_L', 'Foot_L'),
('Foot_L', 'Toe_L'),
('Hips', 'UpperLeg_R'),
('UpperLeg_R', 'LowerLeg_R'),
('LowerLeg_R', 'Foot_R'),
('Foot_R', 'Toe_R'),
] ]
acceptable_bone_names = { acceptable_bone_names = {
@@ -523,54 +563,62 @@ acceptable_bone_names = {
'chest': ['Chest', 'spine1', 'Spine1', 'spine_01', 'SPINE1', 'Spine01'], 'chest': ['Chest', 'spine1', 'Spine1', 'spine_01', 'SPINE1', 'Spine01'],
'neck': ['Neck', 'neck_01', 'Neck01'], 'neck': ['Neck', 'neck_01', 'Neck01'],
'head': ['Head', 'head_01', 'Head01'], 'head': ['Head', 'head_01', 'Head01'],
'eye_l': ['Eye_L', 'LeftEye', 'lefteye', 'eye_left', 'EyeLeft'], 'eye_l': ['Eye_L', 'LeftEye', 'lefteye', 'eye_left', 'EyeLeft', 'Eye.L'],
'eye_r': ['Eye_R', 'RightEye', 'righteye', 'eye_right', 'EyeRight'], 'eye_r': ['Eye_R', 'RightEye', 'righteye', 'eye_right', 'EyeRight', 'Eye.R'],
'shoulder_r': ['Shoulder.R', 'clavicle_r', 'ClavicleRight', 'RightShoulder'], 'shoulder_r': ['Shoulder.R', 'clavicle_r', 'ClavicleRight', 'RightShoulder', 'Shoulder_R'],
'arm_r': ['Arm.R', 'upperarm_r', 'UpperArmRight', 'RightArm'], 'arm_r': ['Arm.R', 'upperarm_r', 'UpperArmRight', 'RightArm', 'UpperArm.R', 'UpperArm_R'],
'elbow_r': ['Elbow.R', 'lowerarm_r', 'ForearmRight', 'RightForeArm'], 'elbow_r': ['Elbow.R', 'lowerarm_r', 'ForearmRight', 'RightForeArm', 'LowerArm.R', 'LowerArm_R'],
'wrist_r': ['Wrist.R', 'hand_r', 'HandRight', 'RightHand'], 'wrist_r': ['Wrist.R', 'hand_r', 'HandRight', 'RightHand', 'Hand.R', 'Hand_R'],
'leg_r': ['Leg.R', 'thigh_r', 'ThighRight', 'RightLeg', 'RightUpLeg'], 'leg_r': ['Leg.R', 'thigh_r', 'ThighRight', 'RightLeg', 'RightUpLeg', 'UpperLeg.R', 'UpperLeg_R'],
'knee_r': ['Knee.R', 'calf_r', 'CalfRight', 'RightShin', 'RightLowerLeg'], 'knee_r': ['Knee.R', 'calf_r', 'CalfRight', 'RightShin', 'RightLowerLeg', 'LowerLeg.R', 'LowerLeg_R'],
'foot_r': ['Foot.R', 'foot_r', 'FootRight', 'RightFoot'], 'foot_r': ['Foot.R', 'foot_r', 'FootRight', 'RightFoot', 'Foot_R'],
'toes_r': ['Toes.R', 'ball_r', 'ToeRight', 'RightToeBase'], 'toes_r': ['Toes.R', 'ball_r', 'ToeRight', 'RightToeBase', 'Toe_R'],
'shoulder_l': ['Shoulder.L', 'clavicle_l', 'ClavicleLeft', 'LeftShoulder'], 'shoulder_l': ['Shoulder.L', 'clavicle_l', 'ClavicleLeft', 'LeftShoulder', 'Shoulder_L'],
'arm_l': ['Arm.L', 'upperarm_l', 'UpperArmLeft', 'LeftArm'], 'arm_l': ['Arm.L', 'upperarm_l', 'UpperArmLeft', 'LeftArm', 'UpperArm.L', 'UpperArm_L'],
'elbow_l': ['Elbow.L', 'lowerarm_l', 'ForearmLeft', 'LeftForeArm'], 'elbow_l': ['Elbow.L', 'lowerarm_l', 'ForearmLeft', 'LeftForeArm', 'LowerArm.L', 'LowerArm_L'],
'wrist_l': ['Wrist.L', 'hand_l', 'HandLeft', 'LeftHand'], 'wrist_l': ['Wrist.L', 'hand_l', 'HandLeft', 'LeftHand', 'Hand.L', 'Hand_L'],
'leg_l': ['Leg.L', 'thigh_l', 'ThighLeft', 'LeftLeg', 'LeftUpLeg'], 'leg_l': ['Leg.L', 'thigh_l', 'ThighLeft', 'LeftLeg', 'LeftUpLeg', 'UpperLeg.L', 'UpperLeg_L'],
'knee_l': ['Knee.L', 'calf_l', 'CalfLeft', 'LeftShin', 'LeftLowerLeg'], 'knee_l': ['Knee.L', 'calf_l', 'CalfLeft', 'LeftShin', 'LeftLowerLeg', 'LowerLeg.L', 'LowerLeg_L'],
'foot_l': ['Foot.L', 'foot_l', 'FootLeft', 'LeftFoot'], 'foot_l': ['Foot.L', 'foot_l', 'FootLeft', 'LeftFoot', 'Foot_L'],
'toes_l': ['Toes.L', 'ball_l', 'ToeLeft', 'LeftToeBase'], 'toes_l': ['Toes.L', 'ball_l', 'ToeLeft', 'LeftToeBase', 'Toe_L'],
# Add finger bones for left hand # Add finger bones for left hand
'thumb_0_l': ['Thumb0_L'], 'thumb_0_l': ['Thumb0_L'],
'thumb_1_l': ['Thumb1_L'], 'thumb_1_l': ['Thumb1_L', 'Thumb1.L', 'Thumb_L'],
'thumb_2_l': ['Thumb2_L'], 'thumb_2_l': ['Thumb2_L', 'Thumb2.L', 'Thumb_L.001'],
'index_1_l': ['IndexFinger1_L'], 'thumb_3_l': ['Thumb3.L', 'Thumb_L.002'],
'index_2_l': ['IndexFinger2_L'], 'index_1_l': ['IndexFinger1_L', 'Index1.L', 'Index_L'],
'index_3_l': ['IndexFinger3_L'], 'index_2_l': ['IndexFinger2_L', 'Index2.L', 'Index_L.001'],
'middle_1_l': ['MiddleFinger1_L'], 'index_3_l': ['IndexFinger3_L', 'Index3.L', 'Index_L.002'],
'middle_2_l': ['MiddleFinger2_L'], 'middle_1_l': ['MiddleFinger1_L', 'Middle1.L', 'Middle_L'],
'middle_3_l': ['MiddleFinger3_L'], 'middle_2_l': ['MiddleFinger2_L', 'Middle2.L', 'Middle_L.001'],
'ring_1_l': ['RingFinger1_L'], 'middle_3_l': ['MiddleFinger3_L', 'Middle3.L', 'Middle_L.002'],
'ring_2_l': ['RingFinger2_L'], 'ring_1_l': ['RingFinger1_L', 'Ring1.L', 'Ring_L'],
'ring_3_l': ['RingFinger3_L'], 'ring_2_l': ['RingFinger2_L', 'Ring2.L', 'Ring_L.001'],
'ring_3_l': ['RingFinger3_L', 'Ring3.L', 'Ring_L.002'],
'pinky_1_l': ['Pinky1.L', 'Pinky_L'],
'pinky_2_l': ['Pinky2.L', 'Pinky_L.001'],
'pinky_3_l': ['Pinky3.L', 'Pinky_L.002'],
# Add finger bones for right hand # Add finger bones for right hand
'thumb_0_r': ['Thumb0_R', 'ThumbO_R'], 'thumb_0_r': ['Thumb0_R', 'ThumbO_R'],
'thumb_1_r': ['Thumb1_R'], 'thumb_1_r': ['Thumb1_R', 'Thumb1.R', 'Thumb_R'],
'thumb_2_r': ['Thumb2_R'], 'thumb_2_r': ['Thumb2_R', 'Thumb2.R', 'Thumb_R.001'],
'index_1_r': ['IndexFinger1_R'], 'thumb_3_r': ['Thumb3.R', 'Thumb_R.002'],
'index_2_r': ['IndexFinger2_R'], 'index_1_r': ['IndexFinger1_R', 'Index1.R', 'Index_R'],
'index_3_r': ['IndexFinger3_R'], 'index_2_r': ['IndexFinger2_R', 'Index2.R', 'Index_R.001'],
'middle_1_r': ['MiddleFinger1_R'], 'index_3_r': ['IndexFinger3_R', 'Index3.R', 'Index_R.002'],
'middle_2_r': ['MiddleFinger2_R'], 'middle_1_r': ['MiddleFinger1_R', 'Middle1.R', 'Middle_R'],
'middle_3_r': ['MiddleFinger3_R'], 'middle_2_r': ['MiddleFinger2_R', 'Middle2.R', 'Middle_R.001'],
'ring_1_r': ['RingFinger1_R'], 'middle_3_r': ['MiddleFinger3_R', 'Middle3.R', 'Middle_R.002'],
'ring_2_r': ['RingFinger2_R'], 'ring_1_r': ['RingFinger1_R', 'Ring1.R', 'Ring_R'],
'ring_3_r': ['RingFinger3_R'], 'ring_2_r': ['RingFinger2_R', 'Ring2.R', 'Ring_R.001'],
'ring_3_r': ['RingFinger3_R', 'Ring3.R', 'Ring_R.002'],
'pinky_1_r': ['Pinky1.R', 'Pinky_R'],
'pinky_2_r': ['Pinky2.R', 'Pinky_R.001'],
'pinky_3_r': ['Pinky3.R', 'Pinky_R.002'],
'breast_upper_1_l': ['BreastUpper1_L'], 'breast_upper_1_l': ['BreastUpper1_L'],
'breast_upper_2_l': ['BreastUpper2_L'], 'breast_upper_2_l': ['BreastUpper2_L'],
@@ -695,17 +743,17 @@ non_standard_mappings = {
'left_arm': [ 'left_arm': [
'mixamorig:LeftArm', 'mixamorig_LeftArm', 'mixamorig:LeftArm', 'mixamorig_LeftArm',
'ORG-upper_arm.L', 'upper_arm.L', 'ORG-upper_arm.L', 'upper_arm.L',
'lShldrBend', 'lShldrTwist', 'lArm' 'lShldrBend', 'lShldrTwist', 'lArm', 'UpperArm.L'
], ],
'left_elbow': [ 'left_elbow': [
'mixamorig:LeftForeArm', 'mixamorig_LeftForeArm', 'mixamorig:LeftForeArm', 'mixamorig_LeftForeArm',
'ORG-forearm.L', 'forearm.L', 'ORG-forearm.L', 'forearm.L',
'lForearmBend', 'lElbow', 'lForeArm' 'lForearmBend', 'lElbow', 'lForeArm', 'LowerArm.L'
], ],
'left_wrist': [ 'left_wrist': [
'mixamorig:LeftHand', 'mixamorig_LeftHand', 'mixamorig:LeftHand', 'mixamorig_LeftHand',
'ORG-hand.L', 'hand.L', 'ORG-hand.L', 'hand.L',
'lHand', 'lWrist' 'lHand', 'lWrist', 'Hand.L'
], ],
'right_shoulder': [ 'right_shoulder': [
@@ -716,59 +764,59 @@ non_standard_mappings = {
'right_arm': [ 'right_arm': [
'mixamorig:RightArm', 'mixamorig_RightArm', 'mixamorig:RightArm', 'mixamorig_RightArm',
'ORG-upper_arm.R', 'upper_arm.R', 'ORG-upper_arm.R', 'upper_arm.R',
'rShldrBend', 'rShldrTwist', 'rArm' 'rShldrBend', 'rShldrTwist', 'rArm', 'UpperArm.R'
], ],
'right_elbow': [ 'right_elbow': [
'mixamorig:RightForeArm', 'mixamorig_RightForeArm', 'mixamorig:RightForeArm', 'mixamorig_RightForeArm',
'ORG-forearm.R', 'forearm.R', 'ORG-forearm.R', 'forearm.R',
'rForearmBend', 'rElbow', 'rForeArm' 'rForearmBend', 'rElbow', 'rForeArm', 'LowerArm.R'
], ],
'right_wrist': [ 'right_wrist': [
'mixamorig:RightHand', 'mixamorig_RightHand', 'mixamorig:RightHand', 'mixamorig_RightHand',
'ORG-hand.R', 'hand.R', 'ORG-hand.R', 'hand.R',
'rHand', 'rWrist' 'rHand', 'rWrist', 'Hand.R'
], ],
'left_leg': [ 'left_leg': [
'mixamorig:LeftUpLeg', 'mixamorig_LeftUpLeg', 'mixamorig:LeftUpLeg', 'mixamorig_LeftUpLeg',
'ORG-thigh.L', 'thigh.L', 'ORG-thigh.L', 'thigh.L',
'lThighBend', 'lThigh' 'lThighBend', 'lThigh', 'UpperLeg.L'
], ],
'left_knee': [ 'left_knee': [
'mixamorig:LeftLeg', 'mixamorig_LeftLeg', 'mixamorig:LeftLeg', 'mixamorig_LeftLeg',
'ORG-shin.L', 'shin.L', 'ORG-shin.L', 'shin.L',
'lShin', 'lKnee', 'lLeg' 'lShin', 'lKnee', 'lLeg', 'LowerLeg.L'
], ],
'left_ankle': [ 'left_ankle': [
'mixamorig:LeftFoot', 'mixamorig_LeftFoot', 'mixamorig:LeftFoot', 'mixamorig_LeftFoot',
'ORG-foot.L', 'foot.L', 'ORG-foot.L', 'foot.L',
'lFoot', 'lAnkle' 'lFoot', 'lAnkle', 'Foot.L'
], ],
'left_toe': [ 'left_toe': [
'mixamorig:LeftToeBase', 'mixamorig_LeftToeBase', 'mixamorig:LeftToeBase', 'mixamorig_LeftToeBase',
'ORG-toe.L', 'toe.L', 'ORG-toe.L', 'toe.L',
'lToe' 'lToe', 'Toes.L'
], ],
'right_leg': [ 'right_leg': [
'mixamorig:RightUpLeg', 'mixamorig_RightUpLeg', 'mixamorig:RightUpLeg', 'mixamorig_RightUpLeg',
'ORG-thigh.R', 'thigh.R', 'ORG-thigh.R', 'thigh.R',
'rThighBend', 'rThigh' 'rThighBend', 'rThigh', 'UpperLeg.R'
], ],
'right_knee': [ 'right_knee': [
'mixamorig:RightLeg', 'mixamorig_RightLeg', 'mixamorig:RightLeg', 'mixamorig_RightLeg',
'ORG-shin.R', 'shin.R', 'ORG-shin.R', 'shin.R',
'rShin', 'rKnee', 'rLeg' 'rShin', 'rKnee', 'rLeg', 'LowerLeg.R'
], ],
'right_ankle': [ 'right_ankle': [
'mixamorig:RightFoot', 'mixamorig_RightFoot', 'mixamorig:RightFoot', 'mixamorig_RightFoot',
'ORG-foot.R', 'foot.R', 'ORG-foot.R', 'foot.R',
'rFoot', 'rAnkle' 'rFoot', 'rAnkle', 'Foot.R'
], ],
'right_toe': [ 'right_toe': [
'mixamorig:RightToeBase', 'mixamorig_RightToeBase', 'mixamorig:RightToeBase', 'mixamorig_RightToeBase',
'ORG-toe.R', 'toe.R', 'ORG-toe.R', 'toe.R',
'rToe' 'rToe', 'Toes.R'
], ],
'thumb_1_l': [ 'thumb_1_l': [
@@ -934,12 +982,12 @@ non_standard_mappings = {
'left_eye': [ 'left_eye': [
'mixamorig:LeftEye', 'mixamorig_LeftEye', 'mixamorig:LeftEye', 'mixamorig_LeftEye',
'ORG-eye.L', 'eye.L', 'ORG-eye.L', 'eye.L',
'lEye' 'lEye', 'Eye.L'
], ],
'right_eye': [ 'right_eye': [
'mixamorig:RightEye', 'mixamorig_RightEye', 'mixamorig:RightEye', 'mixamorig_RightEye',
'ORG-eye.R', 'eye.R', 'ORG-eye.R', 'eye.R',
'rEye' 'rEye', 'Eye.R'
] ]
} }
+13 -20
View File
@@ -13,7 +13,9 @@ from ...core.dictionaries import (
bone_hierarchy, bone_hierarchy,
acceptable_bone_names, acceptable_bone_names,
acceptable_bone_hierarchy, acceptable_bone_hierarchy,
non_standard_mappings non_standard_mappings,
reverse_bone_lookup,
simplify_bonename
) )
class AvatarToolkit_OT_StandardizeArmature(Operator): class AvatarToolkit_OT_StandardizeArmature(Operator):
@@ -134,17 +136,14 @@ class AvatarToolkit_OT_StandardizeArmature(Operator):
existing_standard_bones.add(bone.name) existing_standard_bones.add(bone.name)
logger.debug(f"Found existing standard bone: {bone.name}") logger.debug(f"Found existing standard bone: {bone.name}")
# Build a mapping of non-standard bone names to standard names # Use the reverse bone lookup that's already built and simplified
name_mapping: Dict[str, str] = {} name_mapping: Dict[str, str] = {}
for category, standard_name in standard_bones.items(): for simplified_name, category in reverse_bone_lookup.items():
if category in standard_bones:
standard_name = standard_bones[category]
# Skip if this standard bone already exists # Skip if this standard bone already exists
if standard_name in existing_standard_bones: if standard_name not in existing_standard_bones:
continue name_mapping[simplified_name] = standard_name
# Get all variants for this category
if category in non_standard_mappings:
for variant in non_standard_mappings[category]:
name_mapping[variant.lower()] = standard_name
# First pass: identify bones to rename # First pass: identify bones to rename
bones_to_rename: Dict[str, str] = {} bones_to_rename: Dict[str, str] = {}
@@ -155,20 +154,14 @@ class AvatarToolkit_OT_StandardizeArmature(Operator):
if original_name in standard_bones.values(): if original_name in standard_bones.values():
continue continue
simplified_name: str = original_name.lower().replace(' ', '').replace('_', '').replace('.', '') simplified_name: str = simplify_bonename(original_name)
# Check if this bone matches any known pattern
for variant, standard_name in name_mapping.items():
# More precise matching - exact match or with common separators
if (variant == simplified_name or
variant == original_name.lower() or
f"{variant}_" in simplified_name or
f"{variant}." in simplified_name):
# Check if this simplified bone name has a standard mapping
if simplified_name in name_mapping:
standard_name = name_mapping[simplified_name]
if original_name != standard_name: if original_name != standard_name:
bones_to_rename[original_name] = standard_name bones_to_rename[original_name] = standard_name
logger.debug(f"Identified bone to rename: {original_name} -> {standard_name}") logger.debug(f"Identified bone to rename: {original_name} -> {standard_name}")
break
# Special case for spine/chest hierarchy # Special case for spine/chest hierarchy
# If we don't have an upper chest, don't rename chest to upper chest because it will break hierarchy # If we don't have an upper chest, don't rename chest to upper chest because it will break hierarchy