Files
KKBP_Importer/extras/rigifyscripts/rigify_after.py
小煜 5d9e09e9c3 feat: Add KoikatsuBlenderPipeline addon with import/export functionality
- Add core addon files (__init__.py, KKPanel.py, preferences.py, common.py)
- Add import pipeline with armature, mesh, and material modification modules
- Add export pipeline with material baking and FBX preparation utilities
- Add material combiner tool for texture atlas generation and optimization
- Add extras utilities for animation, rigging, and asset management
- Add bone orientation data from better_fbx for accurate skeletal structure
- Add comprehensive documentation and wiki with multi-language support (EN, JP, ZH)
- Add animation library retargeting lists for ARP and Rokoko motion capture
- Add Rigify integration scripts for advanced rigging workflows
- Add shader file (KK Shader V8.0.blend) for material rendering
- Add manifest and license files for addon distribution
- Add changelog documenting version history and improvements
- Initialize complete Blender addon project for Koikatsu character import/export
2025-12-06 15:26:19 +08:00

313 lines
22 KiB
Python

#Switch to Object Mode and select Generated Rig
import bpy
import traceback
import sys
import math
from math import radians
from . import commons as koikatsuCommons
def main():
generatedRig = bpy.context.active_object
assert generatedRig.mode == "OBJECT", 'assert generated_rig.mode == "OBJECT"'
assert generatedRig.type == "ARMATURE", 'assert generatedRig.type == "ARMATURE"'
generatedRig.show_in_front = True
generatedRig.display_type = 'TEXTURED'
"""
for i in range(32):
if i == 0 or i == 1:
generatedRig.data.layers[i] = True
else:
generatedRig.data.layers[i] = False
"""
hasRiggedTongue = generatedRig.pose.bones.get(koikatsuCommons.riggedTongueBone1Name)
hasBetterPenetrationMod = generatedRig.pose.bones.get(koikatsuCommons.betterPenetrationRootCrotchBoneName)
metarig = None
for bone in generatedRig.pose.bones:
if bone.name.startswith(koikatsuCommons.metarigIdBonePrefix):
generatedRigIdBoneName = bone.name
for object in bpy.data.objects:
if object != generatedRig and object.type == "ARMATURE":
for objectBone in object.pose.bones:
if objectBone.name == generatedRigIdBoneName:
metarig = object
break
break
if metarig:
metarig.hide_set(True)
for object in bpy.data.objects:
if object.type == "MESH":
if object.parent == metarig:
object.parent = generatedRig
for modifier in object.modifiers:
if modifier.type == "ARMATURE" and modifier.object == metarig:
modifier.object = generatedRig
if modifier.type == "UV_WARP" and modifier.object_from == metarig:
if modifier.name == "Left Eye UV warp":
modifier.object_from = generatedRig
modifier.bone_from = koikatsuCommons.eyesXBoneName
modifier.object_to = generatedRig
modifier.bone_to = koikatsuCommons.leftEyeBoneName
elif modifier.name == "Right Eye UV warp":
modifier.object_from = generatedRig
modifier.bone_from = koikatsuCommons.eyesXBoneName
modifier.object_to = generatedRig
modifier.bone_to = koikatsuCommons.rightEyeBoneName
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.eyesTrackTargetBoneName, 1.5)
if hasRiggedTongue:
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.riggedTongueLeftBone3Name, 0.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.riggedTongueRightBone3Name, 0.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.riggedTongueLeftBone4Name, 0.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.riggedTongueRightBone4Name, 0.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.riggedTongueLeftBone5Name, 0.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.riggedTongueRightBone5Name, 0.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.headTweakBoneName, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.crotchBoneName, 2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.anusBoneName, 0.25)
if hasBetterPenetrationMod:
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationRootCrotchBoneName, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationFrontCrotchBoneName, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationLeftCrotchBone1Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationRightCrotchBone1Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationLeftCrotchBone2Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationRightCrotchBone2Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationLeftCrotchBone3Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationRightCrotchBone3Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationLeftCrotchBone4Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationRightCrotchBone4Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationLeftCrotchBone5Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationRightCrotchBone5Name, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.betterPenetrationBackCrotchBoneName, 0.09)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftBreastDeformBone1Name, 0.4)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightBreastDeformBone1Name, 0.4)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftBreastBone2Name, 3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightBreastBone2Name, 3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftBreastDeformBone2Name, 0.3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightBreastDeformBone2Name, 0.3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftBreastBone3Name, 2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightBreastBone3Name, 2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftBreastDeformBone3Name, 0.2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightBreastDeformBone3Name, 0.2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftNippleBone1Name, 1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightNippleBone1Name, 1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftNippleDeformBone1Name, 0.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightNippleDeformBone1Name, 0.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftNippleBone2Name, 0.5)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightNippleBone2Name, 0.5)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftNippleDeformBone2Name, 0.05)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightNippleDeformBone2Name, 0.05)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftShoulderBoneName, 1.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightShoulderBoneName, 1.25)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftThumbBone1Name, 1.3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightThumbBone1Name, 1.3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftThumbBone2Name, 1.3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightThumbBone2Name, 1.3)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftThumbBone3Name, 1.2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightThumbBone3Name, 1.2)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftIndexFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightIndexFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftIndexFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightIndexFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftMiddleFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightMiddleFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftMiddleFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightMiddleFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftRingFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightRingFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftRingFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightRingFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftLittleFingerPalmBoneName, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightLittleFingerPalmBoneName, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftLittleFingerPalmFkBoneName, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightLittleFingerPalmFkBoneName, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftLittleFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightLittleFingerBone2Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.leftLittleFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rightLittleFingerBone3Name, 1.1)
koikatsuCommons.setBoneCustomShapeScale(generatedRig, koikatsuCommons.rootBoneName, 0.35)
for bone in generatedRig.pose.bones:
if bpy.app.version[0] == 3:
if generatedRig.data.bones[bone.name].layers[koikatsuCommons.getRigifyLayerIndexByName(koikatsuCommons.faceLayerName + koikatsuCommons.mchLayerSuffix)] == True:
koikatsuCommons.setBoneCustomShapeScale(generatedRig, bone.name, 0.15)
else:
if generatedRig.data.bones[bone.name].collections.get(str(koikatsuCommons.getRigifyLayerIndexByName(koikatsuCommons.faceLayerName + koikatsuCommons.mchLayerSuffix))):
koikatsuCommons.setBoneCustomShapeScale(generatedRig, bone.name, 0.15)
headBone = generatedRig.pose.bones[koikatsuCommons.originalBonePrefix + koikatsuCommons.headBoneName]
koikatsuCommons.changeConstraintIndex(generatedRig, headBone.name, koikatsuCommons.transformationConstraintBaseName + koikatsuCommons.headConstraintSuffix + koikatsuCommons.rotationConstraintSuffix, len(headBone.constraints) - 1)
koikatsuCommons.changeConstraintIndex(generatedRig, headBone.name, koikatsuCommons.limitRotationConstraintBaseName + koikatsuCommons.headConstraintSuffix, len(headBone.constraints) - 1)
headTweakLimitRotationConstraint = koikatsuCommons.addLimitRotationConstraint(generatedRig, koikatsuCommons.headTweakBoneName, None, 'LOCAL', koikatsuCommons.limitRotationConstraintBaseName + koikatsuCommons.headConstraintSuffix,
True, math.radians(-180), math.radians(180), True, math.radians(-180), math.radians(180), True, math.radians(-180), math.radians(180))
for driver in generatedRig.animation_data.drivers:
if driver.data_path.startswith("pose.bones"):
driverOwnerName = driver.data_path.split('"')[1]
driverProperty = driver.data_path.rsplit('.', 1)[1]
if driverOwnerName == headBone.name:
constraintName = driver.data_path.split('"')[3]
if constraintName == koikatsuCommons.limitRotationConstraintBaseName + koikatsuCommons.headConstraintSuffix:
variable = driver.driver.variables[0]
newVariable = koikatsuCommons.DriverVariable(variable.name, variable.type, generatedRig, variable.targets[0].bone_target, None, None, None, None, variable.targets[0].data_path, None, None)
koikatsuCommons.addDriver(headTweakLimitRotationConstraint, driverProperty, None, driver.driver.type, [newVariable],
driver.driver.expression)
for bone in generatedRig.pose.bones:
for constraint in bone.constraints:
if constraint.type == 'ARMATURE':
for target in constraint.targets:
if target.subtarget:
target.target = generatedRig
if target.subtarget.endswith(koikatsuCommons.placeholderBoneSuffix):
target.subtarget = target.subtarget[:-len(koikatsuCommons.placeholderBoneSuffix)]
for driver in bpy.data.objects[koikatsuCommons.bodyName()].data.shape_keys.animation_data.drivers:
if driver.data_path.startswith("key_blocks"):
ownerName = driver.data_path.split('"')[1]
if ownerName == koikatsuCommons.eyelidsShapeKeyCopyName:
for variable in driver.driver.variables:
for target in variable.targets:
if target.id == metarig:
target.id = generatedRig
for driver in generatedRig.animation_data.drivers:
if driver.data_path.startswith("pose.bones"):
driverOwnerName = driver.data_path.split('"')[1]
driverProperty = driver.data_path.rsplit('.', 1)[1]
if driverOwnerName in koikatsuCommons.bonesWithDrivers and driverProperty == "location":
for variable in driver.driver.variables:
for target in variable.targets:
for targetToChange in koikatsuCommons.targetsToChange:
if target.bone_target == koikatsuCommons.originalBonePrefix + targetToChange:
target.bone_target = koikatsuCommons.deformBonePrefix + targetToChange
bpy.ops.object.mode_set(mode='EDIT')
for bone in generatedRig.data.edit_bones:
if bpy.app.version[0] == 3:
if generatedRig.data.bones[bone.name].layers[koikatsuCommons.getRigifyLayerIndexByName(koikatsuCommons.junkLayerName)] == True:
koikatsuCommons.deleteBone(generatedRig, bone.name)
continue
if generatedRig.data.bones[bone.name].layers[koikatsuCommons.defLayerIndex] == True:
bone.use_deform = True
else:
if generatedRig.data.bones[bone.name].collections.get(str(koikatsuCommons.getRigifyLayerIndexByName(koikatsuCommons.junkLayerName))):
koikatsuCommons.deleteBone(generatedRig, bone.name)
continue
if generatedRig.data.bones[bone.name].collections.get(str(koikatsuCommons.defLayerIndex)):
bone.use_deform = True
generatedRig.data.edit_bones[koikatsuCommons.eyesTrackTargetParentBoneName].parent = None
generatedRig.data.edit_bones[koikatsuCommons.headTrackTargetParentBoneName].parent = None
bpy.ops.object.mode_set(mode='OBJECT')
#koikatsuCommons.setBoneManagerLayersFromRigifyLayers(generatedRig)
#move some bones to the correct layer at the end because I don't feel like figuring out what went wrong
theme_dict = {
'purple':[1.000000, 0.266356, 0.955974],
'red':(0.8, 0, 0),
'yellow':(0.956863, 0.788235, 0.047059),
'blue':(0.005605, 0.104617, 0.947307),
'green':(0.026241, 0.693872, 0.004025),
'orange':(0.968628, 0.250980, 0.094118)
}
for bone in ['cf_j_tang_02', 'cf_j_tang_03', 'cf_j_tang_04', 'cf_j_tang_05', 'cf_j_tang_02.001']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 3)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['green']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['green']
#Torso detail
for bone in ['tweak_Neck', 'Upper Chest_fk', 'tweak_Upper Chest', 'Chest_fk', 'tweak_Upper Chest', 'Chest_fk','tweak_Chest','Spine_fk','tweak_Spine','Hips_fk','tweak_Hips']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 8)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['blue']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['blue']
for bone in ['Left wrist_fk', 'Left elbow_fk', 'Left arm_fk', 'Right arm_fk', 'Right elbow_fk', 'Right wrist_fk']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 10 if 'Left' in bone else 13)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['green']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['green']
for bone in ['Left arm_tweak', 'Left arm_tweak.001', 'Left arm_tweak.002', 'Left elbow_tweak', 'Left elbow_tweak.001', 'Left elbow_tweak.002', 'Left wrist_tweak',
'Right arm_tweak', 'Right arm_tweak.001', 'Right arm_tweak.002', 'Right elbow_tweak', 'Right elbow_tweak.001', 'Right elbow_tweak.002', 'Right wrist_tweak']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 11 if 'Left' in bone else 14)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['blue']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['blue']
for bone in ['Thumb0_L', 'Thumb1_L', 'Thumb2_L', 'Thumb0_L.001', 'IndexFinger1_L', 'IndexFinger2_L', 'IndexFinger3_L', 'IndexFinger1_L.001', 'MiddleFinger1_L', 'MiddleFinger2_L', 'MiddleFinger3_L', 'MiddleFinger1_L.001', 'RingFinger1_L', 'RingFinger2_L', 'RingFinger3_L', 'RingFinger1_L.001', 'LittleFinger1_L', 'LittleFinger2_L', 'LittleFinger3_L', 'LittleFinger1_L.001', 'Thumb0_R', 'Thumb1_R', 'Thumb2_R', 'Thumb0_R.001', 'IndexFinger1_R', 'IndexFinger2_R', 'IndexFinger3_R', 'IndexFinger1_R.001', 'MiddleFinger1_R', 'MiddleFinger2_R', 'MiddleFinger3_R', 'MiddleFinger1_R.001', 'RingFinger1_R', 'RingFinger2_R', 'RingFinger3_R', 'RingFinger1_R.001', 'LittleFinger1_R', 'LittleFinger2_R', 'LittleFinger3_R', 'LittleFinger1_R.001']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 16)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['green']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['green']
for bone in ['Left leg_fk', 'Left knee_fk', 'Left ankle_fk', 'Left toe_fk', 'Right leg_fk', 'Right knee_fk', 'Right ankle_fk', 'Right toe_fk']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 18 if 'Left' in bone else 21)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['green']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['green']
for bone in ['Left leg_tweak', 'Left leg_tweak.001', 'Left leg_tweak.002', 'Left knee_tweak', 'Left knee_tweak.001', 'Left knee_tweak.002', 'Left ankle_tweak', 'Right leg_tweak', 'Right leg_tweak.001', 'Right leg_tweak.002', 'Right knee_tweak', 'Right knee_tweak.001', 'Right knee_tweak.002', 'Right ankle_tweak']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 19 if 'Left' in bone else 22)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['blue']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['blue']
for bone in ['cf_j_sk_00_00_ik', 'cf_j_sk_01_00_ik', 'cf_j_sk_02_00_ik', 'cf_j_sk_03_00_ik', 'cf_j_sk_04_00_ik', 'cf_j_sk_05_00_ik', 'cf_j_sk_06_00_ik', 'cf_j_sk_07_00_ik', 'cf_j_sk_00_00_master', 'cf_j_sk_01_00_master', 'cf_j_sk_02_00_master', 'cf_j_sk_03_00_master', 'cf_j_sk_04_00_master', 'cf_j_sk_05_00_master', 'cf_j_sk_06_00_master', 'cf_j_sk_07_00_master']:
koikatsuCommons.assignSingleBoneLayer_except(generatedRig, bone, 23)
if generatedRig.data.bones.get(bone) and bpy.app.version[0] != 3:
generatedRig.data.bones[bone].color.custom.normal = theme_dict['red']
generatedRig.pose.bones[bone].color.custom.normal = theme_dict['red']
if bpy.app.version[0] != 3:
bpy.context.object.pose.bones["root"].color.palette = 'CUSTOM'
generatedRig.data.bones['root'].color.custom.normal = theme_dict['yellow']
generatedRig.pose.bones['root'].color.custom.normal = theme_dict['yellow']
generatedRig.data.bones['root'].color.custom.select = (0.313989, 0.783538, 1.000000)
generatedRig.pose.bones['root'].color.custom.select = (0.313989, 0.783538, 1.000000)
generatedRig.data.bones['root'].color.custom.active = (0.552011, 1.000000, 1.000000)
generatedRig.pose.bones['root'].color.custom.active = (0.552011, 1.000000, 1.000000)
#set layer visibility
try:
for layer in ['None']:
generatedRig.data.collections_all[str(layer)].is_visible = False
except:
pass
for layer in [7,9,12,17,20]:
generatedRig.data.collections_all[str(layer)].is_visible = True
else:
#set layer visibility
generatedRig.data.layers[0] = True
for layer in range(1,32):
generatedRig.data.layers[layer] = False
for layer in [7,9,12,17,20,28]:
generatedRig.data.layers[layer] = True
generatedRig.data.layers[0] = False
class rigify_after(bpy.types.Operator):
bl_idname = "kkbp.rigafter"
bl_label = "After Each Rigify Generate - Public"
bl_description = 'Performs cleanup after a Rigify generation'
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
main()
return {'FINISHED'}