Is there a bone axis "standard?"

I’ve recently been trying to adapt a 3rd party FBX rig to our pipeline in 3ds max,
and was confounded by the bone orientation.
Max bones seem to have arbitrarily limited the bone axes (the axis that points form parent to child bone) to the X axis
Y axis seems more common, though.
Mixamo, and BVH files seem to use Y for the bone axis, as do many Maya rigs.

Would you say Y is standard?

Unfortunately there is no single standard. If you are using Euler rotations, it’s a good idea to point the bones along the first Euler axis (so if you you XYZ rotation order, use X as the long axis, etc). Because of the order dependency in eulers the ‘twist’ axis is safest in that place – particularly since most joints are minimally flexible along the long axis. That keeps odd interpolations to a minimum.

If you use quaternions, it’s basically pure convention

If you’re converting max <> maya, don’t forget to watch for sign flips: the Max <> Maya transformation includes both a change of axis (a 90 degree rotation) but also a change of basis from right handed (maya) to left handed (max).

TLDR: Under the hood all of this stuff is convention based, not reducible to a single mathematical necessity. So people do things their own way and we pick up the pieces. Blecch.

I’ve often wondered the same thing.

On a kind of related note: when it comes to mirroring bones from one side of the body to another, is it best to actually mirror them (resulting in a negative scale axis somewhere), or to simply rotate it so that one axis is facing the opposite direction to it’s mirrored bone?

I tend to favor the second option (mostly because motionbuilder doesn’t seem to like negative scale axis), but it feels really messy.

including the flip allows you to keep the same behavior as the original bone on other axes (maya’s ‘mirror behavior’ option) but at the cost of a negative scales.

There are many rigging tuts that encourage mirroring bones in such a way that the same rotation values on opposite joints result in a mirror rotation.
for example if elbows bend along the Z axis then you want a +Z rotation to produce a mirrored behavior in both arms.
With Mirrored 3ds max bones, things are opposite by default. +Z would rotate one arm forward and rotate its mirror back

I compensated for this by rotating the opposite bones to compensate
but the result meant that all my control rig building scripts needed to special case the opposite limbs
and suffer through wierd behavior when adjusting the rotated bones.
now I have a legacy mess to maintain, and I miss Maya.

In the future, with a clean slate, I would probably leave max bones at their default
and put the mirrored axis behavior into the control objects alone, using a relative orient constraint.
actually, I’d probably avoid max bones altogether and just use geo, which would give me a “Y” bone axis