# Copyright (C) 2021 Victor Soupday # This file is part of CC/iC Blender Tools # # CC/iC Blender Tools is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # CC/iC Blender Tools is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with CC/iC Blender Tools. If not, see . import math from dataclasses import dataclass @dataclass class RigifyData: """Class for keeping all data relating to bones mapping for rigify.""" head_bone: str bone_mapping: list hide_chains: list vertex_group_rename: list def get_source_bone(self, rigify_bone): for mapping in self.bone_mapping: if mapping[0] == rigify_bone: return mapping[1] def get_rigify_bone(self, source_bone): for mapping in self.bone_mapping: if mapping[1] == source_bone: return mapping[0] @dataclass class RetargetData: """Class for keeping all data relating to bones mapping for rigify.""" retarget: list retarget_corrections: dict def get_mapping_for_generation(generation): if generation == "GameBase" or generation == "NonStandardGameBase": return RigifyData("head", GAME_BASE_BONE_MAPPING, None, GAME_BASE_VERTEX_GROUP_RENAME) elif (generation == "ActorCore" or generation == "ActorScan" or generation == "ActorBuild" or generation == "AccuRig" or generation == "G3" or generation == "G3Plus" or generation == "NonStandardG3"): return RigifyData("CC_Base_Head", G3_BONE_MAPPING, G3_HIDE_CHAINS, G3_VERTEX_GROUP_RENAME) else: return None def get_retarget_for_source(source): if source == "G3": return RetargetData(RETARGET_G3, RETARGET_CORRECTIONS) elif source == "GameBase": return RetargetData(RETARGET_GAME_BASE, RETARGET_CORRECTIONS) elif source == "Mixamo": return RetargetData(RETARGET_MIXAMO, RETARGET_CORRECTIONS) elif source == "Rokoko": return None elif source == "Maya": return None elif source == "ARP": return None else: return None # METARIG_BONE, CC_BONE_HEAD, CC_BONE_TAIL, AXIS, LERP_FROM, LERP_TO # '-' before CC_BONE_HEAD means to copy the tail position, not the head # '-' before CC_BONE_TAIL means to copy the head position, not the tail G3_BONE_MAPPING = [ # Spine, Neck & Head: # spine chain ["spine", "CC_Base_Hip", ""], ["spine.001", "CC_Base_Waist", ""], ["spine.002", "CC_Base_Spine01", ""], ["spine.003", "CC_Base_Spine02", "-CC_Base_NeckTwist01"], ["spine.004", "CC_Base_NeckTwist01", ""], ["spine.005", "CC_Base_NeckTwist02", ""], ["spine.006", "CC_Base_Head", "CC_Base_Head"], # special case ["face", "CC_Base_FacialBone", "CC_Base_FacialBone"], # special case ["pelvis", "CC_Base_Pelvis", "CC_Base_Pelvis"], # Left Breast ["breast.L", "CC_Base_L_Breast", "CC_Base_L_Breast"], # Right Breast ["breast.R", "CC_Base_R_Breast", "CC_Base_R_Breast"], # Left Leg: ["thigh.L", "CC_Base_L_Thigh", ""], ["shin.L", "CC_Base_L_Calf", ""], ["foot.L", "CC_Base_L_Foot", ""], ["toe.L", "CC_Base_L_ToeBase", "CC_Base_L_ToeBase"], # Left Arm: ["shoulder.L", "CC_Base_L_Clavicle", "CC_Base_L_Clavicle"], # chain ["upper_arm.L", "CC_Base_L_Upperarm", ""], ["forearm.L", "CC_Base_L_Forearm", ""], ["hand.L", "CC_Base_L_Hand", "CC_Base_L_Hand", 0, 0.75], ["palm.01.L", "CC_Base_L_Hand", "-CC_Base_L_Index1", 0.35, 1, ["CC_Base_L_Mid1", "CC_Base_L_Ring1", "CC_Base_L_Pinky1"]], ["palm.02.L", "CC_Base_L_Hand", "-CC_Base_L_Mid1", 0.35, 1, ["CC_Base_L_Ring1", "CC_Base_L_Pinky1", "CC_Base_L_Index1"]], ["palm.03.L", "CC_Base_L_Hand", "-CC_Base_L_Ring1", 0.35, 1, ["CC_Base_L_Pinky1", "CC_Base_L_Index1", "CC_Base_L_Mid1"]], ["palm.04.L", "CC_Base_L_Hand", "-CC_Base_L_Pinky1", 0.35, 1, ["CC_Base_L_Index1", "CC_Base_L_Mid1", "CC_Base_L_Ring1"]], # Left Hand Fingers, chains ["thumb.01.L", "CC_Base_L_Thumb1", ""], # alternative fingers to map to if missing ["f_index.01.L", "CC_Base_L_Index1", "", None, None, ["CC_Base_L_Mid1", "CC_Base_L_Ring1", "CC_Base_L_Pinky1"]], ["f_middle.01.L", "CC_Base_L_Mid1", "", None, None, ["CC_Base_L_Ring1", "CC_Base_L_Pinky1", "CC_Base_L_Index1"]], ["f_ring.01.L", "CC_Base_L_Ring1", "", None, None, ["CC_Base_L_Pinky1", "CC_Base_L_Index1", "CC_Base_L_Mid1"]], ["f_pinky.01.L", "CC_Base_L_Pinky1", "", None, None, ["CC_Base_L_Index1", "CC_Base_L_Mid1", "CC_Base_L_Ring1"]], ["thumb.02.L", "CC_Base_L_Thumb2", ""], ["f_index.02.L", "CC_Base_L_Index2", "", None, None, ["CC_Base_L_Mid2", "CC_Base_L_Ring2", "CC_Base_L_Pinky2"]], ["f_middle.02.L", "CC_Base_L_Mid2", "", None, None, ["CC_Base_L_Ring2", "CC_Base_L_Pinky2", "CC_Base_L_Index2"]], ["f_ring.02.L", "CC_Base_L_Ring2", "", None, None, ["CC_Base_L_Pinky2", "CC_Base_L_Index2", "CC_Base_L_Mid2"]], ["f_pinky.02.L", "CC_Base_L_Pinky2", "", None, None, ["CC_Base_L_Index2", "CC_Base_L_Mid2", "CC_Base_L_Ring2"]], ["thumb.03.L", "CC_Base_L_Thumb3", "CC_Base_L_Thumb3"], ["f_index.03.L", "CC_Base_L_Index3", "CC_Base_L_Index3", None, None, ["CC_Base_L_Mid3", "CC_Base_L_Ring3", "CC_Base_L_Pinky3"]], ["f_middle.03.L", "CC_Base_L_Mid3", "CC_Base_L_Mid3", None, None, ["CC_Base_L_Ring3", "CC_Base_L_Pinky3", "CC_Base_L_Index3"]], ["f_ring.03.L", "CC_Base_L_Ring3", "CC_Base_L_Ring3", None, None, ["CC_Base_L_Pinky3", "CC_Base_L_Index3", "CC_Base_L_Mid3"]], ["f_pinky.03.L", "CC_Base_L_Pinky3", "CC_Base_L_Pinky3", None, None, ["CC_Base_L_Index3", "CC_Base_L_Mid3", "CC_Base_L_Ring3"]], # Right Leg, chain ["thigh.R", "CC_Base_R_Thigh", ""], ["shin.R", "CC_Base_R_Calf", ""], ["foot.R", "CC_Base_R_Foot", ""], ["toe.R", "CC_Base_R_ToeBase", "CC_Base_R_ToeBase"], # Right Arm: ["shoulder.R", "CC_Base_R_Clavicle", "CC_Base_R_Clavicle"], ["upper_arm.R", "CC_Base_R_Upperarm", ""], ["forearm.R", "CC_Base_R_Forearm", ""], ["hand.R", "CC_Base_R_Hand", "CC_Base_R_Hand", 0, 0.75], ["palm.01.R", "CC_Base_R_Hand", "-CC_Base_R_Index1", 0.35, 1, ["CC_Base_R_Mid1", "CC_Base_R_Ring1", "CC_Base_R_Pinky1"]], ["palm.02.R", "CC_Base_R_Hand", "-CC_Base_R_Mid1", 0.35, 1, ["CC_Base_R_Ring1", "CC_Base_R_Pinky1", "CC_Base_R_Index1"]], ["palm.03.R", "CC_Base_R_Hand", "-CC_Base_R_Ring1", 0.35, 1, ["CC_Base_R_Pinky1", "CC_Base_R_Index1", "CC_Base_R_Mid1"]], ["palm.04.R", "CC_Base_R_Hand", "-CC_Base_R_Pinky1", 0.35, 1, ["CC_Base_R_Index1", "CC_Base_R_Mid1", "CC_Base_R_Ring1"]], # Left Hand Fingers, chains ["thumb.01.R", "CC_Base_R_Thumb1", ""], # alternative fingers to map to if missing ["f_index.01.R", "CC_Base_R_Index1", "", None, None, ["CC_Base_R_Mid1", "CC_Base_R_Ring1", "CC_Base_R_Pinky1"]], ["f_middle.01.R", "CC_Base_R_Mid1", "", None, None, ["CC_Base_R_Ring1", "CC_Base_R_Pinky1", "CC_Base_R_Index1"]], ["f_ring.01.R", "CC_Base_R_Ring1", "", None, None, ["CC_Base_R_Pinky1", "CC_Base_R_Index1", "CC_Base_R_Mid1"]], ["f_pinky.01.R", "CC_Base_R_Pinky1", "", None, None, ["CC_Base_R_Index1", "CC_Base_R_Mid1", "CC_Base_R_Ring1"]], ["thumb.02.R", "CC_Base_R_Thumb2", ""], ["f_index.02.R", "CC_Base_R_Index2", "", None, None, ["CC_Base_R_Mid2", "CC_Base_R_Ring2", "CC_Base_R_Pinky2"]], ["f_middle.02.R", "CC_Base_R_Mid2", "", None, None, ["CC_Base_R_Ring2", "CC_Base_R_Pinky2", "CC_Base_R_Index2"]], ["f_ring.02.R", "CC_Base_R_Ring2", "", None, None, ["CC_Base_R_Pinky2", "CC_Base_R_Index2", "CC_Base_R_Mid2"]], ["f_pinky.02.R", "CC_Base_R_Pinky2", "", None, None, ["CC_Base_R_Index2", "CC_Base_R_Mid2", "CC_Base_R_Ring2"]], ["thumb.03.R", "CC_Base_R_Thumb3", "CC_Base_R_Thumb3"], ["f_index.03.R", "CC_Base_R_Index3", "CC_Base_R_Index3", None, None, ["CC_Base_R_Mid3", "CC_Base_R_Ring3", "CC_Base_R_Pinky3"]], ["f_middle.03.R", "CC_Base_R_Mid3", "CC_Base_R_Mid3", None, None, ["CC_Base_R_Ring3", "CC_Base_R_Pinky3", "CC_Base_R_Index3"]], ["f_ring.03.R", "CC_Base_R_Ring3", "CC_Base_R_Ring3", None, None, ["CC_Base_R_Pinky3", "CC_Base_R_Index3", "CC_Base_R_Mid3"]], ["f_pinky.03.R", "CC_Base_R_Pinky3", "CC_Base_R_Pinky3", None, None, ["CC_Base_R_Index3", "CC_Base_R_Mid3", "CC_Base_R_Ring3"]], ["tongue", "CC_Base_Tongue03", "-CC_Base_Tongue02"], ["tongue.001", "CC_Base_Tongue02", "-CC_Base_Tongue01"], ["tongue.002", "CC_Base_Tongue01", "CC_Base_JawRoot", 0, 0.65], ["teeth.T", "CC_Base_Teeth01", "CC_Base_Teeth01"], ["teeth.B", "CC_Base_Teeth02", "CC_Base_Teeth02"], ["eye.R", "CC_Base_R_Eye", ""], ["eye.L", "CC_Base_L_Eye", ""], # unmapped bones ["", "CC_Base_BoneRoot", ""], ["", "RL_BoneRoot", ""], ["", "CC_Base_UpperJaw", ""], ["", "CC_Base_JawRoot", ""], ["", "CC_Base_L_RibsTwist", ""], ["", "CC_Base_L_UpperarmTwist01", ""], ["", "CC_Base_L_UpperarmTwist02", ""], ["", "CC_Base_L_ElbowShareBone", ""], ["", "CC_Base_L_ForearmTwist01", ""], ["", "CC_Base_L_ForearmTwist02", ""], ["", "CC_Base_L_ThighTwist01", ""], ["", "CC_Base_L_ThighTwist02", ""], ["", "CC_Base_L_KneeShareBone", ""], ["", "CC_Base_L_CalfTwist01", ""], ["", "CC_Base_L_CalfTwist02", ""], ["", "CC_Base_L_ToeBaseShareBone", ""], ["", "CC_Base_R_RibsTwist", ""], ["", "CC_Base_R_UpperarmTwist01", ""], ["", "CC_Base_R_UpperarmTwist02", ""], ["", "CC_Base_R_ElbowShareBone", ""], ["", "CC_Base_R_ForearmTwist01", ""], ["", "CC_Base_R_ForearmTwist02", ""], ["", "CC_Base_R_ThighTwist01", ""], ["", "CC_Base_R_ThighTwist02", ""], ["", "CC_Base_R_KneeShareBone", ""], ["", "CC_Base_R_CalfTwist01", ""], ["", "CC_Base_R_CalfTwist02", ""], ["", "CC_Base_R_ToeBaseShareBone", ""], ["", "CC_Base_L_PinkyToe1", ""], ["", "CC_Base_L_RingToe1", ""], ["", "CC_Base_L_MidToe1", ""], ["", "CC_Base_L_IndexToe1", ""], ["", "CC_Base_L_BigToe1", ""], ["", "CC_Base_R_BigToe1", ""], ["", "CC_Base_R_PinkyToe1", ""], ["", "CC_Base_R_RingToe1", ""], ["", "CC_Base_R_IndexToe1", ""], ["", "CC_Base_R_MidToe1", ""], ] GAME_BASE_BONE_MAPPING = [ # Spine, Neck & Head: # spine chain ["pelvis", "pelvis", "pelvis"], ["spine", "pelvis", ""], ["spine.001", "spine_01", ""], ["spine.002", "spine_02", ""], ["spine.003", "spine_03", "-neck_01"], # moved spine.004 and spine.005 into a 50/50 split of neck_01 # as retargeting animations to the neck uses spine.004 as the base of the neck ["spine.004", "neck_01", "neck_01", 0, 0.5], ["spine.005", "neck_01", "neck_01", 0.5, 1], ["spine.006", "head", "head"], # special case ["face", "CC_Base_FacialBone", "CC_Base_FacialBone"], # special case # Left Breast ["breast.L", "CC_Base_L_RibsTwist", "CC_Base_L_RibsTwist", 0, 0.2], # Right Breast ["breast.R", "CC_Base_R_RibsTwist", "CC_Base_R_RibsTwist", 0, 0.2], # Left Leg: ["thigh.L", "thigh_l", ""], ["shin.L", "calf_l", ""], ["foot.L", "foot_l", ""], ["toe.L", "ball_l", "ball_l"], # Left Arm: ["shoulder.L", "clavicle_l", "clavicle_l"], # chain ["upper_arm.L", "upperarm_l", ""], ["forearm.L", "lowerarm_l", ""], ["hand.L", "hand_l", "hand_l", 0, 0.75], ["palm.01.L", "hand_l", "-index_01_l", 0.35, 1], ["palm.02.L", "hand_l", "-middle_01_l", 0.35, 1], ["palm.03.L", "hand_l", "-ring_01_l", 0.35, 1], ["palm.04.L", "hand_l", "-pinky_01_l", 0.35, 1], # Left Hand Fingers, chains ["thumb.01.L", "thumb_01_l", ""], ["f_index.01.L", "index_01_l", ""], ["f_middle.01.L", "middle_01_l", ""], ["f_ring.01.L", "ring_01_l", ""], ["f_pinky.01.L", "pinky_01_l", ""], ["thumb.02.L", "thumb_02_l", ""], ["f_index.02.L", "index_02_l", ""], ["f_middle.02.L", "middle_02_l", ""], ["f_ring.02.L", "ring_02_l", ""], ["f_pinky.02.L", "pinky_02_l", ""], ["thumb.03.L", "thumb_03_l", "thumb_03_l"], ["f_index.03.L", "index_03_l", "index_03_l"], ["f_middle.03.L", "middle_03_l", "middle_03_l"], ["f_ring.03.L", "ring_03_l", "ring_03_l"], ["f_pinky.03.L", "pinky_03_l", "pinky_03_l"], # Right Leg, chain ["thigh.R", "thigh_r", ""], ["shin.R", "calf_r", ""], ["foot.R", "foot_r", ""], ["toe.R", "ball_r", "ball_r"], # Right Arm: ["shoulder.R", "clavicle_r", "clavicle_r"], ["upper_arm.R", "upperarm_r", ""], ["forearm.R", "lowerarm_r", ""], ["hand.R", "hand_r", "hand_r", 0, 0.75], ["palm.01.R", "hand_r", "-index_01_r", 0.35, 1], ["palm.02.R", "hand_r", "-middle_01_r", 0.35, 1], ["palm.03.R", "hand_r", "-ring_01_r", 0.35, 1], ["palm.04.R", "hand_r", "-pinky_01_r", 0.35, 1], # Right Hand Fingers, chains ["thumb.01.R", "thumb_01_r", ""], ["f_index.01.R", "index_01_r", ""], ["f_middle.01.R", "middle_01_r", ""], ["f_ring.01.R", "ring_01_r", ""], ["f_pinky.01.R", "pinky_01_r", ""], ["thumb.02.R", "thumb_02_r", ""], ["f_index.02.R", "index_02_r", ""], ["f_middle.02.R", "middle_02_r", ""], ["f_ring.02.R", "ring_02_r", ""], ["f_pinky.02.R", "pinky_02_r", ""], ["thumb.03.R", "thumb_03_r", "thumb_03_r"], ["f_index.03.R", "index_03_r", "index_03_r"], ["f_middle.03.R", "middle_03_r", "middle_03_r"], ["f_ring.03.R", "ring_03_r", "ring_03_r"], ["f_pinky.03.R", "pinky_03_r", "pinky_03_r"], ["tongue", "CC_Base_Tongue03", "CC_Base_Tongue02"], ["tongue.001", "CC_Base_Tongue02", "CC_Base_Tongue01"], ["tongue.002", "CC_Base_Tongue01", "CC_Base_JawRoot", 0, 0.65], ["teeth.T", "CC_Base_Teeth01", "CC_Base_Teeth01"], ["teeth.B", "CC_Base_Teeth02", "CC_Base_Teeth02"], ["eye.R", "CC_Base_R_Eye", ""], ["eye.L", "CC_Base_L_Eye", ""], # unmapped bones ["", "root", ""], ["", "CC_Base_UpperJaw", ""], ["", "CC_Base_JawRoot", ""], ["", "upperarm_twist_01_l", ""], ["", "lowerarm_twist_01_l", ""], ["", "thigh_twist_01_l", ""], ["", "calf_twist_01_l", ""], ["", "upperarm_twist_01_r", ""], ["", "lowerarm_twist_01_r", ""], ["", "thigh_twist_01_r", ""], ["", "calf_twist_01_r", ""], ] # [ rl_bone_name, [rigify regex1, regex2, ...], [metarig regex1, regex2]] G3_HIDE_CHAINS = [ ["CC_Base_R_Thumb1", ["thumb\.(01|01_master|02|03)\.(R|R.001)"], ["thumb.0[1|2|3].R"]], ["CC_Base_R_Index1", ["f_index\.(01|01_master|02|03)*\.(R|R.001)"], ["palm.01.R", "f_index.0[1|2|3].R"]], ["CC_Base_R_Mid1", ["f_middle\.(01|01_master|02|03)*\.(R|R.001)"], ["palm.02.R", "f_middle.0[1|2|3].R"]], ["CC_Base_R_Ring1", ["f_ring\.(01|01_master|02|03)*\.(R|R.001)"], ["palm.03.R", "f_ring.0[1|2|3].R"]], ["CC_Base_R_Pinky1", ["f_pinky\.(01|01_master|02|03)*\.(R|R.001)"], ["palm.04.R", "f_pinky.0[1|2|3].R"]], ["CC_Base_L_Thumb1", ["thumb\.(01|01_master|02|03)*\.(L|L.001)"], ["thumb.0[1|2|3].L"]], ["CC_Base_L_Index1", ["f_index\.(01|01_master|02|03)*\.(L|L.001)"], ["palm.01.L", "f_index.0[1|2|3].L"]], ["CC_Base_L_Mid1", ["f_middle\.(01|01_master|02|03)*\.(L|L.001)"], ["palm.02.L", "f_middle.0[1|2|3].L"]], ["CC_Base_L_Ring1", ["f_ring\.(01|01_master|02|03)*\.(L|L.001)"], ["palm.03.L", "f_ring.0[1|2|3].L"]], ["CC_Base_L_Pinky1", ["f_pinky\.(01|01_master|02|03)*\.(L|L.001)"], ["palm.04.L", "f_pinky.0[1|2|3].L"]], #["DUMMY", ["palm.L", "palm.R"], []], ] G3_VERTEX_GROUP_RENAME = [ # Spine, Neck & Head: ["DEF-pelvis", "CC_Base_Pelvis"], ["DEF-spine", "CC_Base_Hip"], ["DEF-spine.001", "CC_Base_Waist"], ["DEF-spine.002", "CC_Base_Spine01"], ["DEF-spine.003", "CC_Base_Spine02"], ["DEF-spine.004", "CC_Base_NeckTwist01"], ["DEF-spine.005", "CC_Base_NeckTwist02"], ["DEF-spine.006", "CC_Base_Head"], # Left Breast: ["DEF-breast_twist.L", "CC_Base_L_RibsTwist"], ["DEF-breast.L", "CC_Base_L_Breast"], # Right Breast: ["DEF-breast_twist.R", "CC_Base_R_RibsTwist"], ["DEF-breast.R", "CC_Base_R_Breast"], # Left Leg: ["DEF-thigh.L", "CC_Base_L_Thigh"], ["DEF-thigh.L", "CC_Base_L_ThighTwist01"], ["DEF-thigh.L.001", "CC_Base_L_ThighTwist02"], ["DEF-knee_share.L", "CC_Base_L_KneeShareBone"], ["DEF-shin.L", "CC_Base_L_Calf"], ["DEF-shin.L", "CC_Base_L_CalfTwist01"], ["DEF-shin.L.001", "CC_Base_L_CalfTwist02"], ["DEF-foot.L", "CC_Base_L_Foot"], ["DEF-toe.L", "CC_Base_L_ToeBase"], # Left Foot: ["DEF-toe_big.L", "CC_Base_L_BigToe1"], ["DEF-toe_index.L", "CC_Base_L_IndexToe1"], ["DEF-toe_mid.L", "CC_Base_L_MidToe1"], ["DEF-toe_ring.L", "CC_Base_L_RingToe1"], ["DEF-toe_pinky.L", "CC_Base_L_PinkyToe1"], # Left Arm: ["DEF-shoulder.L", "CC_Base_L_Clavicle"], ["DEF-upper_arm.L", "CC_Base_L_Upperarm"], ["DEF-upper_arm.L", "CC_Base_L_UpperarmTwist01"], ["DEF-upper_arm.L.001", "CC_Base_L_UpperarmTwist02"], ["DEF-elbow_share.L", "CC_Base_L_ElbowShareBone"], ["DEF-forearm.L", "CC_Base_L_Forearm"], ["DEF-forearm.L", "CC_Base_L_ForearmTwist01"], ["DEF-forearm.L.001", "CC_Base_L_ForearmTwist02"], ["DEF-hand.L", "CC_Base_L_Hand"], # Left Hand Fingers: ["DEF-thumb.01.L", "CC_Base_L_Thumb1"], ["DEF-f_index.01.L", "CC_Base_L_Index1"], ["DEF-f_middle.01.L", "CC_Base_L_Mid1"], ["DEF-f_ring.01.L", "CC_Base_L_Ring1"], ["DEF-f_pinky.01.L", "CC_Base_L_Pinky1"], ["DEF-thumb.02.L", "CC_Base_L_Thumb2"], ["DEF-f_index.02.L", "CC_Base_L_Index2"], ["DEF-f_middle.02.L", "CC_Base_L_Mid2"], ["DEF-f_ring.02.L", "CC_Base_L_Ring2"], ["DEF-f_pinky.02.L", "CC_Base_L_Pinky2"], ["DEF-thumb.03.L", "CC_Base_L_Thumb3"], ["DEF-f_index.03.L", "CC_Base_L_Index3"], ["DEF-f_middle.03.L", "CC_Base_L_Mid3"], ["DEF-f_ring.03.L", "CC_Base_L_Ring3"], ["DEF-f_pinky.03.L", "CC_Base_L_Pinky3"], # Right Leg: ["DEF-thigh.R", "CC_Base_R_Thigh"], ["DEF-thigh.R", "CC_Base_R_ThighTwist01"], ["DEF-thigh.R.001", "CC_Base_R_ThighTwist02"], ["DEF-knee_share.R", "CC_Base_R_KneeShareBone"], ["DEF-shin.R", "CC_Base_R_Calf"], ["DEF-shin.R", "CC_Base_R_CalfTwist01"], ["DEF-shin.R.001", "CC_Base_R_CalfTwist02"], ["DEF-foot.R", "CC_Base_R_Foot"], ["DEF-toe.R", "CC_Base_R_ToeBase"], # Right Foot: ["DEF-toe_big.R", "CC_Base_R_BigToe1"], ["DEF-toe_index.R", "CC_Base_R_IndexToe1"], ["DEF-toe_mid.R", "CC_Base_R_MidToe1"], ["DEF-toe_ring.R", "CC_Base_R_RingToe1"], ["DEF-toe_pinky.R", "CC_Base_R_PinkyToe1"], # Right Arm: ["DEF-shoulder.R", "CC_Base_R_Clavicle"], ["DEF-upper_arm.R", "CC_Base_R_Upperarm"], ["DEF-upper_arm.R", "CC_Base_R_UpperarmTwist01"], ["DEF-upper_arm.R.001", "CC_Base_R_UpperarmTwist02"], ["DEF-elbow_share.R", "CC_Base_R_ElbowShareBone"], ["DEF-forearm.R", "CC_Base_R_Forearm"], ["DEF-forearm.R", "CC_Base_R_ForearmTwist01"], ["DEF-forearm.R.001", "CC_Base_R_ForearmTwist02"], ["DEF-hand.R", "CC_Base_R_Hand"], # Right Hand Fingers: ["DEF-thumb.01.R", "CC_Base_R_Thumb1"], ["DEF-f_index.01.R", "CC_Base_R_Index1"], ["DEF-f_middle.01.R", "CC_Base_R_Mid1"], ["DEF-f_ring.01.R", "CC_Base_R_Ring1"], ["DEF-f_pinky.01.R", "CC_Base_R_Pinky1"], ["DEF-thumb.02.R", "CC_Base_R_Thumb2"], ["DEF-f_index.02.R", "CC_Base_R_Index2"], ["DEF-f_middle.02.R", "CC_Base_R_Mid2"], ["DEF-f_ring.02.R", "CC_Base_R_Ring2"], ["DEF-f_pinky.02.R", "CC_Base_R_Pinky2"], ["DEF-thumb.03.R", "CC_Base_R_Thumb3"], ["DEF-f_index.03.R", "CC_Base_R_Index3"], ["DEF-f_middle.03.R", "CC_Base_R_Mid3"], ["DEF-f_ring.03.R", "CC_Base_R_Ring3"], ["DEF-f_pinky.03.R", "CC_Base_R_Pinky3"], # Tongue: ["DEF-tongue", "CC_Base_Tongue03"], ["DEF-tongue.001", "CC_Base_Tongue02"], ["DEF-tongue.002", "CC_Base_Tongue01"], # Teeth: ["DEF-teeth.T", "CC_Base_Teeth01"], ["DEF-teeth.B", "CC_Base_Teeth02"], # Eyes: ["DEF-eye.R", "CC_Base_R_Eye"], ["DEF-eye.L", "CC_Base_L_Eye"], # Jaw: ["DEF-jaw", "CC_Base_JawRoot"], ] GAME_BASE_VERTEX_GROUP_RENAME = [ # Spine, Neck & Head: ["DEF-spine", "pelvis"], ["DEF-spine.001", "spine_01"], ["DEF-spine.002", "spine_02"], ["DEF-spine.003", "spine_03"], ["DEF-spine.004", "neck_01"], ["DEF-spine.006", "head"], # Left Breast: ["DEF-breast_twist.L", "CC_Base_L_RibsTwist"], # Right Breast: ["DEF-breast_twist.R", "CC_Base_R_RibsTwist"], # Left Leg: ["DEF-thigh.L", "thigh_l"], ["DEF-thigh.L.001", "thigh_twist_01_l"], ["DEF-shin.L", "calf_l"], ["DEF-shin.L.001", "calf_twist_01_l"], ["DEF-foot.L", "foot_l"], ["DEF-toe.L", "ball_l"], # Left Arm: ["DEF-shoulder.L", "clavicle_l"], ["DEF-upper_arm.L", "upperarm_l"], ["DEF-upper_arm.L.001", "upperarm_twist_01_L"], ["DEF-forearm.L", "lowerarm_l"], ["DEF-forearm.L.001", "lowerarm_twist_01_l"], ["DEF-hand.L", "hand_l"], # Left Hand Fingers: ["DEF-thumb.01.L", "thumb_01_l"], ["DEF-f_index.01.L", "index_01_l"], ["DEF-f_middle.01.L", "middle_01_l"], ["DEF-f_ring.01.L", "ring_01_l"], ["DEF-f_pinky.01.L", "pinky_01_l"], ["DEF-thumb.02.L", "thumb_02_l"], ["DEF-f_index.02.L", "index_02_l"], ["DEF-f_middle.02.L", "middle_02_l"], ["DEF-f_ring.02.L", "ring_02_l"], ["DEF-f_pinky.02.L", "pinky_02_l"], ["DEF-thumb.03.L", "thumb_03_l"], ["DEF-f_index.03.L", "index_03_l"], ["DEF-f_middle.03.L", "middle_03_l"], ["DEF-f_ring.03.L", "ring_03_l"], ["DEF-f_pinky.03.L", "pinky_03_l"], # Right Leg: ["DEF-thigh.R", "thigh_r"], ["DEF-thigh.R.001", "thigh_twist_01_r"], ["DEF-shin.R", "calf_r"], ["DEF-shin.R.001", "calf_twist_01_r"], ["DEF-foot.R", "foot_r"], ["DEF-toe.R", "ball_r"], # Right Arm: ["DEF-shoulder.R", "clavicle_r"], ["DEF-upper_arm.R", "upperarm_r"], ["DEF-upper_arm.R.001", "upperarm_twist_01_r"], ["DEF-forearm.R", "lowerarm_r"], ["DEF-forearm.R.001", "lowerarm_twist_01_r"], ["DEF-hand.R", "hand_r"], # Right Hand Fingers: ["DEF-thumb.01.R", "thumb_01_r"], ["DEF-f_index.01.R", "index_01_r"], ["DEF-f_middle.01.R", "middle_01_r"], ["DEF-f_ring.01.R", "ring_01_r"], ["DEF-f_pinky.01.R", "pinky_01_r"], ["DEF-thumb.02.R", "thumb_02_r"], ["DEF-f_index.02.R", "index_02_r"], ["DEF-f_middle.02.R", "middle_02_r"], ["DEF-f_ring.02.R", "ring_02_r"], ["DEF-f_pinky.02.R", "pinky_02_r"], ["DEF-thumb.03.R", "thumb_03_r"], ["DEF-f_index.03.R", "index_03_r"], ["DEF-f_middle.03.R", "middle_03_r"], ["DEF-f_ring.03.R", "ring_03_r"], ["DEF-f_pinky.03.R", "pinky_03_r"], # Tongue: ["DEF-tongue", "CC_Base_Tongue03"], ["DEF-tongue.001", "CC_Base_Tongue02"], ["DEF-tongue.002", "CC_Base_Tongue01"], # Teeth: ["DEF-teeth.T", "CC_Base_Teeth01"], ["DEF-teeth.B", "CC_Base_Teeth02"], # Eyes: ["DEF-eye.R", "CC_Base_R_Eye"], ["DEF-eye.L", "CC_Base_L_Eye"], # Jaw: ["DEF-jaw", "CC_Base_JawRoot"], ] # additional bones to copy from the cc3 or rigify rigs to generate rigify deformation, mech or control bones # [source_bone, new_rigify_bone, rigify_parent, flags, layer, collection, ["SCALE", scale, ref, arg]] # flags C=Connected, L=Local location, R=Inherit rotation # layers: 31 = ORG bones, 30 = MCH bones, 29 = DEF bones # ref: reference bone(s) for position generation or constraints # arg: constraint args (influence) ADD_DEF_BONES = [ ["ORG-eye.R", "DEF-eye.R", "ORG-eye.R", "LR", 29, "DEF"], ["ORG-eye.L", "DEF-eye.L", "ORG-eye.L", "LR", 29, "DEF"], ["ORG-teeth.T", "DEF-teeth.T", "ORG-teeth.T", "LR", 29, "DEF"], ["ORG-teeth.B", "DEF-teeth.B", "ORG-teeth.B", "LR", 29, "DEF"], ["MCH-jaw_master", "MCH-teeth_master", "ORG-face", "LR", 30, "", 0.9, "MCH-jaw_master", 0.8], ["-", "teeth.B", "MCH-teeth_master", "", "", ""], ["-", "tongue.003", "MCH-teeth_master", "", "", ""], ["CC_Base_L_RibsTwist", "DEF-breast_twist.L", "ORG-breast.L", "LR", 29, "DEF"], ["CC_Base_R_RibsTwist", "DEF-breast_twist.R", "ORG-breast.R", "LR", 29, "DEF"], # "-" instructs to re-parent the existing DEF-breast bones to the new DEF-breast_twist bones. ["-", "DEF-breast.L", "DEF-breast_twist.L", "LR", 29, "DEF"], ["-", "DEF-breast.R", "DEF-breast_twist.R", "LR", 29, "DEF"], ["DEF-forearm.L", "DEF-elbow_share.L", "DEF-forearm.L", "LR", 29, "DEF", 0.667, "DEF-upper_arm.L.001", 0.5], ["DEF-shin.L", "DEF-knee_share.L", "DEF-shin.L", "LR", 29, "DEF", 0.667, "DEF-thigh.L.001", 0.5], #["DEF-toe.L", "DEF-toe_share.L", "DEF-toe.L", "LR", 29, 4.0, "DEF-foot.L", 0.5], ["CC_Base_L_BigToe1", "DEF-toe_big.L", "DEF-toe.L", "LR", 29, "DEF"], ["CC_Base_L_IndexToe1", "DEF-toe_index.L", "DEF-toe.L", "LR", 29, "DEF"], ["CC_Base_L_MidToe1", "DEF-toe_mid.L", "DEF-toe.L", "LR", 29, "DEF"], ["CC_Base_L_RingToe1", "DEF-toe_ring.L", "DEF-toe.L", "LR", 29, "DEF"], ["CC_Base_L_PinkyToe1", "DEF-toe_pinky.L", "DEF-toe.L", "LR", 29, "DEF"], ["DEF-forearm.R", "DEF-elbow_share.R", "DEF-forearm.R", "LR", 29, "DEF", 0.667, "DEF-upper_arm.R.001", 0.5], ["DEF-shin.R", "DEF-knee_share.R", "DEF-shin.R", "LR", 29, "DEF", 0.667, "DEF-thigh.R.001", 0.5], #["DEF-toe.R", "DEF-toe_share.R", "DEF-toe.R", "LR", 29, 4.0, "DEF-foot.R", 0.5], ["CC_Base_R_BigToe1", "DEF-toe_big.R", "DEF-toe.R", "LR", 29, "DEF"], ["CC_Base_R_IndexToe1", "DEF-toe_index.R", "DEF-toe.R", "LR", 29, "DEF"], ["CC_Base_R_MidToe1", "DEF-toe_mid.R", "DEF-toe.R", "LR", 29, "DEF"], ["CC_Base_R_RingToe1", "DEF-toe_ring.R", "DEF-toe.R", "LR", 29, "DEF"], ["CC_Base_R_PinkyToe1", "DEF-toe_pinky.R", "DEF-toe.R", "LR", 29, "DEF"], ] def OODTR(a): return 1.0 / (a * math.pi / 180.0) # shape key drivers for facial blend shapes# # angle values taken from the standard (CC4 Extended) facial profile and the ExPlus (CC3+ Traditional) profile SHAPE_KEY_DRIVERS = [ # CC3 ExPlus ["Bfr", "A10_Eye_Look_Out_Left", ["SCRIPTED", f"max(var, 0)*{OODTR(34)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "A12_Eye_Look_In_Right", ["SCRIPTED", f"max(var, 0)*{OODTR(25)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "A11_Eye_Look_In_Left", ["SCRIPTED", f"min(var, 0)*{OODTR(-25)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "A13_Eye_Look_Out_Right", ["SCRIPTED", f"min(var, 0)*{OODTR(-34)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "A06_Eye_Look_Up_Left", ["SCRIPTED", f"max(var, 0)*{-OODTR(-20)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_X", "LOCAL_SPACE"]], ["Bfr", "A07_Eye_Look_Up_Right", ["SCRIPTED", f"max(var, 0)*{-OODTR(-20)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_X", "LOCAL_SPACE"]], ["Bfr", "A08_Eye_Look_Down_Left", ["SCRIPTED", f"min(var, 0)*{-OODTR(20)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_X", "LOCAL_SPACE"]], ["Bfr", "A09_Eye_Look_Down_Right", ["SCRIPTED", f"min(var, 0)*{-OODTR(20)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_X", "LOCAL_SPACE"]], # CC4 extended ["Bfr", "Eye_L_Look_L", ["SCRIPTED", f"max(var, 0)*{OODTR(40)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "Eye_R_Look_L", ["SCRIPTED", f"max(var, 0)*{OODTR(30)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "Eye_L_Look_R", ["SCRIPTED", f"min(var, 0)*{OODTR(-30)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "Eye_R_Look_R", ["SCRIPTED", f"min(var, 0)*{OODTR(-40)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_Z", "LOCAL_SPACE"]], ["Bfr", "Eye_L_Look_Up", ["SCRIPTED", f"max(var, 0)*{-OODTR(-20)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_X", "LOCAL_SPACE"]], ["Bfr", "Eye_R_Look_Up", ["SCRIPTED", f"max(var, 0)*{-OODTR(-20)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_X", "LOCAL_SPACE"]], ["Bfr", "Eye_L_Look_Down", ["SCRIPTED", f"min(var, 0)*{-OODTR(22)}"], ["var", "TRANSFORMS", "MCH-eye.L", "ROT_X", "LOCAL_SPACE"]], ["Bfr", "Eye_R_Look_Down", ["SCRIPTED", f"min(var, 0)*{-OODTR(22)}"], ["var", "TRANSFORMS", "MCH-eye.R", "ROT_X", "LOCAL_SPACE"]], # Head rotation expressions ["", "Head_Turn_Up", ["SCRIPTED", f"max(var, 0)*{-OODTR(-30)}"], ["var", "TRANSFORMS", "ORG-spine.006", "ROT_X", "LOCAL_SPACE"]], ["", "Head_Turn_Down", ["SCRIPTED", f"min(var, 0)*{-OODTR(18)}"], ["var", "TRANSFORMS", "ORG-spine.006", "ROT_X", "LOCAL_SPACE"]], ["", "Head_Turn_L", ["SCRIPTED", f"max(var, 0)*{OODTR(51)}"], ["var", "TRANSFORMS", "ORG-spine.006", "ROT_Y", "LOCAL_SPACE"]], ["", "Head_Turn_R", ["SCRIPTED", f"min(var, 0)*{OODTR(-51)}"], ["var", "TRANSFORMS", "ORG-spine.006", "ROT_Y", "LOCAL_SPACE"]], ["", "Head_Tilt_L", ["SCRIPTED", f"min(var, 0)*{OODTR(-23.4)}"], ["var", "TRANSFORMS", "ORG-spine.006", "ROT_Z", "LOCAL_SPACE"]], ["", "Head_Tilt_R", ["SCRIPTED", f"max(var, 0)*{OODTR(23.4)}"], ["var", "TRANSFORMS", "ORG-spine.006", "ROT_Z", "LOCAL_SPACE"]], # jaw ["", "Jaw_Open", ["SCRIPTED", f"max(var, 0)*{OODTR(31)}"], ["var", "TRANSFORMS", "jaw_master", "ROT_X", "LOCAL_SPACE"]], ["", "Mouth_Open", ["SCRIPTED", f"max(var, 0)*{OODTR(17)}"], ["var", "TRANSFORMS", "jaw_master", "ROT_X", "LOCAL_SPACE"]], ["", "A25_Jaw_Open", ["SCRIPTED", f"max(var, 0)*{OODTR(35)}"], ["var", "TRANSFORMS", "jaw_master", "ROT_X", "LOCAL_SPACE"]], ] # roll is aligned directly from meta rig bone z_axis now # we just need to apply a few corrections for better alignment i.e. hands, fingers # [meta rig bone name, axis (T-pose), axis (A-pose)], ROLL_CORRECTION = [ # Left Hand Fingers, chains ["palm.01.L", "-Z", "X"], ["palm.02.L", "-Z", "X"], ["palm.03.L", "-Z", "X"], ["palm.04.L", "-Z", "X"], ["palm.01.R", "-Z", "-X"], ["palm.02.R", "-Z", "-X"], ["palm.03.R", "-Z", "-X"], ["palm.04.R", "-Z", "-X"], ["thumb.01.L", "Y", "Y"], ["f_index.01.L", "-Z", "X"], ["f_middle.01.L", "-Z", "X"], ["f_ring.01.L", "-Z", "X"], ["f_pinky.01.L", "-Z", "X"], ["thumb.02.L", "Y", "Y"], ["f_index.02.L", "-Z", "X"], ["f_middle.02.L", "-Z", "X"], ["f_ring.02.L", "-Z", "X"], ["f_pinky.02.L", "-Z", "X"], ["thumb.03.L", "Y", "Y"], ["f_index.03.L", "-Z", "X"], ["f_middle.03.L", "-Z", "X"], ["f_ring.03.L", "-Z", "X"], ["f_pinky.03.L", "-Z", "X"], ["thumb.01.R", "Y", "Y"], ["f_index.01.R", "-Z", "-X"], ["f_middle.01.R", "-Z", "-X"], ["f_ring.01.R", "-Z", "-X"], ["f_pinky.01.R", "-Z", "-X"], ["thumb.02.R", "Y", "Y"], ["f_index.02.R", "-Z", "-X"], ["f_middle.02.R", "-Z", "-X"], ["f_ring.02.R", "-Z", "-X"], ["f_pinky.02.R", "-Z", "-X"], ["thumb.03.R", "Y", "Y"], ["f_index.03.R", "-Z", "-X"], ["f_middle.03.R", "-Z", "-X"], ["f_ring.03.R", "-Z", "-X"], ["f_pinky.03.R", "-Z", "-X"], ["eye.L", "Z", "Z"], ["eye.R", "Z", "Z"], ["jaw", "-Z", "-Z"], ["jaw.L", "Y", "Y"], ["jaw.R", "Y", "Y"], ["teeth.T", "Z", "Z"], ["teeth.B", "Z", "Z"], ["tongue", "Z", "Z"], ["tongue.001", "Z", "Z"], ["tongue.002", "Z", "Z"], ] # relative mappings: calculate the head/tail position of the first index, # defined by the second index # relative to a bounding box containing the proceding bones # may need to specify a minimum box dimension to avoid flat boxes. # after everything else has been placed, restore these relative mappings # to place these bones in approximately the right place RELATIVE_MAPPINGS = [ # heel mappings ["heel.02.L", "BOTH", "foot.L", "toe.L", "foot.R", "toe.R"], ["heel.02.R", "BOTH", "foot.L", "toe.L", "foot.R", "toe.R"], # approx face mappings ["jaw", "HEAD", "eye.L", "eye.R", "spine.006"], ["chin", "HEAD", "eye.L", "eye.R", "spine.006"], ["chin.001", "BOTH", "eye.L", "eye.R", "spine.006"], # #["tongue", "HEAD", "eye.L", "eye.R", "spine.006"], #["tongue.001", "HEAD", "eye.L", "eye.R", "spine.006"], #["tongue.002", "BOTH", "eye.L", "eye.R", "spine.006"], # ["temple.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["jaw.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["jaw.R.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["chin.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["cheek.B.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["cheek.B.R.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.R.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.R.002", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.R.003", "BOTH", "eye.L", "eye.R", "spine.006"], # ["cheek.T.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["cheek.T.R.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.R.001", "BOTH", "eye.L", "eye.R", "spine.006"], # ["temple.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["jaw.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["jaw.L.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["chin.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["cheek.B.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["cheek.B.L.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.L.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.L.002", "HEAD", "eye.L", "eye.R", "spine.006"], ["brow.T.L.003", "BOTH", "eye.L", "eye.R", "spine.006"], # ["cheek.T.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["cheek.T.L.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.L.001", "BOTH", "eye.L", "eye.R", "spine.006"], # ["nose", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.002", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.003", "HEAD", "eye.L", "eye.R", "spine.006"], ["nose.004", "BOTH", "eye.L", "eye.R", "spine.006"], # ["lip.T.R", "HEAD", "eye.L", "eye.R", "spine.006", "spine.005"], ["lip.T.R.001", "BOTH", "eye.L", "eye.R", "spine.006", "spine.005"], # ["lip.T.L", "HEAD", "eye.L", "eye.R", "spine.006", "spine.005"], ["lip.T.L.001", "BOTH", "eye.L", "eye.R", "spine.006", "spine.005"], # ["lip.B.R", "HEAD", "eye.L", "eye.R", "spine.006", "spine.005"], ["lip.B.R.001", "BOTH", "eye.L", "eye.R", "spine.006", "spine.005"], # ["lip.B.L", "HEAD", "eye.L", "eye.R", "spine.006", "spine.005"], ["lip.B.L.001", "BOTH", "eye.L", "eye.R", "spine.006", "spine.005"], # ["brow.B.R", "HEAD", "eye.L", "eye.R"], ["brow.B.R.001", "HEAD", "eye.L", "eye.R"], ["brow.B.R.002", "HEAD", "eye.L", "eye.R"], ["brow.B.R.003", "BOTH", "eye.L", "eye.R"], # ["lid.T.R", "HEAD", "eye.L", "eye.R"], ["lid.T.R.001", "HEAD", "eye.L", "eye.R"], ["lid.T.R.002", "HEAD", "eye.L", "eye.R"], ["lid.T.R.003", "HEAD", "eye.L", "eye.R"], ["lid.B.R", "HEAD", "eye.L", "eye.R"], ["lid.B.R.001", "HEAD", "eye.L", "eye.R"], ["lid.B.R.002", "HEAD", "eye.L", "eye.R"], ["lid.B.R.003", "BOTH", "eye.L", "eye.R"], # ["brow.B.L", "HEAD", "eye.L", "eye.R"], ["brow.B.L.001", "HEAD", "eye.L", "eye.R"], ["brow.B.L.002", "HEAD", "eye.L", "eye.R"], ["brow.B.L.003", "BOTH", "eye.L", "eye.R"], # ["lid.T.L", "HEAD", "eye.L", "eye.R"], ["lid.T.L.001", "HEAD", "eye.L", "eye.R"], ["lid.T.L.002", "HEAD", "eye.L", "eye.R"], ["lid.T.L.003", "HEAD", "eye.L", "eye.R"], ["lid.B.L", "HEAD", "eye.L", "eye.R"], ["lid.B.L.001", "HEAD", "eye.L", "eye.R"], ["lid.B.L.002", "HEAD", "eye.L", "eye.R"], ["lid.B.L.003", "BOTH", "eye.L", "eye.R"], # ["forehead.R", "BOTH", "eye.L", "eye.R", "spine.006"], ["forehead.R.001", "BOTH", "eye.L", "eye.R", "spine.006"], ["forehead.R.002", "BOTH", "eye.L", "eye.R", "spine.006"], ["forehead.L", "BOTH", "eye.L", "eye.R", "spine.006"], ["forehead.L.001", "BOTH", "eye.L", "eye.R", "spine.006"], ["forehead.L.002", "BOTH", "eye.L", "eye.R", "spine.006"], # ["ear.R", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.R.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.R.002", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.R.003", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.R.004", "BOTH", "eye.L", "eye.R", "spine.006"], # ["ear.L", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.L.001", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.L.002", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.L.003", "HEAD", "eye.L", "eye.R", "spine.006"], ["ear.L.004", "BOTH", "eye.L", "eye.R", "spine.006"], ] # face bones to remove from the Rigify rig for just a basic face rig. # all prefix variations are also removed DEF-, ORG- MCH- NON_BASIC_FACE_BONES = [ "DEF-chin", "chin.002", "chin.001", "temple.R", "jaw.R", "jaw.R.001", "chin.R", "cheek.B.R", "cheek.B.R.001", "brow.T.R", "brow.T.R.001", "brow.T.R.002", "brow.T.R.003", "cheek.T.R", "cheek.T.R.001", "nose.R", "nose.R.001", "temple.L", "jaw.L", "jaw.L.001", "chin.L", "cheek.B.L", "cheek.B.L.001", "brow.T.L", "brow.T.L.001", "brow.T.L.002", "brow.T.L.003", "cheek.T.L", "cheek.T.L.001", "nose.L", "nose.L.001", "nose", "nose_master", "nose.001", "nose.002", "nose.003", "nose.004", "nose.005", "lips.R", "lips.L", "lip.T", "lip.B", "lip.T.R", "lip.T.R.001", "lip.T.L", "lip.T.L.001", "lip.B.R", "lip.B.R.001", "lip.B.L", "lip.B.L.001", "brow.B.R", "brow.B.R.001", "brow.B.R.002", "brow.B.R.003", "brow.B.R.004", "lid.T.R", "lid.T.R.001", "lid.T.R.002", "lid.T.R.003", "lid.B.R", "lid.B.R.001", "lid.B.R.002", "lid.B.R.003", "brow.B.L", "brow.B.L.001", "brow.B.L.002", "brow.B.L.003", "brow.B.L.004", "lid.T.L", "lid.T.L.001", "lid.T.L.002", "lid.T.L.003", "lid.B.L", "lid.B.L.001", "lid.B.L.002", "lid.B.L.003", "forehead.R", "forehead.R.001", "forehead.R.002", "forehead.L", "forehead.L.001", "forehead.L.002", "ear.R", "ear.R.001", "ear.R.002", "ear.R.003", "ear.R.004", "ear.L", "ear.L.001", "ear.L.002", "ear.L.003", "ear.L.004", ] # [rigify bone name, rigify re-parent, export bone name, export bone z-axis, instruction] GENERIC_EXPORT_RIG = [ # Spine, Neck & Head: ["root", "", "Rigify_BoneRoot", "Z", "-"], ["DEF-spine", "root", "CC_Base_Hip", "-Y", "PLR"], ["DEF-pelvis", "DEF-spine", "CC_Base_Pelvis", "-Y", "PLR"], ["DEF-spine.001", "DEF-spine", "CC_Base_Waist", "-Y", "PLR"], ["DEF-spine.002", "DEF-spine.001", "CC_Base_Spine01", "-Y", "PLR"], ["DEF-spine.003", "DEF-spine.002", "CC_Base_Spine02", "-Y", "PLR"], ["DEF-spine.004", "DEF-spine.003", "CC_Base_NeckTwist01", "-Y", "PLR"], ["DEF-spine.005", "DEF-spine.004", "CC_Base_NeckTwist02", "-Y", "PLR"], ["DEF-spine.006", "DEF-spine.005", "CC_Base_Head", "-Y", "PLR"], # Left Breast: ["DEF-breast_twist.L", "DEF-spine.003", "CC_Base_L_RibsTwist", "Z", "PLR"], ["DEF-breast.L", "DEF-breast_twist.L", "CC_Base_L_Breast", "Z", "PLR"], # Right Breast: ["DEF-breast_twist.R", "DEF-spine.003", "CC_Base_R_RibsTwist", "Z", "PLR"], ["DEF-breast.R", "DEF-breast_twist.R", "CC_Base_R_Breast", "Z", "PLR"], # Left Leg: ["DEF-thigh.L", "DEF-pelvis", "CC_Base_L_Thigh", "-Y", "PLR"], ["DEF-thigh.L.001", "DEF-thigh.L", "CC_Base_L_ThighTwist", "-Y", "PLR"], ["DEF-knee_share.L", "DEF-shin.L", "CC_Base_L_KneeShareBone", "-Y", "PLR"], ["DEF-shin.L", "DEF-thigh.L.001", "CC_Base_L_Calf", "-Y", "PLR"], ["DEF-shin.L.001", "DEF-shin.L", "CC_Base_L_CalfTwist", "-Y", "PLR"], ["DEF-foot.L", "DEF-shin.L.001", "CC_Base_L_Foot", "Z", "PLR"], ["DEF-toe.L", "DEF-foot.L", "CC_Base_L_ToeBase", "Z", "PLR"], # Left Foot: ["DEF-toe_big.L", "DEF-toe.L", "CC_Base_L_BigToe1", "Z", "PLR"], ["DEF-toe_index.L", "DEF-toe.L", "CC_Base_L_IndexToe1", "Z", "PLR"], ["DEF-toe_mid.L", "DEF-toe.L", "CC_Base_L_MidToe1", "Z", "PLR"], ["DEF-toe_ring.L", "DEF-toe.L", "CC_Base_L_RingToe1", "Z", "PLR"], ["DEF-toe_pinky.L", "DEF-toe.L", "CC_Base_L_PinkyToe1", "Z", "PLR"], # Left Arm: ["DEF-shoulder.L", "DEF-spine.003", "CC_Base_L_Clavicle", "-Y", "PLR"], ["DEF-upper_arm.L", "DEF-shoulder.L", "CC_Base_L_Upperarm", "-Y", "PLRC"], ["DEF-upper_arm.L.001", "DEF-upper_arm.L", "CC_Base_L_UpperarmTwist", "-Y", "PLR"], ["DEF-elbow_share.L", "DEF-forearm.L", "CC_Base_L_ElbowShareBone", "-Y", "PLR"], ["DEF-forearm.L", "DEF-upper_arm.L.001", "CC_Base_L_Forearm", "-Y", "PLR"], ["DEF-forearm.L.001", "DEF-forearm.L", "CC_Base_L_ForearmTwist", "-Y", "PLR"], ["DEF-hand.L", "DEF-forearm.L.001", "CC_Base_L_Hand", "-Y", "PLR"], # Left Hand Fingers: ["DEF-thumb.01.L", "DEF-hand.L", "CC_Base_L_Thumb1", "-Y", "PLR"], ["DEF-f_index.01.L", "DEF-hand.L", "CC_Base_L_Index1", "-Y", "PLR"], ["DEF-f_middle.01.L", "DEF-hand.L", "CC_Base_L_Mid1", "-Y", "PLR"], ["DEF-f_ring.01.L", "DEF-hand.L", "CC_Base_L_Ring1", "-Y", "PLR"], ["DEF-f_pinky.01.L", "DEF-hand.L", "CC_Base_L_Pinky1", "-Y", "PLR"], ["DEF-thumb.02.L", "DEF-thumb.01.L", "CC_Base_L_Thumb2", "-Y", "PLR"], ["DEF-f_index.02.L", "DEF-f_index.01.L", "CC_Base_L_Index2", "-Y", "PLR"], ["DEF-f_middle.02.L", "DEF-f_middle.01.L", "CC_Base_L_Mid2", "-Y", "PLR"], ["DEF-f_ring.02.L", "DEF-f_ring.01.L", "CC_Base_L_Ring2", "-Y", "PLR"], ["DEF-f_pinky.02.L", "DEF-f_pinky.01.L", "CC_Base_L_Pinky2", "-Y", "PLR"], ["DEF-thumb.03.L", "DEF-thumb.02.L", "CC_Base_L_Thumb3", "-Y", "PLR"], ["DEF-f_index.03.L", "DEF-f_index.02.L", "CC_Base_L_Index3", "-Y", "PLR"], ["DEF-f_middle.03.L", "DEF-f_middle.02.L", "CC_Base_L_Mid3", "-Y", "PLR"], ["DEF-f_ring.03.L", "DEF-f_ring.02.L", "CC_Base_L_Ring3", "-Y", "PLR"], ["DEF-f_pinky.03.L", "DEF-f_pinky.02.L", "CC_Base_L_Pinky3", "-Y", "PLR"], # Right Leg: ["DEF-thigh.R", "DEF-pelvis", "CC_Base_R_Thigh", "-Y", "PLR"], ["DEF-thigh.R.001", "DEF-thigh.R", "CC_Base_R_ThighTwist", "-Y", "PLR"], ["DEF-knee_share.R", "DEF-shin.R", "CC_Base_R_KneeShareBone", "-Y", "PLR"], ["DEF-shin.R", "DEF-thigh.R.001", "CC_Base_R_Calf", "-Y", "PLR"], ["DEF-shin.R.001", "DEF-shin.R", "CC_Base_R_CalfTwist", "-Y", "PLR"], ["DEF-foot.R", "DEF-shin.R.001", "CC_Base_R_Foot", "Z", "PLR"], ["DEF-toe.R", "DEF-foot.R", "CC_Base_R_ToeBase", "Z", "PLR"], # Right Foot: ["DEF-toe_big.R", "DEF-toe.R", "CC_Base_R_BigToe1", "Z", "PLR"], ["DEF-toe_index.R", "DEF-toe.R", "CC_Base_R_IndexToe1", "Z", "PLR"], ["DEF-toe_mid.R", "DEF-toe.R", "CC_Base_R_MidToe1", "Z", "PLR"], ["DEF-toe_ring.R", "DEF-toe.R", "CC_Base_R_RingToe1", "Z", "PLR"], ["DEF-toe_pinky.R", "DEF-toe.R", "CC_Base_R_PinkyToe1", "Z", "PLR"], # Right Arm: ["DEF-shoulder.R", "DEF-spine.003", "CC_Base_R_Clavicle", "-Y", "PLR"], ["DEF-upper_arm.R", "DEF-shoulder.R", "CC_Base_R_Upperarm", "-Y", "PLRC"], ["DEF-upper_arm.R.001", "DEF-upper_arm.R", "CC_Base_R_UpperarmTwist", "-Y", "PLR"], ["DEF-elbow_share.R", "DEF-forearm.R", "CC_Base_R_ElbowShareBone", "-Y", "PLR"], ["DEF-forearm.R", "DEF-upper_arm.R.001", "CC_Base_R_Forearm", "-Y", "PLR"], ["DEF-forearm.R.001", "DEF-forearm.R", "CC_Base_R_ForearmTwist", "-Y", "PLR"], ["DEF-hand.R", "DEF-forearm.R.001", "CC_Base_R_Hand", "-Y", "PLR"], # Right Hand Fingers: ["DEF-thumb.01.R", "DEF-hand.R", "CC_Base_R_Thumb1", "-Y", "PLR"], ["DEF-f_index.01.R", "DEF-hand.R", "CC_Base_R_Index1", "-Y", "PLR"], ["DEF-f_middle.01.R", "DEF-hand.R", "CC_Base_R_Mid1", "-Y", "PLR"], ["DEF-f_ring.01.R", "DEF-hand.R", "CC_Base_R_Ring1", "-Y", "PLR"], ["DEF-f_pinky.01.R", "DEF-hand.R", "CC_Base_R_Pinky1", "-Y", "PLR"], ["DEF-thumb.02.R", "DEF-thumb.01.R", "CC_Base_R_Thumb2", "-Y", "PLR"], ["DEF-f_index.02.R", "DEF-f_index.01.R", "CC_Base_R_Index2", "-Y", "PLR"], ["DEF-f_middle.02.R", "DEF-f_middle.01.R", "CC_Base_R_Mid2", "-Y", "PLR"], ["DEF-f_ring.02.R", "DEF-f_ring.01.R", "CC_Base_R_Ring2", "-Y", "PLR"], ["DEF-f_pinky.02.R", "DEF-f_pinky.01.R", "CC_Base_R_Pinky2", "-Y", "PLR"], ["DEF-thumb.03.R", "DEF-thumb.02.R", "CC_Base_R_Thumb3", "-Y", "PLR"], ["DEF-f_index.03.R", "DEF-f_index.02.R", "CC_Base_R_Index3", "-Y", "PLR"], ["DEF-f_middle.03.R", "DEF-f_middle.02.R", "CC_Base_R_Mid3", "-Y", "PLR"], ["DEF-f_ring.03.R", "DEF-f_ring.02.R", "CC_Base_R_Ring3", "-Y", "PLR"], ["DEF-f_pinky.03.R", "DEF-f_pinky.02.R", "CC_Base_R_Pinky3", "-Y", "PLR"], # Tongue: ["DEF-tongue", "DEF-jaw", "CC_Base_Tongue03", "X", "LRP"], ["DEF-tongue.001", "DEF-tongue", "CC_Base_Tongue02", "X", "PLR"], ["DEF-tongue.002", "DEF-tongue.001", "CC_Base_Tongue01", "X", "PLR"], # Teeth: ["DEF-teeth.T", "DEF-spine.006", "CC_Base_Teeth01", "-X", "PLR"], ["DEF-teeth.B", "DEF-jaw", "CC_Base_Teeth02", "X", "PLR"], # Eyes: ["DEF-eye.R", "DEF-spine.006", "CC_Base_R_Eye", "Z", "PLR"], ["DEF-eye.L", "DEF-spine.006", "CC_Base_L_Eye", "Z", "PLR"], # Jaw: ["DEF-jaw", "DEF-spine.006", "CC_Base_JawRoot", "X", "PLRT", "jaw_master"], ] # Rigify control bones to resize CONTROL_MODIFY = [ ["hand_ik.R", [-1, 1.5, 1.5], [0, 0, 0.0125], [0, 0, 0]], ["hand_ik.L", [1, 1.5, 1.5], [0, 0, 0.0125], [0, 0, 0]], ["foot_ik.R", [-1.25, 1.5, 1], [0, 0.05, 0], [0, 0, 0]], ["foot_ik.L", [1.25, 1.5, 1], [0, 0.05, 0], [0, 0, 0]], ["head", [1.25, 1, 1.25], [0, 0.02, 0], [0, 0, 0]], ["jaw", [1.25, 1.25, 1.25], [0, 0, 0], [0, 0, 0]], ["jaw_master", [1.25, 1.25, 1.25], [0, 0, 0], [0, 0, 0]], ["shoulder.R", [-1.5, 1.5, 1.5], [0, 0, 0], [0, 0, 0]], ["shoulder.L", [1.5, 1.5, 1.5], [0, 0, 0], [0, 0, 0]], ["hips", [1.35, 1.35, 1.35], [0, 0, -0.015], [0, 0, 0]], ["chest", [1.1, 1.5, 1.1], [0, 0.025, -0.025], [0, 0, 0]], ["torso", [1.2, 1.2, 1.2], [0, 0, 0], [0, 0, 0]], ["neck", [1.5, 1, 1.5], [0, 0, 0], [0, 0, 0]], ["tongue", [1.5, 1.5, 1.5], [0, 0.015, -0.01], [0, 0, 0]], ["tongue_master", [1.5, 1.5, 1.5], [0, 0.015, -0.01], [0, 0, 0]], ["foot_heel_ik.L", [1.5, 1.5, 1.5], [0, 0.015, 0], [0, 0, 0]], ["foot_heel_ik.R", [-1.5, 1.5, 1.5], [0, 0.015, 0], [0, 0, 0]], ] RIGIFY_PARAMS = [ ["upper_arm.R", "rotation_axis", "x"], ["upper_arm.L", "rotation_axis", "x"], ["thigh.R", "rotation_axis", "x"], ["thigh.L", "rotation_axis", "x"], ["f_index.01.L", "primary_rotation_axis", "X"], ["f_middle.01.L", "primary_rotation_axis", "X"], ["f_ring.01.L", "primary_rotation_axis", "X"], ["f_pinky.01.L", "primary_rotation_axis", "X"], ["f_index.01.R", "primary_rotation_axis", "X"], ["f_middle.01.R", "primary_rotation_axis", "X"], ["f_ring.01.R", "primary_rotation_axis", "X"], ["f_pinky.01.R", "primary_rotation_axis", "X"], ] UV_THRESHOLD = 0.001 # G3Plus UV coordinates of the face rig bones, to reverse calculate the spacial coordinates UV_TARGETS_G3PLUS = [ # connected mapping: map (head)->(tail/head)->(tail/head->(tail/head)... ["nose", "CONNECTED", [0.500, 0.650], [0.500, 0.597], [0.500, 0.573], [0.500, 0.550], [0.500, 0.531], [0.500, 0.516]], ["jaw", "CONNECTED", [0.500, 0.339], [0.500, 0.395], [0.500, 0.432], [0.500, 0.453]], ["cheek.T.R", "CONNECTED", [0.360, 0.633], [0.413, 0.593], [0.453, 0.606], [0.446, 0.559], [0.500, 0.573]], ["temple.R", "CONNECTED", [0.250, 0.645], [0.289, 0.492], [0.360, 0.435], [0.429, 0.408], [0.443, 0.486], [0.363, 0.533], [0.360, 0.633], [0.371, 0.660], [0.414, 0.682], [0.458, 0.678], [0.500, 0.650]], ["ear.R", "CONNECTED", [0.246, 0.566], [0.228, 0.640], [0.196, 0.623], [0.207, 0.554], [0.235, 0.534], [0.246, 0.566]], ["lid.T.R", "CONNECTED", [0.398, 0.638], [0.417, 0.644], [0.431, 0.644], [0.444, 0.641], [0.450, 0.635], [0.437, 0.632], [0.422, 0.631], [0.407, 0.633], [0.398, 0.638]], ["brow.B.R", "CONNECTED", [0.388, 0.646], [0.413, 0.661], [0.435, 0.662], [0.454, 0.653], [0.460, 0.638]], ["lip.T.R", "CONNECTED", [0.500, 0.512], [0.468, 0.508], [0.443, 0.486]], ["lip.B.R", "CONNECTED", [0.500, 0.463], [0.478, 0.467], [0.443, 0.486]], # disconnected mapping: map head and tail pairs ["forehead.R", "DISCONNECTED", [ [0.461, 0.740], [0.458, 0.678] ], [ [0.410, 0.741], [0.414, 0.682] ], [ [0.358, 0.725], [0.371, 0.660] ] ], # set the top of the 'head' bone #["spine.006", "TAIL", [0.688, 0.953]], ] # G3 UV coordinates of the face rig bones, to reverse calculate the spacial coordinates UV_TARGETS_G3 = [ # connected mapping: map (head)->(tail/head)->(tail/head->(tail/head)... ["nose", "CONNECTED", [0.4999, 0.3614], [0.5000, 0.3080], [0.5000, 0.2858], [0.5000, 0.2668], [0.5000, 0.2507], [0.5000, 0.2366]], ["jaw", "CONNECTED", [0.5000, 0.0347], [0.5000, 0.1105], [0.5000, 0.1488], [0.5000, 0.1688]], ["cheek.T.R", "CONNECTED", [0.3467, 0.3457], [0.4058, 0.3062], [0.4519, 0.3188], [0.4493, 0.2728], [0.5000, 0.2858]], ["temple.R", "CONNECTED", [0.2028, 0.4031], [0.2418, 0.1913], [0.3349, 0.1369], [0.4211, 0.1202], [0.4378, 0.2023], [0.3414, 0.2428], [0.3467, 0.3457], [0.3625, 0.3725], [0.4110, 0.3929], [0.4557, 0.3907], [0.4999, 0.3614]], ["ear.R", "CONNECTED", [0.1467, 0.3356], [0.1032, 0.4324], [0.1441, 0.4936], [0.0794, 0.3163], [0.1237, 0.2927], [0.1467, 0.3356]], ["lid.T.R", "CONNECTED", [0.3884, 0.3452], [0.4095, 0.3517], [0.4262, 0.3504], [0.4423, 0.3488], [0.4474, 0.3435], [0.4343, 0.3375], [0.4169, 0.3360], [0.3987, 0.3383], [0.3884, 0.3452]], ["brow.B.R", "CONNECTED", [0.3789, 0.3567], [0.4082, 0.3716], [0.4314, 0.3740], [0.4522, 0.3651], [0.4578, 0.3479]], ["lip.T.R", "CONNECTED", [0.5000, 0.2316], [0.4642, 0.2281], [0.4378, 0.2023]], ["lip.B.R", "CONNECTED", [0.5000, 0.1787], [0.4744, 0.1818], [0.4378, 0.2023]], # disconnected mapping: map head and tail pairs ["forehead.R", "DISCONNECTED", [ [0.4600, 0.4592], [0.4557, 0.3907] ], [ [0.4110, 0.4565], [0.4110, 0.3929] ], [ [0.3584, 0.4407], [0.3625, 0.3725] ] ], # set the top of the 'head' bone #["spine.006", "TAIL", [0.688, 0.953]], ] # body object types (with facial blend shapes) BODY_TYPES = ["BODY", "TEARLINE", "OCCLUSION"] # deformation bone vertex group name prefixes to clear and initialise with random test weights # (by checking for these test weights we can tell if the parent with automatic weights function succeeded or not) FACE_DEF_BONE_PREFIX = [ "DEF-forehead.", "DEF-brow.", "DEF-lid.", "DEF-cheek.", "DEF-temple.", "DEF-jaw.", "DEF-lip.", "DEF-ear.", "DEF-nose", "DEF-chin", # don't use DEF-Jaw as this is based on the original CC3 weights. ] # deformation bones in the Rigify rig to turn off when re-parenting the face objects to the Rigify face rig. FACE_DEF_BONE_PREPASS = [ "DEF-eye.L", "DEF-eye.R", "DEF-teeth.T", "DEF-teeth.B", "DEF-jaw", ] # ShapeKey names to look for to test if a mesh is a face object. e.g. brows / beards / tearline etc... FACE_TEST_SHAPEKEYS = [ "Eye_Wide_L", "Eye_Wide_R", "Eye_Blink_L", "Eye_Blink_R", "Nose_Scrunch", "Nose_Flank_Raise_L", "Nose_Flank_Raise_R", "Mouth_Smile_L", "Mouth_Smile_R", "Mouth_Open", "Brow_Raise_L", "Brow_Raise_R", "Cheek_Blow_L", "Cheek_Blow_R", "Tongue_In", "Tongue_Up", "V_Open", "V_Tongue_up", ] # bone names to test for to see if armature or action is for a CC3:G3/G3Plus/ActorCore rig. CC3_BONE_NAMES = [ "CC_Base_BoneRoot", "CC_Base_Hip", "CC_Base_FacialBone" ] ACTOR_CORE_BONE_NAMES = [ "RL_BoneRoot", "CC_Base_Hip", "CC_Base_FacialBone" ] # bone names to test for to see if armature or action is for a iClone:G3/G3Plus/ActorCore rig. # (iClone does not export bones with the "CC_Base_" prefix) ICLONE_BONE_NAMES = [ "BoneRoot", "Hip", "FacialBone" ] # bone names to test for to see if armature or action is for a CC3:GameBase rig. GAME_BASE_BONE_NAMES = [ "pelvis", "spine_01", "CC_Base_FacialBone" ] # bone names to test for to see if armature or action is for a mixamo rig MIXAMO_BONE_NAMES = [ "mixamorig(|[0-9]):Hips", "mixamorig(|[0-9]):Spine", "mixamorig(|[0-9]):Head" ] # bone names to test for to see if armature or action is for a rigify rig RIGIFY_BONE_NAMES = [ "MCH-torso.parent", "ORG-spine", "spine_fk" ] # bone names to test for to see if armature or action is for a rigify rig RL_RIGIFY_BONE_NAMES = [ "MCH-torso.parent", "ORG-spine", "spine_fk", "DEF-elbow_share.L", "DEF-elbow_share.R" ] # the minimum size of the relative mapping bounding box # 5cm BOX_PADDING = 0.01 ALLOWED_RIG_BONES = [ "(CC_Base_|RL_|)BoneRoot", "CC_Base_FacialBone", "mixamorig(|[0-9]):Hips", ] # list of the Rigify control bones that animations are retargeted to RETARGET_RIGIFY_BONES = [ "root", "hips", "torso", "spine_fk", "spine_fk.001", "spine_fk.002", "chest", "spine_fk.003", "neck", "tweak_spine", "tweak_spine.001", "tweak_spine.002", "tweak_spine.003", "tweak_spine.004", "tweak_spine.005", "head", "neck", "breast.L", "breast.R", "thigh_fk.L", "shin_fk.L", "foot_fk.L", "toe_fk.L", "toe.L", "shoulder.L", "upper_arm_fk.L", "forearm_fk.L", "hand_fk.L", "thumb.01.L", "f_index.01.L", "f_middle.01.L", "f_ring.01.L", "f_pinky.01.L", "thumb.02.L", "f_index.02.L", "f_middle.02.L", "f_ring.02.L", "f_pinky.02.L", "thumb.03.L", "f_index.03.L", "f_middle.03.L", "f_ring.03.L", "f_pinky.03.L", "thigh_fk.R", "shin_fk.R", "foot_fk.R", "toe_fk.R", "toe.R", "shoulder.R", "upper_arm_fk.R", "forearm_fk.R", "hand_fk.R", "thumb.01.R", "f_index.01.R", "f_middle.01.R", "f_ring.01.R", "f_pinky.01.R", "thumb.02.R", "f_index.02.R", "f_middle.02.R", "f_ring.02.R", "f_pinky.02.R", "thumb.03.R", "f_index.03.R", "f_middle.03.R", "f_ring.03.R", "f_pinky.03.R", "eye.L", "eye.R", "eyes", "jaw_master", "teeth.T", "teeth.B", "tongue_master", "tongue", "tongue.001", "tongue.002", "tweak_tongue", "tweak_tongue.001", "tweak_tongue.002", "hand_ik.L", "hand_ik.R", "foot_ik.L", "foot_ik.R", "toe_ik.L", "toe_ik.R", #"upper_arm_ik.L", "upper_arm_ik.R", "upper_arm_parent.R", "upper_arm_parent.L", #"thigh_ik.R", "thigh_ik.L", "thigh_parent.R", "thigh_parent.L", "foot_heel_ik.R", "foot_heel_ik.L", ] RETARGET_G3 = [ # flags (flags are processed in order of left to right) # # "L" - constrain location (retarget rig to rigify rig) # "R" - constrain rotation (retarget rig to rigify rig) # "N" - no source -> retarget constraints (to avoid duplicate constraints) # "C" - copy rigify bone positions # "P" - parent retarget correction: for when source bone and org bone # are not the in the same orientation # # flags with parameters (are processed left to right and parameters are consecutive) # # "+", copy_bone - this org bone needs be added copied from copy_bone # "I", influence - multiply the influence of the source -> org copy location/rotation # "T", next_bone - parent correction & align with target: like "P" but maintain alignment # between the org bone and next_bone. # for when the source and ORG bones should be in alignment but aren't # because of strange bone orientations (Mixamo!) in the source rig. # "D", root_bone - maintain distance from root_bone # "A", bone_1, bone_2 - copy average location and rotation from bone_1 and bone_2 # "t", pivot_on_tail - when generating a parent retarget correction, pivot from the tail not the head # # [origin_bone, orign_bone_parent, source_bone(regex match), rigify_target_bone, flags, *params] ["root", "", "(CC_Base_|RL_|)BoneRoot$", "root", "LR"], # hips ["ORG-hip", "", "(CC_Base_|)Hip$", "", "+PLR", "rigify:ORG-spine"], ["ORG-spine", "ORG-hip", "(CC_Base_|)Pelvis$", "torso", "LR"], ["ORG-spine", "ORG-hip", "(CC_Base_|)Pelvis$", "spine_fk", "NLR"], ["ORG-pelvis", "ORG-hip", "(CC_Base_|)Pelvis$", "hips", "PLR"], # spine ["ORG-spine.001", "ORG-spine", "(CC_Base_|)Waist$", "spine_fk.001", "LR"], ["ORG-spine.002", "ORG-spine.001", "(CC_Base_|)Spine01", "spine_fk.002", "LR"], ["ORG-spine.002", "ORG-spine.001", "(CC_Base_|)Spine01", "chest", "NLR"], ["ORG-spine.003", "ORG-spine.002", "(CC_Base_|)Spine02", "spine_fk.003", "LR"], ["ORG-spine.004", "ORG-spine.003", "(CC_Base_|)NeckTwist01", "neck", "LR"], ["ORG-spine.005", "ORG-spine.004", "(CC_Base_|)NeckTwist02", "tweak_spine.005", "L"], ["ORG-spine.006", "ORG-spine.005", "(CC_Base_|)Head$", "head", "LR"], # torso ["ORG-breast.L", "ORG-spine.003", "(CC_Base_|)L_Breast$", "breast.L", "LR"], ["ORG-breast.R", "ORG-spine.003", "(CC_Base_|)R_Breast$", "breast.R", "LR"], # left leg ["ORG-thigh.L", "ORG-pelvis", "(CC_Base_|)L_Thigh$", "thigh_fk.L", "LR"], ["ORG-shin.L", "ORG-thigh.L", "(CC_Base_|)L_Calf$", "shin_fk.L", "LR"], ["ORG-foot.L", "ORG-shin.L", "(CC_Base_|)L_Foot$", "foot_fk.L", "PLR"], ["ORG-toe.L", "ORG-foot.L", "(CC_Base_|)L_ToeBase$", "toe_fk.L", "PLR"], #post 3.1 ["ORG-toe.L", "ORG-foot.L", "(CC_Base_|)L_ToeBase$", "toe.L", "PLR"], #pre 3.1 # left arm ["ORG-shoulder.L", "ORG-spine.003", "(CC_Base_|)L_Clavicle$", "shoulder.L", "LR"], ["ORG-upper_arm.L", "ORG-shoulder.L", "(CC_Base_|)L_Upperarm$", "upper_arm_fk.L", "LR"], ["ORG-forearm.L", "ORG-upper_arm.L", "(CC_Base_|)L_Forearm$", "forearm_fk.L", "LR"], ["ORG-hand.L", "ORG-forearm.L", "(CC_Base_|)L_Hand$", "hand_fk.L", "LR"], # left fingers ["ORG-thumb.01.L", "ORG-hand.L", "(CC_Base_|)L_Thumb1", "thumb.01.L", "LR"], ["ORG-f_index.01.L", "ORG-hand.L", "(CC_Base_|)L_Index1", "f_index.01.L", "LR"], ["ORG-f_middle.01.L", "ORG-hand.L", "(CC_Base_|)L_Mid1", "f_middle.01.L", "LR"], ["ORG-f_ring.01.L", "ORG-hand.L", "(CC_Base_|)L_Ring1", "f_ring.01.L", "LR"], ["ORG-f_pinky.01.L", "ORG-hand.L", "(CC_Base_|)L_Pinky1", "f_pinky.01.L", "LR"], ["ORG-thumb.02.L", "ORG-thumb.01.L", "(CC_Base_|)L_Thumb2", "thumb.02.L", "LR"], ["ORG-f_index.02.L", "ORG-f_index.01.L", "(CC_Base_|)L_Index2", "f_index.02.L", "LR"], ["ORG-f_middle.02.L", "ORG-f_middle.01.L", "(CC_Base_|)L_Mid2", "f_middle.02.L", "LR"], ["ORG-f_ring.02.L", "ORG-f_ring.01.L", "(CC_Base_|)L_Ring2", "f_ring.02.L", "LR"], ["ORG-f_pinky.02.L", "ORG-f_pinky.01.L", "(CC_Base_|)L_Pinky2", "f_pinky.02.L", "LR"], ["ORG-thumb.03.L", "ORG-thumb.02.L", "(CC_Base_|)L_Thumb3", "thumb.03.L", "LR"], ["ORG-f_index.03.L", "ORG-f_index.02.L", "(CC_Base_|)L_Index3", "f_index.03.L", "LR"], ["ORG-f_middle.03.L", "ORG-f_middle.02.L", "(CC_Base_|)L_Mid3", "f_middle.03.L", "LR"], ["ORG-f_ring.03.L", "ORG-f_ring.02.L", "(CC_Base_|)L_Ring3", "f_ring.03.L", "LR"], ["ORG-f_pinky.03.L", "ORG-f_pinky.02.L", "(CC_Base_|)L_Pinky3", "f_pinky.03.L", "LR"], # right leg ["ORG-thigh.R", "ORG-pelvis", "(CC_Base_|)R_Thigh$", "thigh_fk.R", "LR"], ["ORG-shin.R", "ORG-thigh.R", "(CC_Base_|)R_Calf$", "shin_fk.R", "LR"], ["ORG-foot.R", "ORG-shin.R", "(CC_Base_|)R_Foot$", "foot_fk.R", "PLR"], ["ORG-toe.R", "ORG-foot.R", "(CC_Base_|)R_ToeBase$", "toe_fk.R", "PLR"], #post 3.1 ["ORG-toe.R", "ORG-foot.R", "(CC_Base_|)R_ToeBase$", "toe.R", "PLR"], #pre 3.1 # right arm ["ORG-shoulder.R", "ORG-spine.003", "(CC_Base_|)R_Clavicle$", "shoulder.R", "LR"], ["ORG-upper_arm.R", "ORG-shoulder.R", "(CC_Base_|)R_Upperarm$", "upper_arm_fk.R", "LR"], ["ORG-forearm.R", "ORG-upper_arm.R", "(CC_Base_|)R_Forearm$", "forearm_fk.R", "LR"], ["ORG-hand.R", "ORG-forearm.R", "(CC_Base_|)R_Hand$", "hand_fk.R", "LR"], # right fingers ["ORG-thumb.01.R", "ORG-hand.R", "(CC_Base_|)R_Thumb1", "thumb.01.R", "LR"], ["ORG-f_index.01.R", "ORG-hand.R", "(CC_Base_|)R_Index1", "f_index.01.R", "LR"], ["ORG-f_middle.01.R", "ORG-hand.R", "(CC_Base_|)R_Mid1", "f_middle.01.R", "LR"], ["ORG-f_ring.01.R", "ORG-hand.R", "(CC_Base_|)R_Ring1", "f_ring.01.R", "LR"], ["ORG-f_pinky.01.R", "ORG-hand.R", "(CC_Base_|)R_Pinky1", "f_pinky.01.R", "LR"], ["ORG-thumb.02.R", "ORG-thumb.01.R", "(CC_Base_|)R_Thumb2", "thumb.02.R", "LR"], ["ORG-f_index.02.R", "ORG-f_index.01.R", "(CC_Base_|)R_Index2", "f_index.02.R", "LR"], ["ORG-f_middle.02.R", "ORG-f_middle.01.R", "(CC_Base_|)R_Mid2", "f_middle.02.R", "LR"], ["ORG-f_ring.02.R", "ORG-f_ring.01.R", "(CC_Base_|)R_Ring2", "f_ring.02.R", "LR"], ["ORG-f_pinky.02.R", "ORG-f_pinky.01.R", "(CC_Base_|)R_Pinky2", "f_pinky.02.R", "LR"], ["ORG-thumb.03.R", "ORG-thumb.02.R", "(CC_Base_|)R_Thumb3", "thumb.03.R", "LR"], ["ORG-f_index.03.R", "ORG-f_index.02.R", "(CC_Base_|)R_Index3", "f_index.03.R", "LR"], ["ORG-f_middle.03.R", "ORG-f_middle.02.R", "(CC_Base_|)R_Mid3", "f_middle.03.R", "LR"], ["ORG-f_ring.03.R", "ORG-f_ring.02.R", "(CC_Base_|)R_Ring3", "f_ring.03.R", "LR"], ["ORG-f_pinky.03.R", "ORG-f_pinky.02.R", "(CC_Base_|)R_Pinky3", "f_pinky.03.R", "LR"], # face ["ORG-face", "ORG-spine.006", "(CC_Base_|)FacialBone$", "", "PLR"], # eyes ["ORG-eye.L", "ORG-face", "(CC_Base_|)L_Eye$", "eye.L", "PLRD", "ORG-eye.L"], ["ORG-eye.R", "ORG-face", "(CC_Base_|)R_Eye$", "eye.R", "PLRD", "ORG-eye.R"], ["ORG-eyes", "ORG-face", "", "eyes", "+LRA", "rigify:eyes", "eye.R", "eye.L"], # jaw ["ORG-jaw_root", "ORG-face", "(CC_Base_|)JawRoot$", "jaw_master", "+PLR", "rigify:MCH-jaw_master"], ["ORG-jaw", "ORG-jaw_root", "", "", ""], # teeth ["ORG-teeth.T", "ORG-face", "(CC_Base_|)Teeth01", "teeth.T", "tPLR"], ["ORG-teeth.B", "ORG-jaw", "(CC_Base_|)Teeth02", "teeth.B", "tPLR"], # tongue (full face) ["ORG-tongue", "ORG-jaw", "(CC_Base_|)Tongue03", "tongue_master", "PLR"], ["ORG-tongue.001", "ORG-jaw", "(CC_Base_|)Tongue02", "tongue.001", "PL"], ["ORG-tongue.002", "ORG-jaw", "(CC_Base_|)Tongue01", "tongue.002", "PL"], # IK bones # "Z" to zero the pose when retargetting # these bones should reset the pose as they follow a damped track #["ORG-upper_arm.L", "ORG-shoulder.L", "(CC_Base_|)L_Upperarm$", "upper_arm_ik.L", "Z"], #["ORG-upper_arm.R", "ORG-shoulder.R", "(CC_Base_|)R_Upperarm$", "upper_arm_ik.R", "Z"], #["ORG-thigh.L", "ORG-pelvis", "(CC_Base_|)L_Thigh$", "thigh_ik.L", "Z"], #["ORG-thigh.R", "ORG-pelvis", "(CC_Base_|)R_Thigh$", "thigh_ik.R", "Z"], #/ ["ORG-hand.L", "ORG-forearm.L", "(CC_Base_|)L_Hand$", "hand_ik.L", "NLR"], ["ORG-hand.R", "ORG-forearm.R", "(CC_Base_|)R_Hand$", "hand_ik.R", "NLR"], ["ORG-foot.L", "ORG-shin.L", "(CC_Base_|)L_Foot$", "foot_ik.L", "NLR"], ["ORG-foot.R", "ORG-shin.R", "(CC_Base_|)R_Foot$", "foot_ik.R", "NLR"], ["ORG-toe.L", "ORG-foot.L", "(CC_Base_|)L_ToeBase$", "toe_ik.L", "NLR"], ["ORG-toe.R", "ORG-foot.R", "(CC_Base_|)R_ToeBase$", "toe_ik.R", "NLR"], ] # Note: this is retarget FROM game base actions TO the rigify rig. RETARGET_GAME_BASE = [ # flags (flags are processed in order of left to right) # # "L" - constrain location (retarget rig to rigify rig) # "R" - constrain rotation (retarget rig to rigify rig) # "N" - no source -> retarget constraints (to avoid duplicate constraints) # "C" - copy rigify bone positions # "P" - parent retarget correction: for when source bone and org bone # are not the in the same orientation # # flags with parameters (are processed left to right and parameters are consecutive) # # "+", copy_bone - this org bone needs be added copied from copy_bone # "I", influence - multiply the influence of the source -> org copy location/rotation # "T", next_bone - parent correction & align with target: like "P" but maintain alignment with # org bone, for when the source and ORG bones should be in alignment but aren't # because of strange bone orientations (Mixamo!) in the source rig. # "D", root_bone - maintain distance from root_bone # "A", bone_1, bone_2 - copy average location and rotation from bone_1 and bone_2 # # [origin_bone, orign_bone_parent, source_bone(regex match), rigify_target_bone, flags, *params] # ["root", "", "(CC_Base_|RL_|)BoneRoot$", "root", "PLR"], # hips ["ORG-hip", "root", "pelvis$", "", "+PLR", "rigify:ORG-spine"], ["ORG-spine", "ORG-hip", "pelvis$", "torso", "NPLR"], ["ORG-spine", "ORG-hip", "pelvis$", "spine_fk", "NPLR"], ["ORG-pelvis", "ORG-hip", "pelvis$", "hips", "NPLR"], # spine ["ORG-spine.001", "ORG-spine", "spine_01", "spine_fk.001", "LR"], ["ORG-spine.002", "ORG-spine.001", "spine_02", "spine_fk.002", "LR"], ["ORG-spine.002", "ORG-spine.001", "spine_02", "chest", "NLR"], ["ORG-spine.003", "ORG-spine.002", "spine_03", "spine_fk.003", "LR"], ["ORG-spine.004", "ORG-spine.003", "neck_01", "neck", "LR"], ["ORG-spine.006", "ORG-spine.004", "head$", "head", "LR"], # torso ["ORG-breast.L", "ORG-spine.003", "(CC_Base_|)L_Breast$", "breast.L", "LR"], ["ORG-breast.R", "ORG-spine.003", "(CC_Base_|)R_Breast$", "breast.R", "LR"], # left leg ["ORG-thigh.L", "ORG-pelvis", "thigh_l", "thigh_fk.L", "LR"], ["ORG-shin.L", "ORG-thigh.L", "calf_l", "shin_fk.L", "LR"], ["ORG-foot.L", "ORG-shin.L", "foot_l", "foot_fk.L", "PLR"], ["ORG-toe.L", "ORG-foot.L", "ball_l", "toe_fk.L", "LR"], #post 3.1 ["ORG-toe.L", "ORG-foot.L", "ball_l", "toe.L", "LR"], #pre 3.1 # left arm ["ORG-shoulder.L", "ORG-spine.003", "clavicle_l", "shoulder.L", "LR"], ["ORG-upper_arm.L", "ORG-shoulder.L", "upperarm_l", "upper_arm_fk.L", "LR"], ["ORG-forearm.L", "ORG-upper_arm.L", "lowerarm_l", "forearm_fk.L", "LR"], ["ORG-hand.L", "ORG-forearm.L", "hand_l", "hand_fk.L", "LR"], # left fingers ["ORG-thumb.01.L", "ORG-hand.L", "thumb_01_l", "thumb.01.L", "LR"], ["ORG-f_index.01.L", "ORG-hand.L", "index_01_l", "f_index.01.L", "LR"], ["ORG-f_middle.01.L", "ORG-hand.L", "middle_01_l", "f_middle.01.L", "LR"], ["ORG-f_ring.01.L", "ORG-hand.L", "ring_01_l", "f_ring.01.L", "LR"], ["ORG-f_pinky.01.L", "ORG-hand.L", "pinky_01_l", "f_pinky.01.L", "LR"], ["ORG-thumb.02.L", "ORG-thumb.01.L", "thumb_02_l", "thumb.02.L", "LR"], ["ORG-f_index.02.L", "ORG-f_index.01.L", "index_02_l", "f_index.02.L", "LR"], ["ORG-f_middle.02.L", "ORG-f_middle.01.L", "middle_02_l", "f_middle.02.L", "LR"], ["ORG-f_ring.02.L", "ORG-f_ring.01.L", "ring_02_l", "f_ring.02.L", "LR"], ["ORG-f_pinky.02.L", "ORG-f_pinky.01.L", "pinky_02_l", "f_pinky.02.L", "LR"], ["ORG-thumb.03.L", "ORG-thumb.02.L", "thumb_03_l", "thumb.03.L", "LR"], ["ORG-f_index.03.L", "ORG-f_index.02.L", "index_03_l", "f_index.03.L", "LR"], ["ORG-f_middle.03.L", "ORG-f_middle.02.L", "middle_03_l", "f_middle.03.L", "LR"], ["ORG-f_ring.03.L", "ORG-f_ring.02.L", "ring_03_l", "f_ring.03.L", "LR"], ["ORG-f_pinky.03.L", "ORG-f_pinky.02.L", "pinky_03_l", "f_pinky.03.L", "LR"], # right leg ["ORG-thigh.R", "ORG-pelvis", "thigh_r", "thigh_fk.R", "LR"], ["ORG-shin.R", "ORG-thigh.R", "calf_r", "shin_fk.R", "LR"], ["ORG-foot.R", "ORG-shin.R", "foot_r", "foot_fk.R", "PLR"], ["ORG-toe.R", "ORG-foot.R", "ball_r", "toe_fk.R", "LR"], #post 3.1 ["ORG-toe.R", "ORG-foot.R", "ball_r", "toe.R", "LR"], #pre 3.1 # right arm ["ORG-shoulder.R", "ORG-spine.003", "clavicle_r", "shoulder.R", "LR"], ["ORG-upper_arm.R", "ORG-shoulder.R", "upperarm_r", "upper_arm_fk.R", "LR"], ["ORG-forearm.R", "ORG-upper_arm.R", "lowerarm_r", "forearm_fk.R", "LR"], ["ORG-hand.R", "ORG-forearm.R", "hand_r", "hand_fk.R", "LR"], # right fingers ["ORG-thumb.01.R", "ORG-hand.R", "thumb_01_r", "thumb.01.R", "LR"], ["ORG-f_index.01.R", "ORG-hand.R", "index_01_r", "f_index.01.R", "LR"], ["ORG-f_middle.01.R", "ORG-hand.R", "middle_01_r", "f_middle.01.R", "LR"], ["ORG-f_ring.01.R", "ORG-hand.R", "ring_01_r", "f_ring.01.R", "LR"], ["ORG-f_pinky.01.R", "ORG-hand.R", "pinky_01_r", "f_pinky.01.R", "LR"], ["ORG-thumb.02.R", "ORG-thumb.01.R", "thumb_02_r", "thumb.02.R", "LR"], ["ORG-f_index.02.R", "ORG-f_index.01.R", "index_02_r", "f_index.02.R", "LR"], ["ORG-f_middle.02.R", "ORG-f_middle.01.R", "middle_02_r", "f_middle.02.R", "LR"], ["ORG-f_ring.02.R", "ORG-f_ring.01.R", "ring_02_r", "f_ring.02.R", "LR"], ["ORG-f_pinky.02.R", "ORG-f_pinky.01.R", "pinky_02_r", "f_pinky.02.R", "LR"], ["ORG-thumb.03.R", "ORG-thumb.02.R", "thumb_03_r", "thumb.03.R", "LR"], ["ORG-f_index.03.R", "ORG-f_index.02.R", "index_03_r", "f_index.03.R", "LR"], ["ORG-f_middle.03.R", "ORG-f_middle.02.R", "middle_03_r", "f_middle.03.R", "LR"], ["ORG-f_ring.03.R", "ORG-f_ring.02.R", "ring_03_r", "f_ring.03.R", "LR"], ["ORG-f_pinky.03.R", "ORG-f_pinky.02.R", "pinky_03_r", "f_pinky.03.R", "LR"], #face ["ORG-face", "ORG-spine.006", "(CC_Base_|)FacialBone$", "", "PLR"], # eyes ["ORG-eye.L", "ORG-face", "(CC_Base_|)L_Eye$", "eye.L", "PLRD", "ORG-eye.L"], ["ORG-eye.R", "ORG-face", "(CC_Base_|)R_Eye$", "eye.R", "PLRD", "ORG-eye.R"], ["ORG-eyes", "ORG-face", "", "eyes", "+LRA", "rigify:eyes", "eye.R", "eye.L"], # jaw ["ORG-jaw_root", "ORG-face", "(CC_Base_|)JawRoot$", "jaw_master", "+PLR", "rigify:MCH-jaw_master"], ["ORG-jaw", "ORG-jaw_root", "", "", ""], # teeth ["ORG-teeth.T", "ORG-face", "(CC_Base_|)Teeth01", "teeth.T", "PLR"], ["ORG-teeth.B", "ORG-jaw", "(CC_Base_|)Teeth02", "teeth.B", "PLR"], # tongue (full face) ["ORG-tongue", "ORG-jaw", "(CC_Base_|)Tongue03", "tongue_master", "PLR"], ["ORG-tongue.001", "ORG-jaw", "(CC_Base_|)Tongue02", "tongue.001", "PL"], ["ORG-tongue.002", "ORG-jaw", "(CC_Base_|)Tongue01", "tongue.002", "PL"], # IK bones ["ORG-hand.L", "ORG-forearm.L", "hand_l", "hand_ik.L", "NLR"], ["ORG-hand.R", "ORG-forearm.R", "hand_r", "hand_ik.R", "NLR"], ["ORG-foot.L", "ORG-shin.L", "foot_l", "foot_ik.L", "NLR"], ["ORG-foot.R", "ORG-shin.R", "foot_r", "foot_ik.R", "NLR"], ["ORG-toe.L", "ORG-foot.L", "ball_l", "toe_ik.L", "NLR"], ["ORG-toe.R", "ORG-foot.R", "ball_r", "toe_ik.R", "NLR"], ] RETARGET_MIXAMO = [ # flags (flags are processed in order of left to right) # # "L" - constrain location (retarget rig to rigify rig) # "R" - constrain rotation (retarget rig to rigify rig) # "N" - no source -> retarget constraints (to avoid duplicate constraints) # "C" - copy rigify bone positions # "P" - parent retarget correction: for when source bone and org bone # are not the in the same orientation # # flags with parameters (are processed left to right and parameters are consecutive) # # "+", copy_bone - this org bone needs be added copied from copy_bone # "I", influence - multiply the influence of the source -> org copy location/rotation # "T", next_bone - parent correction & align with target: like "P" but maintain alignment # between the org bone and next_bone. # for when the source and ORG bones should be in alignment but aren't # because of strange bone orientations (Mixamo!) in the source rig. # "D", root_bone - maintain distance from root_bone # "A", bone_1, bone_2 - copy average location and rotation from bone_1 and bone_2 # # [origin_bone, orign_bone_parent, source_bone(regex match), rigify_target_bone, flags, *params] # # mixamorig:Hips = ORG-spine + ORG-spine.001 ["ORG-hip", "", "mixamorig(|[0-9]):Hips", "", "+PLR", "rigify:ORG-spine"], ["ORG-spine", "ORG-hip", "", "torso", "LR"], ["ORG-spine", "ORG-hip", "", "spine_fk", "LR"], ["ORG-pelvis", "ORG-spine", "", "hips", "LR"], ["ORG-spine.001", "ORG-spine", "", "spine_fk.001", "LR"], # mixamorig:Spine = ORG-spine.002 # reduce the influence of this bone, as it causes too much twisting in the abdomen ["ORG-spine.002", "ORG-spine.001", "mixamorig(|[0-9]):Spine$", "spine_fk.002", "PLRI", 0.25], # mixamorig:Spine1 + mixamorig:Spine2 = ORG-spine.003 ["ORG-spine.003", "ORG-spine.002", "mixamorig(|[0-9]):Spine1", "spine_fk.003", "PLR"], ["ORG-spine.003", "ORG-spine.002", "", "chest", "LR"], # mixamorig:Neck = ORG-spine.004 + ORG.spine.005 ["ORG-spine.004", "ORG-spine.003", "mixamorig(|[0-9]):Neck", "neck", "PLR"], # head ["ORG-spine.006", "ORG-spine.004", "mixamorig(|[0-9]):Head$", "head", "PLR"], # left leg ["ORG-thigh.L", "ORG-pelvis", "mixamorig(|[0-9]):LeftUpLeg", "thigh_fk.L", "TLR", "mixamorig(|[0-9]):LeftLeg"], ["ORG-shin.L", "ORG-thigh.L", "mixamorig(|[0-9]):LeftLeg", "shin_fk.L", "TLR", "mixamorig(|[0-9]):LeftFoot"], ["ORG-foot.L", "ORG-shin.L", "mixamorig(|[0-9]):LeftFoot", "foot_fk.L", "PLR"], ["ORG-toe.L", "ORG-foot.L", "mixamorig(|[0-9]):LeftToeBase", "toe_fk.L", "TLR", "mixamorig(|[0-9]):LeftToe_End"], #post 3.1 ["ORG-toe.L", "ORG-foot.L", "mixamorig(|[0-9]):LeftToeBase", "toe.L", "TLR", "mixamorig(|[0-9]):LeftToe_End"], #pre 3.1 # left arm ["ORG-shoulder.L", "ORG-spine.003", "mixamorig(|[0-9]):LeftShoulder", "shoulder.L", "PLR"], ["ORG-upper_arm.L", "ORG-shoulder.L", "mixamorig(|[0-9]):LeftArm", "upper_arm_fk.L", "TLR", "mixamorig(|[0-9]):LeftForeArm"], ["ORG-forearm.L", "ORG-upper_arm.L", "mixamorig(|[0-9]):LeftForeArm", "forearm_fk.L", "TLR", "mixamorig(|[0-9]):LeftHand$"], ["ORG-hand.L", "ORG-forearm.L", "mixamorig(|[0-9]):LeftHand$", "hand_fk.L", "TLR", "mixamorig(|[0-9]):LeftHandMiddle1"], # left fingers ["ORG-thumb.01.L", "ORG-hand.L", "mixamorig(|[0-9]):LeftHandThumb1", "thumb.01.L", "TLR", "mixamorig(|[0-9]):LeftHandThumb2"], ["ORG-f_index.01.L", "ORG-hand.L", "mixamorig(|[0-9]):LeftHandIndex1", "f_index.01.L", "TLR", "mixamorig(|[0-9]):LeftHandIndex2"], ["ORG-f_middle.01.L", "ORG-hand.L", "mixamorig(|[0-9]):LeftHandMiddle1", "f_middle.01.L", "TLR", "mixamorig(|[0-9]):LeftHandMiddle2"], ["ORG-f_ring.01.L", "ORG-hand.L", "mixamorig(|[0-9]):LeftHandRing1", "f_ring.01.L", "TLR", "mixamorig(|[0-9]):LeftHandRing2"], ["ORG-f_pinky.01.L", "ORG-hand.L", "mixamorig(|[0-9]):LeftHandPinky1", "f_pinky.01.L", "TLR", "mixamorig(|[0-9]):LeftHandPinky2"], ["ORG-thumb.02.L", "ORG-thumb.01.L", "mixamorig(|[0-9]):LeftHandThumb2", "thumb.02.L", "TR", "mixamorig(|[0-9]):LeftHandThumb3"], ["ORG-f_index.02.L", "ORG-f_index.01.L", "mixamorig(|[0-9]):LeftHandIndex2", "f_index.02.L", "TR", "mixamorig(|[0-9]):LeftHandIndex3"], ["ORG-f_middle.02.L", "ORG-f_middle.01.L", "mixamorig(|[0-9]):LeftHandMiddle2", "f_middle.02.L", "TR", "mixamorig(|[0-9]):LeftHandMiddle3"], ["ORG-f_ring.02.L", "ORG-f_ring.01.L", "mixamorig(|[0-9]):LeftHandRing2", "f_ring.02.L", "TR", "mixamorig(|[0-9]):LeftHandRing3"], ["ORG-f_pinky.02.L", "ORG-f_pinky.01.L", "mixamorig(|[0-9]):LeftHandPinky2", "f_pinky.02.L", "TR", "mixamorig(|[0-9]):LeftHandPinky3"], ["ORG-thumb.03.L", "ORG-thumb.02.L", "mixamorig(|[0-9]):LeftHandThumb3", "thumb.03.L", "TR", "mixamorig(|[0-9]):LeftHandThumb4"], ["ORG-f_index.03.L", "ORG-f_index.02.L", "mixamorig(|[0-9]):LeftHandIndex3", "f_index.03.L", "TR", "mixamorig(|[0-9]):LeftHandIndex4"], ["ORG-f_middle.03.L", "ORG-f_middle.02.L", "mixamorig(|[0-9]):LeftHandMiddle3", "f_middle.03.L", "TR", "mixamorig(|[0-9]):LeftHandMiddle4"], ["ORG-f_ring.03.L", "ORG-f_ring.02.L", "mixamorig(|[0-9]):LeftHandRing3", "f_ring.03.L", "TR", "mixamorig(|[0-9]):LeftHandRing4"], ["ORG-f_pinky.03.L", "ORG-f_pinky.02.L", "mixamorig(|[0-9]):LeftHandPinky3", "f_pinky.03.L", "TR", "mixamorig(|[0-9]):LeftHandPinky4"], # right leg ["ORG-thigh.R", "ORG-pelvis", "mixamorig(|[0-9]):RightUpLeg", "thigh_fk.R", "TLR", "mixamorig(|[0-9]):RightLeg"], ["ORG-shin.R", "ORG-thigh.R", "mixamorig(|[0-9]):RightLeg", "shin_fk.R", "TLR", "mixamorig(|[0-9]):RightFoot"], ["ORG-foot.R", "ORG-shin.R", "mixamorig(|[0-9]):RightFoot", "foot_fk.R", "PLR"], ["ORG-toe.R", "ORG-foot.R", "mixamorig(|[0-9]):RightToeBase", "toe_fk.R", "TLR", "mixamorig(|[0-9]):RightToe_End"], #post 3.1 ["ORG-toe.R", "ORG-foot.R", "mixamorig(|[0-9]):RightToeBase", "toe.R", "TLR", "mixamorig(|[0-9]):RightToe_End"], #pre 3.1 # right arm ["ORG-shoulder.R", "ORG-spine.003", "mixamorig(|[0-9]):RightShoulder", "shoulder.R", "PLR"], ["ORG-upper_arm.R", "ORG-shoulder.R", "mixamorig(|[0-9]):RightArm", "upper_arm_fk.R", "TR", "mixamorig(|[0-9]):RightForeArm"], ["ORG-forearm.R", "ORG-upper_arm.R", "mixamorig(|[0-9]):RightForeArm", "forearm_fk.R", "TR", "mixamorig(|[0-9]):RightHand$"], ["ORG-hand.R", "ORG-forearm.R", "mixamorig(|[0-9]):RightHand$", "hand_fk.R", "TR", "mixamorig(|[0-9]):RightHandMiddle1"], # right fingers ["ORG-thumb.01.R", "ORG-hand.R", "mixamorig(|[0-9]):RightHandThumb1", "thumb.01.R", "TLR", "mixamorig(|[0-9]):RightHandThumb2"], ["ORG-f_index.01.R", "ORG-hand.R", "mixamorig(|[0-9]):RightHandIndex1", "f_index.01.R", "TLR", "mixamorig(|[0-9]):RightHandIndex2"], ["ORG-f_middle.01.R", "ORG-hand.R", "mixamorig(|[0-9]):RightHandMiddle1", "f_middle.01.R", "TLR", "mixamorig(|[0-9]):RightHandMiddle2"], ["ORG-f_ring.01.R", "ORG-hand.R", "mixamorig(|[0-9]):RightHandRing1", "f_ring.01.R", "TLR", "mixamorig(|[0-9]):RightHandRing2"], ["ORG-f_pinky.01.R", "ORG-hand.R", "mixamorig(|[0-9]):RightHandPinky1", "f_pinky.01.R", "TLR", "mixamorig(|[0-9]):RightHandPinky2"], ["ORG-thumb.02.R", "ORG-thumb.01.R", "mixamorig(|[0-9]):RightHandThumb2", "thumb.02.R", "TR", "mixamorig(|[0-9]):RightHandThumb3"], ["ORG-f_index.02.R", "ORG-f_index.01.R", "mixamorig(|[0-9]):RightHandIndex2", "f_index.02.R", "TR", "mixamorig(|[0-9]):RightHandIndex3"], ["ORG-f_middle.02.R", "ORG-f_middle.01.R", "mixamorig(|[0-9]):RightHandMiddle2", "f_middle.02.R", "TR", "mixamorig(|[0-9]):RightHandMiddle3"], ["ORG-f_ring.02.R", "ORG-f_ring.01.R", "mixamorig(|[0-9]):RightHandRing2", "f_ring.02.R", "TR", "mixamorig(|[0-9]):RightHandRing3"], ["ORG-f_pinky.02.R", "ORG-f_pinky.01.R", "mixamorig(|[0-9]):RightHandPinky2", "f_pinky.02.R", "TR", "mixamorig(|[0-9]):RightHandPinky3"], ["ORG-thumb.03.R", "ORG-thumb.02.R", "mixamorig(|[0-9]):RightHandThumb3", "thumb.03.R", "TR", "mixamorig(|[0-9]):RightHandThumb4"], ["ORG-f_index.03.R", "ORG-f_index.02.R", "mixamorig(|[0-9]):RightHandIndex3", "f_index.03.R", "TR", "mixamorig(|[0-9]):RightHandIndex4"], ["ORG-f_middle.03.R", "ORG-f_middle.02.R", "mixamorig(|[0-9]):RightHandMiddle3", "f_middle.03.R", "TR", "mixamorig(|[0-9]):RightHandMiddle4"], ["ORG-f_ring.03.R", "ORG-f_ring.02.R", "mixamorig(|[0-9]):RightHandRing3", "f_ring.03.R", "TR", "mixamorig(|[0-9]):RightHandRing4"], ["ORG-f_pinky.03.R", "ORG-f_pinky.02.R", "mixamorig(|[0-9]):RightHandPinky3", "f_pinky.03.R", "TR", "mixamorig(|[0-9]):RightHandPinky4"], #face ["ORG-face", "ORG-spine.006", "", "", ""], # eyes ["ORG-eye.L", "ORG-face", "mixamorig(|[0-9]):LeftEye", "eye.L", "PRD", "ORG-eye.L"], ["ORG-eye.R", "ORG-face", "mixamorig(|[0-9]):RightEye", "eye.R", "PRD", "ORG-eye.R"], ["ORG-eyes", "ORG-face", "", "eyes", "+LRA", "rigify:eyes", "eye.R", "eye.L"], # IK bones ["ORG-hand.L", "ORG-forearm.L", "mixamorig(|[0-9]):LeftHand$", "hand_ik.L", "NTLR", "mixamorig(|[0-9]):LeftHandMiddle1"], ["ORG-hand.R", "ORG-forearm.R", "mixamorig(|[0-9]):RightHand$", "hand_ik.R", "NTLR", "mixamorig(|[0-9]):RightHandMiddle1"], ["ORG-foot.L", "ORG-shin.L", "mixamorig(|[0-9]):LeftFoot", "foot_ik.L", "NPLR", "mixamorig(|[0-9]):LeftToeBase"], ["ORG-foot.R", "ORG-shin.R", "mixamorig(|[0-9]):RightFoot", "foot_ik.R", "NPLR", "mixamorig(|[0-9]):RightToeBase"], ["ORG-toe.L", "ORG-foot.L", "mixamorig(|[0-9]):LeftToeBase", "toe_ik.L", "NTLR", "mixamorig(|[0-9]):LeftToe_End"], ["ORG-toe.R", "ORG-foot.R", "mixamorig(|[0-9]):RightToeBase", "toe_ik.R", "NTLR", "mixamorig(|[0-9]):RightToe_End"], ] RETARGET_CORRECTIONS = { "Heel_Angle": { "bone": [(0, 0, 0), (0, 0, 0.1), "retarget_heel_correction_angle", "rotation_euler", 0], "constraints": [ ["ORG-foot.L", "ROT_ADD_LOCAL", "-X"], ["ORG-foot.R", "ROT_ADD_LOCAL", "-X"], ], }, "Arm_Angle": { "bone": [(0, 0, 0), (0, 0, 0.1), "retarget_arm_correction_angle", "rotation_euler", 2], "constraints": [ ["ORG-upper_arm.L", "ROT_ADD_LOCAL", "Z"], ["ORG-upper_arm.R", "ROT_ADD_LOCAL", "-Z"], ], }, "Leg_Angle": { "bone": [(0, 0, 0), (0, 0, 0.1), "retarget_leg_correction_angle", "rotation_euler", 2], "constraints": [ ["ORG-thigh.L", "ROT_ADD_LOCAL", "Z"], ["ORG-thigh.R", "ROT_ADD_LOCAL", "-Z"], ], }, "Z_Correction": { "bone": [(0, 0, 0), (0, 0, 0.1), "retarget_z_correction_height", "location", 1], "constraints": [ ["ORG-hip", "LOC_OFF_LOCAL", "Y"], ], }, } IKFK_RIG_CONTROLS = { "Limb Controls": ["IK-FK", "Follow", "Stretch"], "Left Arm": [ ["upper_arm_parent.L", "IK_FK"], ["upper_arm_parent.L", "FK_limb_follow"], ["upper_arm_parent.L", "IK_Stretch"] ], "Right Arm": [ ["upper_arm_parent.R", "IK_FK"], ["upper_arm_parent.R", "FK_limb_follow"], ["upper_arm_parent.R", "IK_Stretch"] ], "Left Leg": [ ["thigh_parent.L", "IK_FK"], ["thigh_parent.L", "FK_limb_follow"], ["thigh_parent.L", "IK_Stretch"] ], "Right Leg": [ ["thigh_parent.R", "IK_FK"], ["thigh_parent.R", "FK_limb_follow"], ["thigh_parent.R", "IK_Stretch"] ], "Head Controls": ["Head Controls", "", ""], "Neck Follow": [ ["torso", "neck_follow"] ], "Head Follow": [ ["torso", "head_follow"] ], "Mouth Lock": [ ["jaw_master", "mouth_lock"] ], "Eyes Follow": [ ["eyes", "eyes_follow"] ], }