Context
Assimp is currently used for both OBJ and FBX. Its FBX support has known gaps with newer format versions (FBX 2019–2023) and is significantly slower than dedicated parsers.
Why ufbx
- Single-header C library (~50 K LOC), MIT license
- Supports FBX binary and ASCII, versions 6100–7700 (2010–2023 complete)
- 2–5× faster than Assimp on large FBX files
- Used internally by Blender for FBX import
- Handles skeletal meshes, animations, blend shapes, embedded textures
- Already used by fastgltf project for reference — familiar dependency model
Proposed split
| Format |
Importer |
.fbx |
FbxImporter backed by ufbx |
.obj |
ObjImporter backed by rapidobj (see #400) or keep Assimp |
Both implement IAssetImporter. Assimp can be removed entirely once both are replaced.
Integration
Add ufbx via FetchContent_Declare in dependencies.cmake (single-header, same pattern as rapidhash). FbxImporter::CanImport returns true for "fbx". FbxImporter::ImportFile maps ufbx's mesh/material/texture output to AssetMesh/AssetMaterial/AssetTexture.
Dependencies
Context
Assimp is currently used for both OBJ and FBX. Its FBX support has known gaps with newer format versions (FBX 2019–2023) and is significantly slower than dedicated parsers.
Why ufbx
Proposed split
.fbxFbxImporterbacked by ufbx.objObjImporterbacked by rapidobj (see #400) or keep AssimpBoth implement
IAssetImporter. Assimp can be removed entirely once both are replaced.Integration
Add ufbx via
FetchContent_Declareindependencies.cmake(single-header, same pattern as rapidhash).FbxImporter::CanImportreturns true for"fbx".FbxImporter::ImportFilemaps ufbx's mesh/material/texture output toAssetMesh/AssetMaterial/AssetTexture.Dependencies
ASSIMP_BUILD_FBX_IMPORTER: ONis the current workaround (already merged)