Skip to content

feat(importer): replace Assimp FBX path with ufbx #667

Description

@JeanPhilippeKernel

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

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions