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
This commit is contained in:
312
extras/rigifyscripts/rigify_after.py
Normal file
312
extras/rigifyscripts/rigify_after.py
Normal file
@@ -0,0 +1,312 @@
|
||||
|
||||
#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'}
|
||||
|
||||
Reference in New Issue
Block a user