Note: This is almost fully conservative, but since it is derived from bone positions on the skeleton (not skinning all verts across all frames) it could have some edge cases for (presumably) strange content.
This hasn't been an issue in practice yet, so we won't worry about it, and each anim bank sequence has an optional BoundsScale that can be adjusted to account for certain cases that might fail.
One possible future idea if needed, is to calculate a per-bone influence radius in the skeleton mesh build, where each bone has a bounding sphere of all weighted vertex positions. Then we could try something like the following to make the bounds possibly fit this content better.
InitialAnimatedBoundsMin(AssetBounds.Origin - AssetBounds.BoxExtent); InitialAnimatedBoundsMax(AssetBounds.Origin + AssetBounds.BoxExtent); For each Key,Bone: AnimatedBoundsMin = Min(AnimatedBoundsMin, InitialAnimatedBoundsMin + Bone.Pos[Key] - Bone.RefPos) AnimatedBoundsMax = Max(AnimatedBoundsMax, InitialAnimatedBoundsMax + Bone.Pos[Key] - Bone.RefPos)