[!WARNING] This library has very limited features and is only intended for reading mesh geometry from binary FBX files, it doesn't support:
- Reading ASCII FBX files.
- Reading textures and materials even if they are encoded in the file.
- Reading skeletons and animations. Note that the geometry may also be incorrect if the mesh is skinned.
- Writing FBX files.
However, this can be a starting point to implement more features in the future. Welcome to contribute!
# from pypi
pip install fbxloader
# from source
pip install git+https://github.com/ashawkey/fbxloader.git
Python API:
from fbxloader import FBXLoader
fbx = FBXLoader('model.fbx') # load from file or bytes
# similar to glb, fbx usually contains multiple meshes as a scene
# we provide a method to merge them into a single mesh and export as trimesh.Trimesh
mesh = fbx.export_trimesh()
# write to other formats (using trimesh API)
mesh.export('model.obj')
# meta: this is to provide some information on unimplemented features, you may inspect it to make sure if the model is expected to load correctly. e.g., hasDeformers=True usually means the model is skinned.
print(fbx.meta)
# {'hasImages': False, 'hasTextures': False, 'hasMaterials': True, 'hasDeformers': True, 'hasAnimations': True}
We also provide a CLI tool:
fbxconverter <input.fbx> <output.obj/ply/glb>
Lastly, we provide a testing script and also a fbx mesh as an example:
python tests/test.py examples/annulus.fbx
The code is basically translated from threejs's FBXLoader. Thanks to the threejs team and also copilot!