Make animation "skinnier"

I have a mesh character here who was modeled in and A pose so he has very wide legs. Is there a way to retract his limbs inward on the default roblox animations so he doesn’t look so much like he just got off a horse? I could drag the libs inward on each keyframe but that is time consuming and imperfect. I may just have to make custom animations…

I think modifying C0/C1 properties of the shoulder and “thigh” Motor6Ds using code can make them “skinnier”

Change Motor6D C0 and C1 if you want to avoid creating a custom animation.

It’s better to create animations yourself as I think that changing C0 and C1 can cause issues later on.

That would only cause an issue if he doesn’t reset the C0/C1 of the joints when he plays another animation. Which is as easy to solve by just sending the parameters for what the C0/C1 should be when playing an animation.

To make an A-posed character compatible with I-pose standard Roblox animations, the best option is to adjust the joint C0 and C1 values so that the character’s rest pose (pose when all Motor6D.Transforms are identity) is I-pose. If the character is a Humanoid-based R15, it’s best not to edit the Motor6D C0 and C1 directly, however, it’s preferable to edit the corresponding RigAttachment pairs.

You probably won’t be able to just change Shoulder and Thigh motor C0/C1 though, you will actually have to apply the inverse of the shoulder and thigh correction rotations to all the joint pairs down the limb (elbows, knees, ankles, wrists), so that all of the joints have the correct rotation axes. For example, knee and elbows should bend on the local X axis, which they probably aren’t currently doing if you imported the character as R15.

@SomeFedoraGuy
@hellohennessy
@TheCraftNCreator
@EmilyBendsSpace

Thanks for helping, I was positive the only answer I would get was “reanimate it” and I had no idea of these C0/C1 values. I attempted changing the C0/C1 values both through scripts and manually (and all the lower joints) to no avail and here is an extreme proof of concept:


I was not actually the one who uploaded this character to roblox and I wonder if I can just throw him in C4D and put him in an I-pose and reupload it? I have had so much difficulty with custom characters before and I didn’t even know that segmented r15 characters could stretch at the joints until I found this one. Somebody would have to walk me through the upload process to get a stretchy r15.

(also random thing when I was manually setting the C0/C1s the params reset every time I take this guy in and out of starterplayer but i just set them while he was in starterplayer… assuming its a random bug?)

This is why I recommended working with the RigAttachments rather than the Motor6D values directly. Every time you put a Humanoid-based character into the Workspace, Roblox re-rigs it by calling Humanoid:BuildRigFromAttachments(). All of the Motor6D C0 and C1 values are set from those attachments. Making matters worse, there are now CFrameValue objects as children of the attachments, which save off the original (spawn-time) values, as the reference point for runtime scaling of the character.

When I’m trying to rig custom characters, I delete all of the Motor6Ds, and all of the value object instances inside the character, and then manually call game.Workspace.MyCharacter.Humanoid:BuildRigFromAttachments() from the command bar to test my re-rigging. The only values I change are the CFrame property of the RigAttachments, which are all the pairs of attachments whose name ends in “RigAttachment”. When you do something like correct from A or T pose to I pose, you have to make 1-sided corrections in the shoulders and hip joints (editing only 1 RigAttachment from each pair, so 4 total). And then for all the ‘downstream’ joints, you need to edit both attachments from each pair identically, so that the joint is re-oriented w.r.t. the animation transforms, but not visible changed (i.e. you don’t want to put a bend in the elbows or knees, just correct their rotation axes).

1 Like