Skip to content
AssetLoom

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

What FBX, GLB and BVH files can contain
FBXGLB (glTF 2.0)BVH
OwnerAutodesk (proprietary)Khronos Group (open standard)Biovision (old, simple text format)
Mesh and skinningYesYesNo, skeleton only
Materials and texturesMaterials; textures usually beside the filePBR materials, textures embeddedNo
AnimationSeveral takes per fileSeveral animations per fileUsually one clip per file
Morph targets (shape keys)YesYesNo
Units and axesSet by the exporter; variesFixed: metres, Y upNot defined; depends on the source
Readable as textBinary (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?

Recommended format by tool
You are working inUseWhy
Unity, Humanoid charactersFBXBuilds a Humanoid Avatar, so clips can be shared
Unreal Engine 5FBX made for UE5Mature skeletal mesh import; centimetres and UE5 names avoid conversions
Godot 4GLBGodot’s docs recommend glTF; FBX also works from 4.3
Web (three.js, model viewers)GLBOne file, embedded textures, made for real-time delivery
BlenderThe .blend source if offered, otherwise FBX or GLBActions and NLA strips stay editable
Mocap and retargeting toolsBVHMotion-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.

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.