Animation
FBX vs GLB vs BVH: which 3D animation format should you use?
What FBX, GLB and BVH files hold, where each works best in Unity, Unreal, Godot, Blender and the web, and the problems each format causes.
By AssetLoom Team, published , 6 min read
Most animation packs offer the same motion in several file formats, and the choice looks harder than it is. FBX, GLB and BVH store animation in different ways and carry different amounts of everything else: meshes, skins, materials and textures. Once you know what each one holds, the right choice usually follows from the tool you are importing into.
This guide compares the three, explains where each one works best, and covers the problems each format tends to cause. It finishes with what our own animation packs include, so you know which file to open first.
The three formats at a glance
| FBX | GLB (glTF 2.0) | BVH | |
|---|---|---|---|
| Owner | Autodesk (proprietary) | Khronos Group (open standard) | Biovision (old, simple text format) |
| Mesh and skinning | Yes | Yes | No, skeleton only |
| Materials and textures | Materials; textures usually beside the file | PBR materials, textures embedded | No |
| Animation | Several takes per file | Several animations per file | Usually one clip per file |
| Morph targets (shape keys) | Yes | Yes | No |
| Units and axes | Set by the exporter; varies | Fixed: metres, Y up | Not defined; depends on the source |
| Readable as text | Binary (ASCII variant exists) | Binary (.gltf variant is JSON) | Yes, plain text |
In short: FBX is the game-engine workhorse, GLB is the open, self-contained modern choice, and BVH is pure motion data.
FBX: the engine default
FBX has been the standard way to move rigged characters between 3D tools and game engines for years. Unity and Unreal Engine 5 import it out of the box, and Godot 4 has imported it natively since version 4.3.
Strengths
- Supported almost everywhere, including Maya, 3ds Max, MotionBuilder, Blender and every major engine.
- It is the input for Unity’s Humanoid Avatar system, which is how clips are shared between characters in Unity.
- Holds a mesh, a skeleton, skin weights, morph targets and several animation takes in one file.
Weaknesses
- The format is proprietary, and every exporter writes it a little differently. Units, axis conversion and extra bones depend on the exporter’s settings, which is where most import surprises come from.
- Textures are often referenced by path rather than embedded, so they go missing when files move between machines.
That variability is why good packs ship separate FBX files per engine. Ours have one for Unity and Godot (Y up, metres) and one for Unreal Engine 5 (UE5-style bone names, centimetres).
GLB: the open, self-contained choice
GLB is the binary form of glTF 2.0, an open standard from the Khronos Group. One .glb file holds the meshes, skeleton, skin, PBR materials, textures and animations together. The text form, .gltf, stores the same data as JSON with separate .bin and image files.
Strengths
- The specification fixes the conventions: metres, Y up, and a metal/roughness PBR material model. Two tools reading the same file should agree on scale and orientation.
- Self-contained, so textures can’t go missing. Good for sharing, version control and the web.
- The standard format for web 3D, such as three.js and model viewers, and well supported in Blender and Godot. Unreal Engine 5 imports glTF through its Interchange framework.
Weaknesses
- Unity needs a package (Unity glTFast) to read it, and that importer doesn’t create Humanoid avatars, so Humanoid workflows still need FBX.
- Animation is stored as sampled keys per node, which is accurate but leaves less room for editing curves than a source file.
BVH: motion only
BVH (Biovision Hierarchy) dates from early motion capture systems. It is a plain text file in two parts: a hierarchy that lists each joint, its offset from its parent and its rotation channels, and a motion block with one line of numbers per frame.
Strengths
- Tiny and readable. You can open it in a text editor and see the frame count, frame time and every joint.
- Widely used in motion capture, research and retargeting tools, and Blender imports it directly.
Weaknesses
- No mesh, skin, materials or textures. You always need a character to put the motion on.
- Units and axes aren’t defined by the format, and joints have offsets but no bone orientation, so tools rebuild the rest pose their own way.
- Unity, Unreal Engine 5 and Godot 4 don’t import BVH as standard. Convert it in Blender first, then export FBX or GLB.
Which format should you use?
| You are working in | Use | Why |
|---|---|---|
| Unity, Humanoid characters | FBX | Builds a Humanoid Avatar, so clips can be shared |
| Unreal Engine 5 | FBX made for UE5 | Mature skeletal mesh import; centimetres and UE5 names avoid conversions |
| Godot 4 | GLB | Godot’s docs recommend glTF; FBX also works from 4.3 |
| Web (three.js, model viewers) | GLB | One file, embedded textures, made for real-time delivery |
| Blender | The .blend source if offered, otherwise FBX or GLB | Actions and NLA strips stay editable |
| Mocap and retargeting tools | BVH | Motion-only data that these tools expect |
When a pack offers several formats, import one clip first in your target tool, check scale, facing and the loop, then bring in the rest. The engine guides go into detail: importing an FBX character into Unreal Engine 5 and FBX and GLB characters in Unity.
Common problems
FBX: wrong scale or rotation
The exporter’s unit or axis settings don’t match what the engine expects. Use the engine-specific file if there is one, and fix scale at import rather than by scaling the object afterwards.
FBX: missing textures
Copy the texture folder next to the FBX, or reconnect the textures to the imported materials by hand.
GLB: no animation or the wrong one plays
A GLB can hold several animations. Check that your importer brought them all in, and pick the one you want by name rather than relying on the first.
GLB: skeleton-only files
Some packs ship per-clip GLB files with just the skeleton to keep them small. They show nothing on screen until you apply the clip to a character on the same skeleton.
BVH: the character explodes or lies on its side
The importer guessed the wrong axes or scale. In Blender, File > Import > Motion Capture (.bvh) has scale and axis options; set them to match the file’s source and try again.
BVH: the clip runs at the wrong speed
BVH stores a frame time rather than a frame rate. In Blender, Update Scene FPS sets the scene to match the file, so the clip plays at its intended speed.
Converting between formats
Converting through Blender is usually safe: import, check the result, export. Check the loop and foot contacts again after conversion, because resampling can introduce small changes.
What our animation packs include
Each AssetLoom animation pack ships FBX for Unity and Godot, FBX for Unreal Engine 5, GLB, BVH per clip and a .blend with every clip as a named Action, all on the 53-bone skeleton of our free Rigged Mannequin Base Character. Every file was checked by re-importing it in Blender; the listings say the engines were not opened.
- Locomotion Animation Pack: a GLB with the textured mannequin and all animations, plus BVH in centimetres, Y up.
- Melee Weapon Combat Pack: per-clip GLB files (skeleton only), plus one GLB per style with the mannequin, props and clips.
- Jumps, Falls and Interactions Pack: per-clip GLB files and a mannequin GLB with every animation.
- Unarmed Combat Animation Pack and Vehicle and Seated Animation Pack: the same set of formats.
Browse every pack in Animations. For moving clips onto your own character, see retargeting animations.
Spotted a mistake or have a question? Email support@assetloom.io.