Hi there, welcome!
Yes this sounds like a regular Maya issue. How are you baking? Show your settings.
For example by default the Shifter joints are likely non-keyable. So if you selected “keyable” in your settings, it won’t bake anything.
Solution is to use “From Channel Box”, or make your joints keyable first.
If you use Python, you can specify which attributes you want to bake directly. Then it doesn’t matter if they are non-keyable or not.
For example, here is a little helper script I wrote. It’s a small portion of a larger GUI tool I wrote for a pipeline.
It’s runs on your time range, so either set your timeline, or edit the script. It also doesn’t do “Smart Bake”. So if you need that, you need to edit the script. This is just an example of what you can do.
It also runs an Euler Filter on all the rotations of the joints, to help stop flipping/popping.
import pymel.core as pm
# bake_selected_joints.py
# A simple helper script to bake selected joints.
# This automatically chooses all the attributes, so the animator
# Doesn't have to manually choose settings each time.
#TODO: It would be nice to have a little GUI so the animator can choose settings, like range.
def bake_selected_joints(bakeBlendshapes=False):
startFrame = pm.playbackOptions(minTime=True, q=True)
endFrame = pm.playbackOptions(maxTime=True, q=True)
attrsToBake = ['tx', 'ty', 'tz', 'rx', 'ry', 'rz', 'sx', 'sy', 'sz']
everyJoint = pm.selected(type='joint')
everyBakeAttr = []
for eachNode in everyJoint:
for eachAttr in attrsToBake:
everyBakeAttr.append(eachNode.attr(eachAttr))
# Then include every custom attribute too:
for eachCustomAttr in eachNode.listAttr(userDefined=True):
everyBakeAttr.append(eachCustomAttr)
if bakeBlendshapes:
# Include baking all blendshapes
targetBlendshapes = pm.selected(type='blendShape')
for eachBlendshape in targetBlendshapes:
for eachTarget in eachBlendshape.w:
if eachTarget.isLocked():
continue
everyBakeAttr.append(eachTarget)
pm.bakeResults(
everyBakeAttr,
simulation=True,
shape=False,
sampleBy=1,
sparseAnimCurveBake=False,
bakeOnOverrideLayer=False,
removeBakedAnimFromLayer=True,
#resolveWithoutLayer=cmds.ls(type='animLayer'),
t=(startFrame, endFrame),
)
# Run an euler filter to help prevent flipping.
everyRotation = [jnt.r for jnt in everyJoint]
pm.filterCurve(everyRotation, filter='euler')
bake_selected_joints(bakeBlendshapes=True)