FBX to G3DB Converter
Convert FBX 3D model files to LibGDX G3DB/G3DJ format directly in your browser. Supports mesh geometry, normals, UVs, and UV flipping.
About
FBX (Filmbox) is Autodesk's proprietary 3D interchange format used across most DCC tools (Blender, Maya, 3ds Max). LibGDX, the Java game framework, uses its own binary format G3DB (and its JSON sibling G3DJ) for runtime model loading. The official fbx-conv command-line tool requires a native binary per OS and a local build environment. Getting the conversion wrong produces invisible models, flipped faces, or corrupted UV maps that waste hours of debugging. This tool parses real FBX 7.x binary data in your browser, extracts geometry nodes (vertices, polygon vertex indices, normals, UV layers), applies optional UV coordinate flipping (v → 1 − v) to correct Blender's inverted texture coordinates, and serializes valid G3DB or G3DJ output. Limitations: this handles static meshes. Skeletal animation, blend shapes, and embedded textures require the native fbx-conv binary.
Formulas
FBX binary stores polygon indices using a sign convention. Each polygon's last index is stored as a bitwise negation to mark the polygon boundary:
N-gon triangulation uses fan decomposition from vertex v0:
UV coordinate flipping corrects Blender's inverted V-axis:
G3DB vertex stride is determined by enabled attributes:
Where v0 through vn are polygon vertex indices, vcorrected is the flipped texture V coordinate, and stride is the number of float components per interleaved vertex.
Reference Data
| Feature | FBX Binary 7.x | G3DJ (JSON) | G3DB (Binary) |
|---|---|---|---|
| Format Type | Binary (proprietary) | JSON text | Binary (LE) |
| Magic Bytes | Kaydara FBX Binary | N/A (JSON) | N/A (G3DJ binary form) |
| Vertex Positions | Vertices in Geometry node | meshes[].vertices[] | Float32 array |
| Normals | LayerElementNormal | attributes["NORMAL"] | Float32 interleaved |
| UV Coordinates | LayerElementUV | attributes["TEXCOORD0"] | Float32 interleaved |
| Indices | PolygonVertexIndex (negative = end) | parts[].indices[] | Int16/Int32 array |
| Materials | Material node properties | materials[] with colors | Serialized material block |
| Transforms | Model node Lcl props | nodes[].translation/rotation/scale | Float32 arrays |
| Animation | AnimationCurveNode | animations[] | Keyframe blocks |
| Max Vertices (typical) | Unlimited | ~65535 per mesh part | ~65535 (short indices) |
| Endianness | Little-endian | N/A | Little-endian |
| String Encoding | Length-prefixed | UTF-8 | Length-prefixed UTF-8 |
| Compression | Optional zlib per node (7.5+) | None | None |
| File Extension | .fbx | .g3dj | .g3db |
| Human Readable | No | Yes | No |
| LibGDX Loader | Not supported | G3dModelLoader | G3dModelLoader |
| UV Flip Needed (Blender) | Yes (V axis) | Applied during conversion | Applied during conversion |
| Polygon Support | N-gons, Tris, Quads | Triangles only | Triangles only |
| Typical File Size Ratio | 1.0× | ~3−5× larger | ~0.3−0.5× |