Converting FBX game assets to OBJ or GLB: what survives, what does not, and the unit trap
FBX carries a rig, animation, materials and a centimetre unit; OBJ keeps the mesh in bind pose and nothing else, GLB keeps most of it, and both arrive 100 times too big unless the scale is handled.
Updated 27 October 2026 · 8 min read
What is inside an FBX
FBX is Autodesk's scene interchange format, binary or ASCII, versioned by year (FBX 2014/2015 is the most widely supported; 2020 adds PBR material extensions). A typical game asset FBX contains:
- One or more meshes with UVs, normals, tangents and vertex colours.
- A skeleton (joints with parent relationships) and skin weights binding vertices to joints.
- A bind pose: the joint transforms at the moment of skinning, usually A-pose or T-pose for characters.
- Animation takes: keyframed joint transforms, often several clips in one file.
- Blend shapes (morph targets) for facial animation.
- Materials, usually Phong or Lambert, with texture file references by path. Newer exporters write Stingray PBS or Autodesk Standard Surface.
- Scene units and axis: FBX declares a unit scale factor (centimetres by default from Maya and Unity, metres from Blender if set) and an up axis (Y by default).
- Cameras, lights, locators, LOD groups and null nodes used to organise the scene.
Not all of that can go into the target format, so the question is what each conversion keeps.
What survives in OBJ and in GLB
| FBX content | OBJ | GLB / glTF |
|---|---|---|
| Mesh geometry, UVs, normals | Yes (quads and n-gons kept) | Yes (triangulated) |
| Multiple objects and names | Yes, as o/g groups | Yes, as nodes |
| Vertex colours | Unofficial extension; many readers ignore | Yes (COLOR_0) |
| Skeleton and skin weights | No | Yes |
| Bind pose | Mesh is written in bind pose (or current pose if the exporter applies it) | Kept as the skin's inverse bind matrices plus the rest pose |
| Animation clips | No | Yes (node TRS and skin animation) |
| Blend shapes | No | Yes (morph targets, no names in some exporters) |
| Materials | Phong-style MTL: diffuse, specular, opacity, texture paths | PBR metallic-roughness; Phong is approximated |
| Textures | Referenced by path, not embedded | Embedded in the GLB |
| Multiple UV sets | One only | Up to two (TEXCOORD_0, TEXCOORD_1) |
| Cameras and lights | No | Cameras yes; lights via KHR_lights_punctual extension |
| Units | None; numbers copied as-is | Metres by specification |
| LOD groups, constraints, IK | No | No |
In short: convert to OBJ when you want a static mesh for printing, CAD or a modelling tool that works on quads; convert to GLB when you want the asset to still move and look right in a web viewer, a game engine that prefers glTF, or AR.
The scale problem: centimetres
FBX from Maya, 3ds Max, Unity and Unreal is almost always in centimetres. A 180 cm character has coordinates spanning 180. The file says so in its UnitScaleFactor property, but not every importer reads it, and even when it does, the target format may not have a place to put it.
- To OBJ: OBJ has no unit. Whatever numbers the converter writes are the numbers the next program sees. A slicer reads 180 as 180 mm; a metre-based engine reads it as 180 m. Blender's FBX importer applies the unit scale factor to its metre-based scene, so the character is 1.8 m in Blender and the OBJ exporter writes 1.8 (or 1800 if you set the scale to 1000 for millimetres).
- To GLB: glTF is in metres by specification. A correct converter divides centimetre coordinates by 100 or, more often, writes a root node with scale 0.01 and leaves the vertex data alone. Both are valid glTF; the second one is what confuses downstream tools that ignore node transforms, which is why a GLB-to-STL conversion sometimes arrives 100 times too big. See the GLB scale problems guide.
Whichever route, check the bounding box afterwards in the OBJ viewer or GLB viewer. A character should read about 1.8 in a metre-based viewer; a weapon prop 0.3 to 1.2; a building tile 2 to 10. If the numbers are 100 times those, the unit was not applied.
Bind pose and the pose that gets exported
A rigged character in an FBX has two things: the mesh vertices (stored once, in the pose they were skinned in) and the joint animation that moves them. OBJ cannot carry a skeleton, so the exporter writes vertex positions directly. Which positions depends on the tool:
- Blender's OBJ exporter writes the mesh as currently deformed by the armature if Apply Modifiers is on (default), so you get whatever frame the timeline is on. Set the frame to the rest pose, or pose the character the way you want it printed and export that.
- Autodesk FBX Converter and most command-line tools write the bind pose, ignoring animation.
- If the FBX has no bind pose node (some engine exports strip it), importers reconstruct it from the first frame, which may be a crouched or mid-stride pose.
For printing a game character, the useful workflow is: import to Blender, scrub to a frame with a good pose or pose it manually, apply the armature modifier (Object > Apply > Visual Geometry to Mesh, or Ctrl+A on the modifier), then export OBJ or STL. For GLB, do not apply anything; the rig and animation go along and the viewer plays them.
Materials and textures
FBX materials are usually Phong or Lambert with diffuse, specular, normal and sometimes gloss maps. Game pipelines increasingly use PBR textures (base colour, metallic, roughness, normal, AO) attached to a Stingray PBS material or packed into a custom shader that FBX does not describe at all. What converts:
- To OBJ/MTL: diffuse colour and diffuse texture (map_Kd), specular (Ks, map_Ks), normal map (map_Bump or norm, support varies), opacity (d). Metallic and roughness have no standard MTL slot; some exporters write Pr and Pm (the PBR extension), which Blender reads and most other tools do not. Texture paths are written as they were in the FBX, which usually means absolute paths from the original artist's machine. Open the MTL in a text editor and fix them to relative file names, and put the images next to the OBJ.
- To GLB: Phong diffuse becomes baseColor, specular is approximated into metallic/roughness (usually metallic 0, roughness from gloss if present, else 0.5), normal maps carry over, textures are embedded as PNG or JPEG. Packed textures (metallic in one channel, roughness in another, AO in a third) need to be re-packed to glTF's convention (occlusion R, roughness G, metallic B) or they render wrongly. Blender's glTF exporter does this automatically when the Principled BSDF is wired correctly.
Textures missing after FBX import is a path problem nine times out of ten. In Blender, File > External Data > Find Missing Files and point it at the texture folder. Embedded textures (FBX with media embedded, common from Unity) extract to a folder named after the file on import.
Blender route, step by step
- File > Import > FBX. In the import options, leave Manual Orientation off and Apply Transform off unless the model arrives rotated. Tick Automatic Bone Orientation for rigs from Maya. Scale is applied from the file's unit factor.
- Check the scene: dimensions in the N panel, Item tab. A character should be around 1.8 m. If it reads 180 m, the unit factor was not read; scale by 0.01 and apply (Ctrl+A > Scale).
- Delete what you do not need: cameras, lights, empties, LOD1 and LOD2 meshes (keep LOD0, the highest detail), collision meshes (often named UCX_ or with _collision suffix).
- Fix textures via Find Missing Files if the material preview is magenta.
- For OBJ: pose and apply the armature if needed; File > Export > Wavefront (.obj), tick Selected Only, set Forward -Z and Up Y for Y-up tools or leave defaults for Z-up tools, tick Materials and Path Mode: Copy to bundle textures next to the file.
- For GLB: File > Export > glTF 2.0, format glTF Binary, tick Selected Objects, under Data tick Skinning and Shape Keys if needed, under Animation choose which actions to include. Leave +Y Up ticked.
- Verify the output in a viewer before sending it anywhere.
The GLB to STL converter and OBJ to STL converter take the result the rest of the way to a printable mesh; the mesh repair tool closes the single-sided hair cards and cloth sheets that game characters nearly always have.
Online conversion vs Blender
Direct FBX conversion in the browser is harder than STL or OBJ handling because the binary FBX format is proprietary and the open-source readers (Assimp, ufbx, the three.js FBXLoader) each cover slightly different subsets. In practice:
- Simple static props (a crate, a chair, a weapon) convert reliably through almost any tool. Use whatever is quickest.
- Rigged characters with animation are best done in Blender, where you can see the rig, pick the pose and verify the result. Automatic converters often get bind poses or bone orientations wrong, producing twisted limbs.
- Files with embedded media need a tool that extracts it. Blender does; several lightweight converters do not and output textureless meshes.
- Confidential assets should not be uploaded to a server at all; see converting without uploading. Blender is local; browser-based converters that run in WebAssembly are local; conventional upload services are not.
- Old FBX versions (6.x, pre-2010) are refused by many modern readers. Autodesk's free FBX Converter 2013 upgrades them to 2013 format, after which everything opens them.
FAQ
Does converting FBX to OBJ keep the rig?
No. OBJ has no concept of bones or weights. The mesh is written in whatever pose the exporter applies, usually the bind pose. Convert to GLB if you need the rig and animation.
Why is my converted FBX model 100 times too large?
FBX from Maya, Unity and Unreal is in centimetres. OBJ has no units and GLB expects metres, so the numbers need dividing by 100 (or by 10 for millimetre-based slicers reading OBJ). Check the bounding box after conversion.
Can I convert FBX to GLB without Blender?
Yes, with command-line tools such as FBX2glTF or Assimp, or a browser-based converter, and the results are good for static props. For rigged, animated characters Blender gives you a chance to check poses and bone orientations before export.
Why are textures missing after FBX conversion?
The FBX references textures by absolute path from the original machine, or the textures were embedded and the converter did not extract them. Put the image files next to the output and fix the paths in the MTL, or re-link them in Blender before exporting.
Which is better for 3D printing a game character, OBJ or GLB?
Neither is the end point; both need converting to STL. OBJ is the simpler intermediate because the pose is already baked. Convert, repair the open edges, give thin parts thickness and check the scale before slicing.