Version 2.8
A support panel containing many methods for dealing with point or dummy helpers, including:
Adding to the scene, to a selection, or to sub-object parts.
Adjusting size, points shape, wire colors and other display properties like showing links, trajectories, names, or pivots.
Options for baking, linking and constraining.
Orient axes with rotation offsets or X-axis re-alignment.
Selecting and manipulating hierarchies, and toggling skins.
Duplicating existing hierarchies with new helpers and transfer skinned meshes.
Replacing hierarchies of helpers with a Bones System, including transferring skinned meshes and baked animation.
Using this section you can choose which type of helper the panel overall will operate on - either Points or Dummies. Points have some additional display options to change their appearance.
Both helper types also have size buttons to scale the helpers, using either a fixed size setting or a manual setting. If the helpers are already selected changing the size will apply immediately, otherwise you can set the Size value manually then select the helpers and click Apply.
Click on the Open Wire Color Picker >> button to open a separate UI for setting wire colors on any selected objects (see below).
The button Select All will search the scene for all helpers with either PT_ or DM_ prefixes (depending on the chosen type) and select them. The option Hidden if checked will ensure hidden helpers are also selected. Likewise, the option Frozen if checked will ensure frozen helpers are also selected.
The Save Palette button is used to store the current color swatches to a file. The Load Palette button will retrieve the stored color palette for each swatch. The Factory Defaults button will retrieve the original colors when the UI was first opened.
Use the color swatches to set a desired color. Click the Apply buttons to set the wire color for any selected objects. Use the thin bar above each color swatch to get the desired wire color from a single selected object.
The display of the helpers includes the ability to toggle Links (for hierarchies) or Trajectories (when animated with translation) on or off.
The Toggle Bones button will hide and unhide Bone Objects, as found in the default Display panel toggle.
These toggles allow the ability to show labels for Names and Pivots (as X,Y,Z axes lines), for any objects visible and not frozen in the scene. There's also an option to only show labels for a Selection or All objects.
The show names option has a Names Offset value to effectively push the label towards or away from each object's center. The show pivots option includes an Axis Length setting and Reset length button.
From this section you can add helpers to the scene in various ways.
Add To Origin - Simply places a single helper at the world origin.
Add to Pick Point - Will prompt you to pick a point in the world to place a helper. If you want to use snaps then invoke those first before using this option. Use right-click to cancel the operation.
Add To Surface - Will prompt you to pick an object surface (point at mouse click) to place a helper which will be aligned to the normal of that surface. Use right-click to cancel the operation.
Add Helpers - This option activates the create point helper panel in the standard UI to enable placement of multiple helpers. Use right-click to cancel the operation.
Auto Grid (checkbox) - Option for Add Helpers to enable the auto grid toggle from the create helpers panel, which will align the helper to a surface due to the grid alignment effect. Without this option enabled the helper will be placed on the world X/Y plane.
Convert Helper Type - This will simply replace points with dummies and visa versa.
Reset Scale - This operation will reset the scale on all selected helpers and will apply to all helpers in a hierarchy (unlike the standard Hierarchy Panel > Pivot > Reset Scale).
This operation will add a helper for each object in a selection prefixed with either PT_ or DM_.
If the Use Names option is checked the helper will be named the same as the selected object with the added prefix. If not, it will be named either Point or Dummy.
If the Bake Keys option is checked then the added helpers will have the animation of the selected objects baked onto them over the current time range. Note that baking will disable the binding options below it.
There are two options available for binding the new helpers to their selected host objects. The first is via direct linking, the other by using constraints.
Linking:
Helper as the parent - This will make the new helper the direct parent of the selected object.
Selection as the parent - This will make the helper a child of the selected object.
Picked parent - This option will allow you to pick an object as the parent of the helper using the Pick a parent button, but the helper will be placed on the selected object.
Constraints:
Helper: Link Constraint - This will assign a Link Constraint controller to the helper with the selected object as a target.
Helper: Pos/Rot - This will assign both a Position and Orientation Constraint to the helper with the selected object as a target for both.
Selection: Link Constraint - This will assign a Link Constraint controller to the selected object with the helper as a target.
Selection: Pos/Rot - This will assign both a Position and Orientation Constraint to the selected object with the helper as a target for both.
Hierarchy Links - Converts any selected helpers with bindings to direct linkages, based on their targets from either Link Constraints or Position/Orientation Constraints.
Link Constraints - Converts any selected helper with bindings to use Link Constraints with the parent as a target if previously linked, or a previous target if Position/Orientation Constraints were applied.
Pos/Rot Constraints - Converts any selected helper with bindings to use Position and Orientation Constraints with the parent as a target if previously linked, or a previous target if Link Constraints were applied.
This section will allow you to add helpers to selected sub-object parts of an object while in sub-object mode. Note: Requires an Editable Poly or equivalent (not Meshes).
Polygons:
Add To Polygons - Adds a helper to the center of any selected polygon.
Add To Polygons Average - Adds a helper to the averaged calculated position of the combined selected polygons based on their centers.
Add To Polygons Orient - Adds a helper to the center of each selected polygon and orients the helper to the polygon surface normal.
Add To Elements - Adds a helper to the center of each distinct selected element.
Vertices:
Add To Vertices - Adds a helper to each selected vertex.
Add To Vertices Average - Adds a helper to the averaged calculated position of the combined selected vertices.
Edges:
Add To Edges - Adds a helper to the center of each selected edge.
Add To Edges Average - Adds a helper to the averaged calculated position of the combined selected edges.
Selection Sets (by sub-object type):
Add To Selection Sets - Adds a helper to the averaged calculated position for each sub-object selection set found and names it the same as that selection set.
Delete Selection Sets - Removes all sub-object selection sets (including all faces, vertices and edges) from the selected object.
Apply Rotation Offset - re-orient selected helpers by a chosen Amount value. Choose one of the Axes and the + or - direction to apply. Supports hierarchies of helpers with full or partial selection.
Re-align X-Axis - This method will use LookAt Constraints to align selected helpers down the positive X-axis. The Source axis can be chosen to re-orient the right angle axis. The Flip setting will apply a 180 rotation. Supports hierarchies of helpers with full or partial selection.
This is useful for aligning helper "joints" when building deformation skeletons for games. For example if you want to move the helpers into position then re-align them afterwards.
Constrain Nearest - Bind using both position and orientation constraints each object in a selection to its nearest neighbor based on a specified Distance threshold. This method will search the scene for any nearby objects, excluding those in the selection, to use as bind targets if they are within the distance threshold.
By holding SHIFT you can activate Keep Initial Offset for all the constraints to retain the objects' original position and orientation.
Constrain Hierarchy - Bind using both position and orientation constraints one hierarchy to another, based on shared pivot locations of each object in those hierarchies. The pivots of each matching pair will need to share the same position. This method will prompt to pick two separate hierarchy nodes and automatically find all linked nodes within each then bind the first one to the second one.
Remove Constraints - For each object in the selection this method will replace the position controller with Position_XYZ and the orientation controller with Euler_XYZ, thereby effectively removing all constraints.
Link Points To Dummies - Takes a selection of existing PT_ and DM_ prefixed helpers and links the points to the dummies based on proximity as determined by the Distance threshold value.
Link To Last Object - Takes a selection and links them to the last picked object, or if group selected the last unsorted object. Hold SHIFT to not display hierarchy links.
Link By > Names - Takes a selection and links each object to the previous one based on their sorted names. Hold CONTROL to reverse the order of the linkage.
Link By > Picked - Takes a selection and links each object to the previous one based on the order they were picked. Hold CONTROL to reverse the order of the linkage.
Duplicate A Hierarchy - This method will create a new hierarchy from a selection (usually another hierarchy), using the chosen helper type (Point or Dummy). The new helpers will also receive the same wire colors as the original helpers.
The default action is None and will simply create it without any constraints or baking.
You can choose instead to Bake the keys of the selected hierarchy to the new one to inherit it's motion.
Alternatively, you could add either Constraints for position and orientation, or Link Constraints to each node in the new hierarchy to track the selected one.
Ability to Transfer Skinned Meshes for any found to the new hierarchy. The old hierarchy will be deleted.
Select Full Hierarchy - Allows traversal of a single hierarchy based on partial selection. If the selection contains objects from different hierarchies then only the first one found is selected.
Store/Restore - Allows the ability to Store in memory a selected hierarchy, in order to unlink for editing purposes. The Restore option will then attempt to recreate the unlinked hierarchy if objects still exist.
Straighten Evenly - This method takes a selected chain of objects and from the root to tip will reposition the middle objects into a line and space them evenly. This is useful for creating tails, skirt bones, etc. TIP: Use the orientation rollout to re-align axes.
Joint Shifter - While enabled, this toggle will allow the transforming of objects without affecting their immediate child objects. This is useful when "shifting" objects around in a hierarchy when building skeletons, much like the hold-D key option when manipulating joints in Maya.
Skins On/Off - These methods will find any skinned meshes in the scene and toggle their Skin modifiers on or off, as well as their Always Deform setting. Note: Be sure the meshes and their joints are in the bind pose before applying.
This section is designed to enable the complete replacement of existing helpers with a Bones System. Specifically, it is indented for working with skeleton hierarchies used for animation.
For an alternative method, see the Legacy section below.
CORE & EXTRA:
The main idea is to separate out the bones that should have their bone lengths rendered from parent to child (CORE), from ones created as nubs (EXTRA) which have bone lengths equal to their bone size. This separation will inform the script which type of bone to create.
The EXTRA bones are optional depending on your needs or the type of skeleton you're converting. Generally, the CORE bones would be considered primary animation bones used with IK and selection, whereas EXTRA bones would usually be twist bones, IK bones, and any skin correction bones that are linked to the primary bones, but are not animated directly. The Unreal Metahuman skeleton is a good example of this setup.
CORE Helpers - With the CORE helpers selected click this button to store them in memory. These must be set before bones can be added. Also note that the root bone (with no parent) will always be included in the CORE bones.
EXTRA Helpers - With any EXTRA helpers selected click this button to store them in memory. These are optional for adding bones as nubs.
Use the C button to clear the stored helpers from memory and the S button to select them in the scene.
Local Axes:
Typically when importing animation skeletons that come from different sources (e.g. Daz3D, Mixamo, Metahuman, Mocap suits etc), each one will usually have different local joint axes in their joints compared to others. The new bones created with this script will override the original axes with ones that work well for rendering 3dsmax Bones lengths. To do this they will have their parent to child local positive X-axis point down the chain (for the CORE bones), so that they will render nicely in the viewport and make selection easier.
Note: If you need to preserve the original local axis of the nodes onto the new bones, you should use the Legacy method instead (described below), with the X-axis aligned option disabled.
End bones, Hub bones & Nub bones:
The CORE bones will have their lengths determined by their parent to child distance along the positive X-axis where they only have a single child. However, other types of bones can be created either manually (Nub bones) using the resize options below, or automatically (all types) during the replace operation.
The following other types of bones created include:
END bones: Any bone with no child bones linked to it (e.g. finger tips, toes, head etc).
HUB bones: Any bone with more than one child (e.g. pelvis, the last spine, hands etc).
NUB bones: Any bone where the length, width and height are all the same. All EXTRA bones are created as nubs in order to contrast with the CORE parent to child length bones.
Options:
Align end bones to parent - For any end bone this option will keep the local axis of the new bone aligned to its parent bone. If not enabled, it will default to using the original helper orientation. Leave this option off if you'd rather have the new end bones orient to the original helpers and use 90 degree offsets to manually re-orient them yourself.
Bake keys - Allows transfer of baked animation from the original helpers to the new bones over the current time range. This will work even when the original helpers had different joint pivots to the new bones.
Delete original helpers - This will remove the original helpers from the scene once all other operations have completed. If the original helpers are not removed they will be renamed with a prefix "ORIG_" and will also be added to a new selection set.
Skin meshes to new bones - For any found meshes containing a Skin modifier with the original helpers as their skin bones, they will be transferred over to the new bones.
Replace With Bones System:
After setting the desired options above, run this operation to replace the CORE helpers with parent to child length bones, along with any EXTRA helpers as bone nubs. The complete original hierarchy will be preserved and the new bones will also have the original names.
Additionally, the new bones will inherit the wire colors of the original helpers and also have selection sets added with the prefix "#__".
Use the buttons Select CORE Bones and Select EXTRA Bones to quickly select the new bones if available. Note: Only valid while the interface is still open after creating the new bones. Once closed the bones will no longer be memory referenced.
Adjust Bones:
Reset CORE Bones Length - Any selected CORE bones will have their stretch (length) reset to visually render from parent to child. Note: Only valid while the interface is still open after creating the new bones. Once closed the bones will no longer be memory referenced.
Bone Size & Apply - For any selected bones their size can be adjusted using the spinner or using the Apply button after settting a value.
Resize as a nub - If enabled, this sizing option will force the lengths of selected bones to match their bone size while adjusting them.
This section is an alternative to the above method, created for version 2.5 of this script. It appeared in version 2.4 and provides a simpler way to convert to bones, but with different behavior. It has now been restored for version 2.6 and above.
Replace With Bones System:
The operation when invoked will prompt for a single node in a hierarchy to be selected, then proceed to replace that hierarchy with a bones system using the same bone names. The old nodes will be removed unless Keep original hierarchy is checked.
If the local axis of each node is known to be positive X down the chain, then the option X-axis aligned bones can be left on which will allow the scale length of the bone to stretch from parent to child. If you know the alignment is not X-axis positive, you can uncheck this option to provide an alternative algorithm which will create new bone nubs using the existing axis orientation. This makes the legacy method unique compared to the CORE/EXTRAS method described above.
If you aren't using the X-axis aligned option and you keep the Create display bones option checked, it will create additional display-only bones between the actual hierarchy bones (scaled to be small nubs) to act as frozen visual references. If the M toggle is checked, a message will appear explaining this behavior.
The created bones will use the Bone size parameter set by the user prior to running this operation, except when using the create display bones option.
There's also an option to Bake keys if the original nodes are animated and you want to preserve that across the current time range.
The legacy method will also attempt to transfer any skinned meshes to the new bones.
FBX Import:
When importing skeletons using FBX format, be sure to set the bone conversion option to Convert as dummy, so that the joints are imported as helpers instead of bone nubs. That way the script can be used to convert the helpers to bones that will have their CORE bone lengths set correctly if using that method.
Skin Crawling Issue:
After creating the new bones and transferring Skin across to them, you may encounter the mesh on some bones jiggling around as the bone moves.
To fix this you can enable the Ignore Bone Scale option in the Advanced Paramaters of the Skin modifier.
Note that both of the Replace With Bones System methods above will automatically turn this on when re-adding skin modifiers.