Bone visualization in animation editor is incorrect

The animation editor will render bones incorrectly. Here is a close-up of a foot I modeled in Blender, including bones.

image

Here is how the animation editor in Roblox visualizes the bones.

image

you may notice that the ‘leaf’ bones (or the deepest bones in the hierarchy) are not being rendered. You can still select the bones and animate them as usual. It’s just the rendering that is incorrect. In fact, it seems as though the bones are being rendered in the opposite direction. Here is a close-up of my model’s arm. You can see that the lower arm is less transparent than the other pieces, presumably because the bones in the fingers that follow are both being rendered on the lower arm instead.

image

I filed a similar bug report back in October which can be found here. I assumed the highlighting issue in the 3d importer and the animation editor were the same issue. The issue for the 3d importer has been fixed since, but I was asked to file the animation editor part of the bug report separately, so here it is!

Expected behavior

I expect the visualization of bones in the animation editor to be identical to the visualization of bones as seen in Blender.

6 Likes

Thanks for the report! I filed a ticket in our internal database and we’ll follow up when we have an update for you.

Hi there, thanks for your report.

I think I need to give some context to explain what is happening here.

When animating with bones, bones don’t need a length. A bone is no more, no less than a CFrame in its parent’s space, and usually bones are chained together (like in your first screenshot, if you ignore the heel bone). You have a bone/CFrame at each joint, and it just so happens that the position of each CFrame is just a Vector3(0, length, 0) to move away from the parent, and a rotation.

If you move a bone to a different position, just like you did for the heel, you can see that Blender displays the real orientation of the bone, with its correct length, and adds a dotted line between the end of the parent and the position of the child. In the screenshot below, I also added an offset to the toe bone as well.

Since the length of the bones is not needed to animate rigs, the Bone instance used by Roblox doesn’t store it. To be honest, I am not 100% certain the FBX file format stores it either. But in any case, since this is only cosmetic, we do not have plans to add a property to the Bone instances just to display them.

So where does that leave us? Since we do not have the length, we cannot display the bone. That is why we decided to connect each bone its parent. When bones are chained (which happens most of the time), this is shown exactly as in Blender. But when they have an offset, they are replaced with “fake bones” as shown in red in the screenshot below:

If you rotate any of the bones, the rig should still be affected as you would expect - even when you rotate the sphere at the end of the chain (the base of the bone that is missing in your screenshots). However we agree that we should really display the orientation of that bone.

This is why we will draw a bone, but we need to guess its length. So for bones that have a parent, we will use 75% of the length of the parent. For bones that have no parent, we will force the length to 1 stud. Sometimes that will be fine, sometimes that will be too short, and sometimes that will be too long. But that won’t have any effect on the animation and how to edit it.

1 Like