Export Pipelines
The execution model is in blender-core. Run blender-asset-qa (and blender-game-optimization for budgets) before exporting.
One call
scripts/export_asset.py -- --preset unreal_skeletal --objects SK_Hero --out //export/SK_Hero.fbx
scripts/export_asset.py -- --preset web --collection Export --out //export/scene.glb
scripts/export_asset.py -- --preset unity --objects SM_A SM_B SM_C --batch --out //export/x.fbx # one file each, at origin
Presets: roblox, roblox_gltf, unity, unity_skeletal, unreal, unreal_skeletal, godot, web, gltf, usd. Pass any exporter kwarg with --set key=value. Every preset is tested with a round-trip that keeps scale and avoids a 100× armature scale.
Engine reference (load only the one you need)
- references/roblox.md: MeshParts, avatar bodies (R15), accessories, layered clothing cages, SurfaceAppearance, limits
- references/unity.md: FBX settings, Humanoid rigs, URP/HDRP maps, animation clips
- references/unreal.md: static/skeletal FBX, root bone, collision UCX, LODs, Nanite, ORM/DirectX
- references/godot-web.md: glTF/GLB, import suffixes, three.js/Babylon, compression, KHR extensions
Universal pre-export checklist
- Scale: scene unit scale 1.0, objects at scale 1, rotation applied (except intentional object transforms). The presets handle unit conversion.
- Pivot/origin where the engine expects it: props at the bottom-center, characters at the world origin between the feet, facing -Y (Blender front). Every preset converts that to the engine's forward.
- Modifiers: the presets export the evaluated mesh. Mirror, bevel and weighted normals are kept; booleans become real geometry.
- Normals: custom/weighted normals export. Smooth shading, plus hard edges marked sharp.
- Triangulation: FBX presets triangulate (
use_triangles) so the bake and engine tangents match. glTF always triangulates. - Materials: image-texture → Principled chains only, with names
M_*and texturesT_*. Procedural nodes don't export, so bake them first. - Armature: deform bones only, no leaf bones, rest pose = bind pose, 4 weights per vertex max, and the root at the origin.
- Animation: one action per clip, named
Rig_Clip. Bake constraints/IK to keys (blender-animation). FBX exports the active/NLA action per preset settings; glTFACTIONSmode exports every action that has a slot for the armature. - Naming: unique, ASCII, no spaces. Engines key materials/meshes by name across reimports.
Format choice
| Need | Format |
|---|---|
| Unity, Unreal (most stable for skeletal) | FBX |
| Godot, web, Roblox (supported), Unreal 5.x Interchange, Blender↔Blender | glTF 2.0 (.glb) |
Film/VFX, Omniverse, Apple AR (.usdz), layout interchange |
USD |
| Static geometry for printing/CAD | OBJ / STL (wm.obj_export, wm.stl_export) |
| Point caches / deforming sims | Alembic (wm.alembic_export) |
Verify after export (required)
- The script returns
ok, the file size, and for.glba parsed summary (meshes, materials, images, animations, skins, tris, extensions). Compare it with what you expected. - For FBX/USD: re-import into an empty scene (
import_scene.fbx/wm.usd_import) and checkdimensions, the armature scale (must be 1, not 100) and the action count. - In the engine: scale against a reference (UE mannequin 180 cm, Unity capsule 2 m, Roblox character 5 studs), normals/smoothing, the normal map's green channel, and animation root motion.
Collection exporters (re-export in one click, 4.2+)
See blender-scene-setup: collection.exporters stores the format + settings per collection, and bpy.ops.wm.collection_export_all() re-exports everything.
Gotchas
- FBX
use_tspacefails silently on n-gons. Triangulate first (the presets do). bake_space_transform(Apply Transform) is experimental. Use it for Unity static meshes only, never with armatures.- glTF exports actions linked through slots/NLA. An action with no user on the armature is skipped (
export_animation_modeoptions:ACTIONS,ACTIVE_ACTIONS,NLA_TRACKS,SCENE,BROADCAST). - glTF needs image textures in PNG/JPEG/WebP. EXR/TIFF get converted (
export_image_format). - Linked library data exports fine, but make it local or override it if you need to modify it first.
- Shape keys: FBX exports them as blendshapes, glTF as morph targets (
export_morph). Modifiers before the Armature modifier can block shape-key export in FBX (apply them first).