diff --git a/docs/README.md b/docs/README.md index 3becf235..35949f54 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1159,6 +1159,9 @@ If painting the skin weights with "ngSkinTools" (third party plugin) you might h

Select Non-Unique Objects

Selects all objects with the same short name. (A short name is the name of the object without its path)

+

Full HUD Toggle

+

Toggles most of the Heads-Up Display (HUD) options according to the state of the majority of them.
(Keeps default elements ON when toggling it OFF)

+

Import References

Attempts to import all loaded references.

diff --git a/docs/assets/GT Auto Biped Rigger - HIK Custom Control IK Template.xml b/docs/assets/GT Auto Biped Rigger - HIK Custom Control IK Template.xml index 7a1de675..b9d36357 100644 --- a/docs/assets/GT Auto Biped Rigger - HIK Custom Control IK Template.xml +++ b/docs/assets/GT Auto Biped Rigger - HIK Custom Control IK Template.xml @@ -1,26 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/mel-scripts/gt_tools_menu.mel b/mel-scripts/gt_tools_menu.mel index 1575295e..675fe072 100644 --- a/mel-scripts/gt_tools_menu.mel +++ b/mel-scripts/gt_tools_menu.mel @@ -115,9 +115,6 @@ // Removed Create IK Leg // Updated Make IK Stretchy // -// 1.6.4 -// Only updated the version, no changes to the menu -// // 1.6.5 // Added gtu_uniform_jnt_label_toggle to GT Utilities // @@ -127,8 +124,6 @@ // 1.6.7 // Added Add Sine Attributes // -// 1.6.8 -// Only updated the version, no changes to the menu // // 1.6.9 // Added GT Create Testing Keys @@ -144,12 +139,15 @@ // Fixed issue where GT Path Manager would sometimes not open // // 1.7.3 -// Added gt_transfer_uvs +// Added "gt_transfer_uvs" +// +// 1.7.8 +// Added "gtu_full_hud_toggle" // //---------------------------------------------------------------------------- // Globals -global string $scriptVersion = "1.7.7"; +global string $scriptVersion = "1.7.8"; global string $gMainWindow; string $installedVersion = `optionVar -q "gt_tools_version"`; @@ -411,6 +409,12 @@ menuItem -l "Utilities" -sm true -to true -image "bsd-head.png"; -ann ("Selects all objects with the same short name. (non-unique objects)") -image "gotoLine.png"; + menuItem + -l ("Full HUD Toggle") + -c ("python(\"import gt_utilities\\nif python_version==3:\\n\\timportlib.reload(gt_utilities)\\nelse:\\n\\treload(gt_utilities)\\ngt_utilities.gtu_full_hud_toggle()\");") + -ann ("Toggles most of the Heads-Up Display (HUD) options according to the state of the majority of them. (Keeps default elements intact when toggling it off)") + -image "channelBox.png"; + // References menuItem -divider true ; diff --git a/python-scripts/gt_auto_biped_rigger.py b/python-scripts/gt_auto_biped_rigger.py index b85dcaa9..3b17c837 100644 --- a/python-scripts/gt_auto_biped_rigger.py +++ b/python-scripts/gt_auto_biped_rigger.py @@ -89,12 +89,21 @@ 1.7.3 - 2021-08-07 Fixed an issue where the foot would sometimes be flipped when the angle of the leg is not perfectly straight (Enforce footToe ikHandle position) + + 1.7.4 - 2021-10-10 + Fixed an issue where the rig would start flickering when following motion capture using a custom rig setup (HumanIK) + Modified inflation/deflation system to use controls instead of inverseMatrix nodes (less convenient, but more robust) + Removed extraction of hip rotation from the "Extra Proxy Pose From Generated Rig" to fix an issue where it would sometimes be flipped + Added debugging warning to GUI for when debugging mode is activated (Replaces script title next to help) + Changed the "followName" attribute data type for the pole vector controls to float so interpolation is possible + To do: Create ribbon setup for the spine ( add switch to the master control ) Add more roll joints (upper part of the arm, legs, etc) Add option to auto create proxy geo Create button to add a shelf button for an animation picker + Create exporter with options to auto generate selection sets based on LOD names. """ try: @@ -125,7 +134,7 @@ script_name = "GT Auto Biped Rigger" # Version: -script_version = "1.7.3" +script_version = "1.7.4" # Python Version python_version = sys.version_info.major @@ -152,6 +161,7 @@ debugging_import_path = 'C:\\template.json' # Path to auto import debugging_bind_rig = True # Auto Binds Rig debugging_bind_geo = 'body_geo' # Name of the geo to bind +debugging_bind_heatmap = False #If not using heatmap, then closest distance # Loaded Elements Dictionary gt_ab_settings = { # General Settings @@ -256,11 +266,16 @@ def build_gui_auto_biped_rig(): # Title Text title_bgc_color = (.4, .4, .4) + main_window_title = script_name + if debugging: + title_bgc_color = (1, .3, .3) + main_window_title = "Debugging Mode Activated" + cmds.separator(h=10, style='none') # Empty Space cmds.rowColumnLayout(nc=1, cw=[(1, 270)], cs=[(1, 10)], p=content_main) # Window Size Adjustment cmds.rowColumnLayout(nc=3, cw=[(1, 10), (2, 200), (3, 50)], cs=[(1, 10), (2, 0), (3, 0)], p=content_main) # Title Column cmds.text(" ", bgc=title_bgc_color) # Tiny Empty Green Space - cmds.text(script_name, bgc=title_bgc_color, fn="boldLabelFont", align="left") + cmds.text(main_window_title, bgc=title_bgc_color, fn="boldLabelFont", align="left") cmds.button( l ="Help", bgc=title_bgc_color, c=lambda x:build_help_gui_auto_biped_rig()) cmds.separator(h=10, style='none', p=content_main) # Empty Space @@ -273,7 +288,6 @@ def build_gui_auto_biped_rig(): if os.path.isdir(icons_folder_dir) and os.path.exists(create_proxy_btn_ico) == False: image_enconded = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF8WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTEyLTMwVDIyOjI4OjU0LTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMS0wM1QxMToxNDowOS0wODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMS0wM1QxMToxNDowOS0wODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjOTRkMjQ0MS03ZDAyLTZk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' - #image_64_decode = base64.decodestring(image_enconded) image_64_decode = base64.b64decode(image_enconded) image_result = open(create_proxy_btn_ico, 'wb') image_result.write(image_64_decode) @@ -284,7 +298,6 @@ def build_gui_auto_biped_rig(): if os.path.isdir(icons_folder_dir) and os.path.exists(create_rig_btn_ico) == False: image_enconded = 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF8WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTEyLTMwVDIyOjM2OjU3LTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMS0wM1QxMTo1OTowNC0wODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMS0wM1QxMTo1OTowNC0wODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphOTMwMjJjNC0zZTljLWQ5NGYtOGZiMi0xMThkNzc2Y2I4YTYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowZGQ3ODU1NS05Nzk0LTk1NDctOGJmOS02NTM5YmFiOTU0ODkiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmMDJjNmFhZC1lZmRmLWQ5NDktOTYyYy1lOThmMTZiOTljMDgiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmYwMmM2YWFkLWVmZGYtZDk0OS05NjJjLWU5OGYxNmI5OWMwOCIgc3RFdnQ6d2hlbj0iMjAyMC0xMi0zMFQyMjozNjo1Ny0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphOTMwMjJjNC0zZTljLWQ5NGYtOGZiMi0xMThkNzc2Y2I4YTYiIHN0RXZ0OndoZW49IjIwMjEtMDEtMDNUMTE6NTk6MDQtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi4wIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4QupX8AAACnElEQVRYhcWXPWsUURSG33XDfkUQVGKimw/TCRYiiCJisBDEVjAIKQQ7FX9AOv0FloKdFmlECyG9IMRKUdFCiYW4S8wmxtVEXVEfi3uGGWdnZndnZ/HAgZnznq977plz7+QA/U8a6kJnVtINSXVJnyXlJb2X9Nr4paT11BkAnfg0sIVPz4FN/qU14HoXvtq4F+V5C3YPyJnsMHAFeGxYA5gaVAICjligTaAcwqrAD8P3DioBAbus5FjQIDYM1A2b7sZfjnRfQdEaLy+pHMKGJK1J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' - #image_64_decode = base64.decodestring(image_enconded) image_64_decode = base64.b64decode(image_enconded) image_result = open(create_rig_btn_ico, 'wb') image_result.write(image_64_decode) @@ -1387,7 +1400,10 @@ def validate_operation(operation, debugging=False): cmds.select(d=True) select_skinning_joints() selection = cmds.ls(selection=True) - cmds.skinCluster( selection, debugging_bind_geo, bindMethod=2, heatmapFalloff=0.68, toSelectedBones=True, smoothWeights=0.5, maximumInfluences=5) + if debugging_bind_heatmap: + cmds.skinCluster( selection, debugging_bind_geo, bindMethod=2, heatmapFalloff=0.68, toSelectedBones=True, smoothWeights=0.5, maximumInfluences=4) + else: + cmds.skinCluster( selection, debugging_bind_geo, bindMethod=1, toSelectedBones=True, smoothWeights=0.5, maximumInfluences=4) cmds.select(d=True) @@ -5598,11 +5614,14 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.connectAttr(left_leg_switch + '.ctrlVisibility', left_toe_up_down_ctrl_grp + '.v', f=True) # IK Knee Automation - left_knee_ctrl_constraint = cmds.parentConstraint(left_foot_ik_ctrl, left_knee_ik_ctrl_grp, mo=True) + left_knee_ctrl_constraint = cmds.parentConstraint([left_foot_ik_ctrl, direction_ctrl], left_knee_ik_ctrl_grp, mo=True) cmds.addAttr(left_knee_ik_ctrl, ln="kneeAutomation", at="enum", en="-------------:", keyable=True) cmds.setAttr(left_knee_ik_ctrl + '.kneeAutomation', lock=True) - cmds.addAttr(left_knee_ik_ctrl , ln='followFoot', at='bool', k=True) + cmds.addAttr(left_knee_ik_ctrl , ln='followFoot', at='float', k=True, maxValue=1, minValue=0) cmds.connectAttr(left_knee_ik_ctrl + '.followFoot', left_knee_ctrl_constraint[0] + '.w0', f=True) + left_knee_reverse_node = cmds.createNode('reverse', name='left_knee_parent_reverse') + cmds.connectAttr(left_knee_ik_ctrl + '.followFoot', left_knee_reverse_node + '.inputX', f=True) + cmds.connectAttr(left_knee_reverse_node + '.outputX', left_knee_ctrl_constraint[0] + '.w1', f=True) # Left Leg Stretchy System @@ -5788,11 +5807,14 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.connectAttr(right_leg_switch + '.ctrlVisibility', right_toe_up_down_ctrl_grp + '.v', f=True) # IK Knee Automation - right_knee_ctrl_constraint = cmds.parentConstraint(right_foot_ik_ctrl, right_knee_ik_ctrl_grp, mo=True) + right_knee_ctrl_constraint = cmds.parentConstraint([right_foot_ik_ctrl, direction_ctrl], right_knee_ik_ctrl_grp, mo=True) cmds.addAttr(right_knee_ik_ctrl, ln="kneeAutomation", at="enum", en="-------------:", keyable=True) cmds.setAttr(right_knee_ik_ctrl + '.kneeAutomation', lock=True) - cmds.addAttr(right_knee_ik_ctrl , ln='followFoot', at='bool', k=True) + cmds.addAttr(right_knee_ik_ctrl , ln='followFoot', at='float', k=True, maxValue=1, minValue=0) cmds.connectAttr(right_knee_ik_ctrl + '.followFoot', right_knee_ctrl_constraint[0] + '.w0', f=True) + right_knee_reverse_node = cmds.createNode('reverse', name='right_knee_parent_reverse') + cmds.connectAttr(right_knee_ik_ctrl + '.followFoot', right_knee_reverse_node + '.inputX', f=True) + cmds.connectAttr(right_knee_reverse_node + '.outputX', right_knee_ctrl_constraint[0] + '.w1', f=True) # Right Leg Stretchy System cmds.addAttr(right_leg_switch, ln="squashStretch", at="enum", en="-------------:", keyable=True) @@ -5952,11 +5974,15 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.connectAttr(left_arm_switch + '.ctrlVisibility', left_fingers_ctrl_grp + '.v', f=True) # IK Wrist Automation - left_wrist_ctrl_constraint = cmds.parentConstraint(left_wrist_ik_ctrl, left_elbow_ik_ctrl_grp, mo=True) + left_wrist_ctrl_constraint = cmds.parentConstraint([left_wrist_ik_ctrl, direction_ctrl], left_elbow_ik_ctrl_grp, mo=True) cmds.addAttr(left_elbow_ik_ctrl, ln="elbowAutomation", at="enum", en="-------------:", keyable=True) cmds.setAttr(left_elbow_ik_ctrl + '.elbowAutomation', lock=True) - cmds.addAttr(left_elbow_ik_ctrl , ln='followWrist', at='bool', k=True) + cmds.addAttr(left_elbow_ik_ctrl , ln='followWrist', at='float', k=True, maxValue=1, minValue=0) cmds.connectAttr(left_elbow_ik_ctrl + '.followWrist', left_wrist_ctrl_constraint[0] + '.w0', f=True) + left_wrist_reverse_node = cmds.createNode('reverse', name='left_wrist_parent_reverse') + cmds.connectAttr(left_elbow_ik_ctrl + '.followWrist', left_wrist_reverse_node + '.inputX', f=True) + cmds.connectAttr(left_wrist_reverse_node + '.outputX', left_knee_ctrl_constraint[0] + '.w1', f=True) + # Left Leg Stretchy System cmds.addAttr(left_arm_switch, ln="squashStretch", at="enum", en="-------------:", keyable=True) @@ -5977,7 +6003,7 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.connectAttr(left_arm_switch + '.influenceSwitch', left_elbow_scale_blend + '.blender', f=True) cmds.connectAttr(left_elbow_scale_blend + '.output', gt_ab_joints.get('left_elbow_jnt') + '.scale', f=True) - + # Left Hand Ctrl Visibility Type cmds.addAttr(left_arm_switch, ln="armControls", at="enum", en="-------------:", keyable=True) cmds.setAttr(left_arm_switch + '.armControls', lock=True) @@ -6171,11 +6197,14 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.connectAttr(right_arm_switch + '.ctrlVisibility', right_fingers_ctrl_grp + '.v', f=True) # IK Wrist Automation - right_wrist_ctrl_constraint = cmds.parentConstraint(right_wrist_ik_ctrl, right_elbow_ik_ctrl_grp, mo=True) + right_wrist_ctrl_constraint = cmds.parentConstraint([right_wrist_ik_ctrl, direction_ctrl], right_elbow_ik_ctrl_grp, mo=True) cmds.addAttr(right_elbow_ik_ctrl, ln="elbowAutomation", at="enum", en="-------------:", keyable=True) cmds.setAttr(right_elbow_ik_ctrl + '.elbowAutomation', lock=True) - cmds.addAttr(right_elbow_ik_ctrl , ln='followWrist', at='bool', k=True) + cmds.addAttr(right_elbow_ik_ctrl , ln='followWrist', at='float', k=True, maxValue=1, minValue=0) cmds.connectAttr(right_elbow_ik_ctrl + '.followWrist', right_wrist_ctrl_constraint[0] + '.w0', f=True) + right_wrist_reverse_node = cmds.createNode('reverse', name='right_wrist_parent_reverse') + cmds.connectAttr(right_elbow_ik_ctrl + '.followWrist', right_wrist_reverse_node + '.inputX', f=True) + cmds.connectAttr(right_wrist_reverse_node + '.outputX', right_knee_ctrl_constraint[0] + '.w1', f=True) # Right Leg Stretchy System cmds.addAttr(right_arm_switch, ln="squashStretch", at="enum", en="-------------:", keyable=True) @@ -6455,8 +6484,8 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.addAttr(main_ctrl, ln="controlsVisibility", at="bool", keyable=True) cmds.setAttr(main_ctrl + '.controlsVisibility', 1) - cmds.addAttr(main_ctrl , ln='controlsScaleJoints', at='double', k=True, minValue=0, maxValue=1) - cmds.setAttr(main_ctrl + ".controlsScaleJoints", 1) + cmds.addAttr(main_ctrl , ln='jointCtrlsScaleInfluence', at='double', k=True, minValue=0, maxValue=1) + cmds.setAttr(main_ctrl + ".jointCtrlsScaleInfluence", 1) cmds.setAttr(geometry_grp + '.overrideEnabled', 1) cmds.connectAttr(main_ctrl + '.geometryDisplayMode', geometry_grp + '.overrideDisplayType', f=True) @@ -6484,7 +6513,7 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil [neck_base_ctrl, neck_base_ctrl_grp, gt_ab_joints.get('neck_base_jnt')], [neck_mid_ctrl, neck_mid_ctrl_grp, gt_ab_joints.get('neck_mid_jnt')], - #[head_ctrl, head_ctrl_grp, gt_ab_joints.get('head_jnt')], Issues with eyes + #[head_ctrl, head_ctrl_grp, gt_ab_joints.get('head_jnt')],# Issues with eyes #[jaw_ctrl, jaw_ctrl_grp, gt_ab_joints.get('jaw_jnt')], Really necessary? # Left Arm [left_clavicle_ctrl, left_clavicle_ctrl_grp, gt_ab_joints.get('left_clavicle_jnt')], @@ -6555,10 +6584,12 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil [right_pinky01_ctrl_list[0], right_pinky01_ctrl_list[1], gt_ab_joints.get('right_pinky01_jnt')], [right_pinky02_ctrl_list[0], right_pinky02_ctrl_list[1], gt_ab_joints.get('right_pinky02_jnt')], [right_pinky03_ctrl_list[0], right_pinky03_ctrl_list[1], gt_ab_joints.get('right_pinky03_jnt')], - + ] + # Joint Inflation Basic Setup + jnt_scale_ctrl_scale = general_scale_offset*0.05 for ctrl_grps in inflation_system_groups: # Ctrl, CtrlGrp, Joint, CreateOffset? blend_node = cmds.createNode('blendColors', name= ctrl_grps[0].replace(ctrl_suffix, '') + 'inflation_blend') @@ -6567,20 +6598,26 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.setAttr(blend_node + '.color2G', 1) cmds.setAttr(blend_node + '.color2B', 1) - cmds.connectAttr(main_ctrl + '.controlsScaleJoints', blend_node + '.blender') # Main Control's Slave - cmds.connectAttr(ctrl_grps[0] + '.scale', blend_node + '.color1') + cmds.connectAttr(main_ctrl + '.jointCtrlsScaleInfluence', blend_node + '.blender') # Main Control's Slave + + jnt_scale_ctrl = create_loc_joint_curve(ctrl_grps[0].replace(ctrl_suffix, 'scaleCtrl'), jnt_scale_ctrl_scale) + cmds.delete(cmds.parentConstraint(ctrl_grps[0], jnt_scale_ctrl)) + cmds.parent(jnt_scale_ctrl, ctrl_grps[0]) + cmds.connectAttr(jnt_scale_ctrl+ '.scale', blend_node + '.color1') cmds.connectAttr(blend_node + '.output', ctrl_grps[2] + '.scale') + lock_hide_default_attr(jnt_scale_ctrl, scale=False, visibility=False) + cmds.setAttr(jnt_scale_ctrl + '.v', keyable=False) - decompose_matrix_node = cmds.createNode('decomposeMatrix', name= ctrl_grps[0].replace(ctrl_suffix, '') + 'inverseScale') - cmds.connectAttr(ctrl_grps[0] + '.inverseMatrix', decompose_matrix_node + '.inputMatrix') - cmds.connectAttr(decompose_matrix_node + '.outputScale', ctrl_grps[1] + '.scale') + cmds.addAttr(ctrl_grps[0], ln="showScaleCtrl", at="bool", keyable=True) + cmds.connectAttr(ctrl_grps[0] + '.showScaleCtrl', jnt_scale_ctrl + '.visibility') + cmds.setAttr(ctrl_grps[0] + '.showScaleCtrl', 0) - cmds.setAttr(ctrl_grps[0] + '.minScaleXLimit', 0.01) - cmds.setAttr(ctrl_grps[0] + '.minScaleYLimit', 0.01) - cmds.setAttr(ctrl_grps[0] + '.minScaleZLimit', 0.01) - cmds.setAttr(ctrl_grps[0] + '.minScaleXLimitEnable', 1) - cmds.setAttr(ctrl_grps[0] + '.minScaleYLimitEnable', 1) - cmds.setAttr(ctrl_grps[0] + '.minScaleZLimitEnable', 1) + cmds.setAttr(jnt_scale_ctrl + '.minScaleXLimit', 0.01) + cmds.setAttr(jnt_scale_ctrl + '.minScaleYLimit', 0.01) + cmds.setAttr(jnt_scale_ctrl + '.minScaleZLimit', 0.01) + cmds.setAttr(jnt_scale_ctrl + '.minScaleXLimitEnable', 1) + cmds.setAttr(jnt_scale_ctrl + '.minScaleYLimitEnable', 1) + cmds.setAttr(jnt_scale_ctrl + '.minScaleZLimitEnable', 1) if len(ctrl_grps) > 3: # Create Offset Input if ctrl_grps[3]: @@ -6595,29 +6632,29 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil cmds.connectAttr(ctrl_grps[0] + '.scaleOffset', offset_node + '.input3D[1]', force=True) cmds.connectAttr(offset_node + '.output3D', ctrl_grps[2] + '.scale', force=True) - + # Joint Inflation/Deflation Mechanics & Special Cases left_wrist_scale_blend = cmds.createNode('blendColors', name='left_wrist_switchScale_blend') - cmds.connectAttr(left_wrist_ik_ctrl + '.scale', left_wrist_scale_blend + '.color1') - cmds.connectAttr(left_wrist_ctrl + '.scale', left_wrist_scale_blend + '.color2') + cmds.connectAttr(left_wrist_ik_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', left_wrist_scale_blend + '.color1') + cmds.connectAttr(left_wrist_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', left_wrist_scale_blend + '.color2') cmds.connectAttr(left_wrist_scale_blend + '.output', gt_ab_joints.get('left_wrist_jnt') + '.scale') cmds.connectAttr(left_arm_switch + '.influenceSwitch', left_wrist_scale_blend + '.blender') right_wrist_scale_blend = cmds.createNode('blendColors', name='right_wrist_switchScale_blend') - cmds.connectAttr(right_wrist_ik_ctrl + '.scale', right_wrist_scale_blend + '.color1') - cmds.connectAttr(right_wrist_ctrl + '.scale', right_wrist_scale_blend + '.color2') + cmds.connectAttr(right_wrist_ik_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', right_wrist_scale_blend + '.color1') + cmds.connectAttr(right_wrist_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', right_wrist_scale_blend + '.color2') cmds.connectAttr(right_wrist_scale_blend + '.output', gt_ab_joints.get('right_wrist_jnt') + '.scale') cmds.connectAttr(right_arm_switch + '.influenceSwitch', right_wrist_scale_blend + '.blender') left_ankle_scale_blend = cmds.createNode('blendColors', name='left_ankle_switchScale_blend') - cmds.connectAttr(left_foot_ik_ctrl + '.scale', left_ankle_scale_blend + '.color1') - cmds.connectAttr(left_ankle_ctrl + '.scale', left_ankle_scale_blend + '.color2') + cmds.connectAttr(left_foot_ik_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', left_ankle_scale_blend + '.color1') + cmds.connectAttr(left_ankle_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', left_ankle_scale_blend + '.color2') cmds.connectAttr(left_ankle_scale_blend + '.output', gt_ab_joints.get('left_ankle_jnt') + '.scale') cmds.connectAttr(left_leg_switch + '.influenceSwitch', left_ankle_scale_blend + '.blender') right_ankle_scale_blend = cmds.createNode('blendColors', name='right_ankle_switchScale_blend') - cmds.connectAttr(right_foot_ik_ctrl + '.scale', right_ankle_scale_blend + '.color1') - cmds.connectAttr(right_ankle_ctrl + '.scale', right_ankle_scale_blend + '.color2') + cmds.connectAttr(right_foot_ik_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', right_ankle_scale_blend + '.color1') + cmds.connectAttr(right_ankle_ctrl.replace(ctrl_suffix, 'scaleCtrl') + '.scale', right_ankle_scale_blend + '.color2') cmds.connectAttr(right_ankle_scale_blend + '.output', gt_ab_joints.get('right_ankle_jnt') + '.scale') cmds.connectAttr(right_leg_switch + '.influenceSwitch', right_ankle_scale_blend + '.blender') @@ -6841,38 +6878,38 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil ################# Bulletproof Controls ################# - lock_hide_default_attr(cog_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(spine01_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(spine02_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(spine03_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(spine04_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(neck_base_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(neck_mid_ctrl, translate=False, rotate=False, scale=False) + lock_hide_default_attr(cog_ctrl, translate=False, rotate=False) + lock_hide_default_attr(spine01_ctrl, translate=False, rotate=False) + lock_hide_default_attr(spine02_ctrl, translate=False, rotate=False) + lock_hide_default_attr(spine03_ctrl, translate=False, rotate=False) + lock_hide_default_attr(spine04_ctrl, translate=False, rotate=False) + lock_hide_default_attr(neck_base_ctrl, translate=False, rotate=False) + lock_hide_default_attr(neck_mid_ctrl, translate=False, rotate=False) lock_hide_default_attr(head_ctrl, translate=False, rotate=False) lock_hide_default_attr(jaw_ctrl, translate=False, rotate=False) - lock_hide_default_attr(hip_ctrl, translate=False, rotate=False, scale=False) + lock_hide_default_attr(hip_ctrl, translate=False, rotate=False) # Legs and Arms FK - lock_hide_default_attr(left_hip_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(left_knee_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(left_ankle_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(left_ball_ctrl, translate=False, rotate=False, scale=False) + lock_hide_default_attr(left_hip_ctrl, translate=False, rotate=False) + lock_hide_default_attr(left_knee_ctrl, translate=False, rotate=False) + lock_hide_default_attr(left_ankle_ctrl, translate=False, rotate=False) + lock_hide_default_attr(left_ball_ctrl, translate=False, rotate=False) - lock_hide_default_attr(right_hip_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(right_knee_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(right_ankle_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(right_ball_ctrl, translate=False, rotate=False, scale=False) + lock_hide_default_attr(right_hip_ctrl, translate=False, rotate=False) + lock_hide_default_attr(right_knee_ctrl, translate=False, rotate=False) + lock_hide_default_attr(right_ankle_ctrl, translate=False, rotate=False) + lock_hide_default_attr(right_ball_ctrl, translate=False, rotate=False) # Arms IK - lock_hide_default_attr(left_clavicle_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(left_shoulder_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(left_elbow_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(left_wrist_ctrl, translate=False, rotate=False, scale=False) + lock_hide_default_attr(left_clavicle_ctrl, translate=False, rotate=False) + lock_hide_default_attr(left_shoulder_ctrl, translate=False, rotate=False) + lock_hide_default_attr(left_elbow_ctrl, translate=False, rotate=False) + lock_hide_default_attr(left_wrist_ctrl, translate=False, rotate=False) - lock_hide_default_attr(right_clavicle_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(right_shoulder_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(right_elbow_ctrl, translate=False, rotate=False, scale=False) - lock_hide_default_attr(right_wrist_ctrl, translate=False, rotate=False, scale=False) + lock_hide_default_attr(right_clavicle_ctrl, translate=False, rotate=False) + lock_hide_default_attr(right_shoulder_ctrl, translate=False, rotate=False) + lock_hide_default_attr(right_elbow_ctrl, translate=False, rotate=False) + lock_hide_default_attr(right_wrist_ctrl, translate=False, rotate=False) lock_hide_default_attr(left_wrist_ik_ctrl, translate=False, rotate=False) lock_hide_default_attr(left_elbow_ik_ctrl, translate=False) @@ -6903,7 +6940,7 @@ def lock_hide_default_attr(obj, translate=True, rotate=True, scale=True, visibil ] for finger in lock_fingers: - lock_hide_default_attr(finger, translate=False, rotate=False, scale=False) + lock_hide_default_attr(finger, translate=False, rotate=False) # Foot Automation lock_hide_default_attr(left_foot_ik_ctrl, translate=False, rotate=False) @@ -7854,7 +7891,7 @@ def extract_transform_joint_to_proxy(joint_name, ignore_translate=False, ignore_ export_dict = {'gt_auto_biped_version' : script_version, 'gt_auto_biped_export_method' : 'world-space'} - no_rot_string_list = ['elbow', 'spine', 'neck', 'head', 'jaw', 'cog', 'eye', 'shoulder', 'ankle', 'knee'] + no_rot_string_list = ['elbow', 'spine', 'neck', 'head', 'jaw', 'cog', 'eye', 'shoulder', 'ankle', 'knee', 'hip'] left_offset_rot_string_list = ['left_clavicle', 'left_wrist'] right_offset_rot_string_list = ['right_clavicle', 'right_wrist'] no_rot_list = [] diff --git a/python-scripts/gt_utilities.py b/python-scripts/gt_utilities.py index 4977f3af..79ebcbb3 100644 --- a/python-scripts/gt_utilities.py +++ b/python-scripts/gt_utilities.py @@ -1059,7 +1059,133 @@ def gtu_delete_all_locators(): if errors != '': print('######## Errors: ########') print(errors) - + + +def gtu_full_hud_toggle(): + ''' Toggles common HUD options so all the common ones are either active or inactive ''' + + hud_current_state = {} + + # 1 - Animation Details + hud_current_state['animationDetailsVisibility'] = int(mel.eval('optionVar -q animationDetailsVisibility;')) + # 2 - Cache + try: + from maya.plugin.evaluator.CacheUiHud import CachePreferenceHud + hud_current_state['CachePreferenceHud'] = int(CachePreferenceHud().get_value() or 0) + except: + hud_current_state['CachePreferenceHud'] = 0 + # 3 - Camera Names + hud_current_state['cameraNamesVisibility'] = int(mel.eval('optionVar -q cameraNamesVisibility;')) + # 4 - Caps Lock + hud_current_state['capsLockVisibility'] = int(mel.eval('optionVar -q capsLockVisibility;')) + # 5 - Current Asset + hud_current_state['currentContainerVisibility'] = int(mel.eval('optionVar -q currentContainerVisibility;')) + # 6 - Current Frame + hud_current_state['currentFrameVisibility'] = int(mel.eval('optionVar -q currentFrameVisibility;')) + # 7 - Evaluation + hud_current_state['evaluationVisibility'] = int(mel.eval('optionVar -q evaluationVisibility;')) + # 8 - Focal Length + hud_current_state['focalLengthVisibility'] = int(mel.eval('optionVar -q focalLengthVisibility;')) + # 9 - Frame Rate + hud_current_state['frameRateVisibility'] = int(mel.eval('optionVar -q frameRateVisibility;')) + # 10 - HumanIK Details + hud_current_state['hikDetailsVisibility'] = int(mel.eval('optionVar -q hikDetailsVisibility;')) + # 11 - Material Loading Details + hud_current_state['materialLoadingDetailsVisibility'] = int(mel.eval('optionVar -q materialLoadingDetailsVisibility;')) + # 12 - Object Details + hud_current_state['objectDetailsVisibility'] = int(mel.eval('optionVar -q objectDetailsVisibility;')) + # 13 - Origin Axis - Ignored as non-hud element + #hud_current_state['originAxesMenuUpdate'] = mel.eval('optionVar -q originAxesMenuUpdate;') + # 14 - Particle Count + hud_current_state['particleCountVisibility'] = int(mel.eval('optionVar -q particleCountVisibility;')) + # 15 - Poly Count + hud_current_state['polyCountVisibility'] = int(mel.eval('optionVar -q polyCountVisibility;')) + # 16 - Scene Timecode + hud_current_state['sceneTimecodeVisibility'] = int(mel.eval('optionVar -q sceneTimecodeVisibility;')) + # 17 - Select Details + hud_current_state['selectDetailsVisibility'] = int(mel.eval('optionVar -q selectDetailsVisibility;')) + # 18 - Symmetry + hud_current_state['symmetryVisibility'] = int(mel.eval('optionVar -q symmetryVisibility;')) + # 19 - View Axis + hud_current_state['viewAxisVisibility'] = int(mel.eval('optionVar -q viewAxisVisibility;')) + # 20 - Viewport Renderer + hud_current_state['viewportRendererVisibility'] = int(mel.eval('optionVar -q viewportRendererVisibility;')) + # ------- Separator ------- + # 21 - In-view Messages + hud_current_state['inViewMessageEnable'] = int(mel.eval('optionVar -q inViewMessageEnable;')) + # 22 - In-view Editors + hud_current_state['inViewEditorVisible'] = int(mel.eval('optionVar -q inViewEditorVisible;')) + # Conditional - XGen Info + hud_current_state['xgenHUDVisibility'] = int(mel.eval('optionVar -q xgenHUDVisibility;')) + + # Check if toggle ON or OFF + toggle = True + count = 0 + for item_state in hud_current_state: + if hud_current_state.get(item_state): + count +=1 + # More than half is on, so OFF else ON (Default) + if count > len(hud_current_state)/2: + toggle = False + + # Toggles non-standard hud elements + if toggle: + mel.eval('setAnimationDetailsVisibility(true)') + try: + from maya.plugin.evaluator.CacheUiHud import CachePreferenceHud + CachePreferenceHud().set_value(True) + except: + pass + mel.eval('setCameraNamesVisibility(true)') + mel.eval('setCapsLockVisibility(true)') + mel.eval('setCurrentContainerVisibility(true)') + mel.eval('setCurrentFrameVisibility(true)') + mel.eval('SetEvaluationManagerHUDVisibility(1)') + mel.eval('setFocalLengthVisibility(true)') + mel.eval('setFrameRateVisibility(true)') + if not hud_current_state.get('hikDetailsVisibility'): + cmds.ToggleHikDetails() + mel.eval('setHikDetailsVisibility(true)') + mel.eval('ToggleMaterialLoadingDetailsHUDVisibility(true)') + mel.eval('setObjectDetailsVisibility(true)') + mel.eval('setParticleCountVisibility(true)') + mel.eval('setPolyCountVisibility(true)') + mel.eval('setSceneTimecodeVisibility(true)') + mel.eval('setSelectDetailsVisibility(true)') + mel.eval('setSymmetryVisibility(true)') + mel.eval('setViewAxisVisibility(true)') + mel.eval('setViewportRendererVisibility(true)') + mel.eval('setXGenHUDVisibility(true)') + if not hud_current_state.get('inViewMessageEnable'): + cmds.ToggleInViewMessage() + if not hud_current_state.get('inViewEditorVisible'): + cmds.ToggleInViewEditor() + else: + mel.eval('setAnimationDetailsVisibility(false)') + try: + from maya.plugin.evaluator.CacheUiHud import CachePreferenceHud + CachePreferenceHud().set_value(False) + except: + pass + mel.eval('setCurrentContainerVisibility(false)') + mel.eval('setCurrentFrameVisibility(false)') + mel.eval('SetEvaluationManagerHUDVisibility(0)') + mel.eval('setFocalLengthVisibility(false)') + mel.eval('setFrameRateVisibility(false)') + if hud_current_state.get('hikDetailsVisibility'): + cmds.ToggleHikDetails() + mel.eval('setHikDetailsVisibility(false)') + mel.eval('hikDetailsKeyingMode()') + mel.eval('ToggleMaterialLoadingDetailsHUDVisibility(false)') + mel.eval('setObjectDetailsVisibility(false)') + mel.eval('setParticleCountVisibility(false)') + mel.eval('setPolyCountVisibility(false)') + mel.eval('setSceneTimecodeVisibility(false)') + mel.eval('setSelectDetailsVisibility(false)') + mel.eval('setViewportRendererVisibility(false)') + mel.eval('setXGenHUDVisibility(false)') + # Default states are preserved: camera names, caps lock, symmetry, view axis, in-view messages and in-view editor + ''' ____________________________ Functions ____________________________''' #gtu_reload_file() @@ -1096,4 +1222,5 @@ def gtu_delete_all_locators(): #gtu_build_gui_about_gt_tools() # --- Other Functions --- -#gtu_delete_all_locators() \ No newline at end of file +#gtu_delete_all_locators() +#gtu_full_hud_toggle() \ No newline at end of file