Godot Guide
Simple Export ships with the Godot - default preset.
It uses the glTF format, which is the recommended by Godot for 3D assets. I opted to use glTF separate files
(.gltf + .bin + textures) instead of the binary .glb format to allow for better texture reuse, material sharing.
You can find an overview over the options here:
1. Exporting Assets from Your DCC Tool
Exporting static assets to Godot is straightforward and only requires 3 simple steps:
- Select the Godot Preset
- Create an Export Collection
- Export the Collection/Collections
2. Importing into Godot
Importing into Godot is also simple, but requires a few extra steps to ensure that materials are shared correctly.
A. Import Assets
- Copy the
.gltffile tpgetjer wotj themodels/andtextures/folders into your Godot project. You can skip this step if you set the export path directly to your Godot project folder. In the video the export path is directly set to the correct folder within the Godot project. The object is therefore automatically imported. - Godot will automatically detect the
.gltffiles and import them as scenes. - Open the imported scene to verify that the model and textures are correctly applied.
B. Extract Materials for Sharing
- Open an imported model in Godot.
- In the Inspector, find the Actions button at the left top.
- Under click Extract Materials and specify the location for the creation of the material asset.
- Press Select Current Folder and confirm the creation of the material asset by pressing Extract.
C. Reassign Materials to New Imports
- Import a new
.gltfasset. - In the Inspector, replace its materials with the shared
.tresfile:- Select the MeshInstance3D node.
- Drag
materials/shared_material.tresinto the material slot. - Repeat for all matching materials.
Exporting Animated Characters
Rigged, animated characters (an armature with a skinned mesh and one or more Actions) use a separate preset from
static meshes: Godot-animation. The static Godot-default preset intentionally exports no animation at all -
using it on a rigged character will give you the mesh and skeleton with no motion. Godot-animation bakes every
Action in the file as its own glTF animation, so Godot's importer splits them back out into individual entries in
the imported AnimationPlayer.
Step 1: Select the Godot Animation Preset
Make sure Godot-animation is selected as the Export Collection Preset, instead of Godot-default.
Step 2: Create an Export Collection
Select the armature (its mesh and any children are picked up automatically) and create an export collection, exactly as for a static mesh - the plus button in the Export List, right-click on the object in the Outliner, or right-click in the 3D Viewport.
Step 3: Export the Collection
Export from the Export List, the Outliner, or by exporting all selected collections. Every Action currently in the file gets baked into the export - there is no separate step to pick which animations go out.
Multiple characters sharing one skeleton type
If several characters share the same rig, keep the Actions you want in each character's own .blend file (or
use Action assignment/filtering in your own pipeline) before exporting - Godot-animation exports every
Action present in the file, not just the ones currently played back on the armature.
More than 4 bone influences per vertex
Godot supports up to 4 bone weights per vertex. If a mesh has vertices weighted to more than 4 bones, Blender's
glTF exporter keeps the 4 highest weights and renormalizes them, and prints a There are more than 4 joint vertex
influences warning during export. This is expected and does not indicate a broken export.
Importing Animated Characters into Godot
Unlike Unity, Godot's glTF importer imports animations by default and wires up the whole character automatically -
dropping the exported .gltf into your project already gets you a ready-to-use scene with a Skeleton3D, a
MeshInstance3D bound to it, and an AnimationPlayer holding every exported Action. There is no equivalent of
Unity's "Avatar Definition defaults to No Avatar" trap to work around.
Step 1: Instance the Character in a Scene
Drag the imported .gltf file from the FileSystem dock into a scene (or right-click it and choose New Inherited
Scene) to add the character as an instanced sub-scene. Its AnimationPlayer node is available immediately, with
every Action from the Blender file listed as a separate animation.
Step 2: Check the Imported Animation Names
Godot's importer recognizes an _Loop (or -loop) suffix on an animation's name as a looping convention: an Action
named Idle_Loop in Blender is imported as Idle in the AnimationPlayer, with Loop Mode already set to
Linear - no suffix, and no manual step needed to make it loop. Actions without that suffix (Punch_Cross,
Sword_Attack, and so on) come through with their name unchanged and Loop Mode: None. If you're looking for a
clip by its Blender name and can't find it, check whether it originally ended in _Loop.
Step 3: Play an Animation
Select the AnimationPlayer node and play any clip directly from the Animation panel to preview it in the
editor, or call it at runtime:
$AnimationPlayer.play("Idle")
No Animator Controller equivalent is required - every imported clip is playable immediately.
The Simple Exporter Godot Preset
An overview of all settings used in the preset:
General Settings
| Setting | Value | Notes |
|---|---|---|
| Format | gltf Separate |
Separate the data makes it eaier to share data and avoid duplication. See the later section glb vs gltf for more context. |
| Textures | textures |
Folder to place texture files in. Relative to the .gltf file |
| Custom Properties | True |
Custom Properties can make the files slightly bigger but can be useful for passing on additional data in your pipeline. |
Transformation Settings
| Setting | Value | Notes |
|---|---|---|
| Export at Collection Center | False |
The feature sound unpredictable. Export at Collection Center, Export at Collection center of mass of root objects of the collection |
| +Y Up | True |
+Y Up, Export using glTF convention, +Y up |
| Flatten Object Hierarchy | False |
Comgines different objects. This should be a dedicated decision by the user.Flatten Object Hierarchy, Flatten Object Hierarchy. Useful in case of non decomposable transformation matrix. |
| Full Collection Hierarchy | True |
Full Collection Hierarchy: Export full hierarchy, including intermediate collections. |
Mesh Settings
| Setting | Value | Notes |
|---|---|---|
| Apply Modifiers | ✅ Enabled |
Apply objects modifiers on export |
| UVs | ✅ Enabled |
Export UVs with the meshes. |
| Normals | ✅ Enabled |
Export vertex normals with meshes. |
| Tangents | ❌ Disabled |
Godot uses Mikktspace tangent space, the same Tangent space used by Blender. It is therefore not necessary to export the tangent space |
| Attributes | ✅ Enabled |
Export Attributes (when starting with underscore). |
| Loose Edges | ❌ Disabled |
|
| Loose Points | ❌ Disabled |
|
| Shared Accessors | ❌ Disabled |
Shared Accessors, Export Primitives using shared accessors for attributes |
Material Settings
| Setting | Value | Notes |
|---|---|---|
| Use Vertex Color | Material |
Material – Export vertex color when used by material. |
| Export All Vertex Colors | True |
Export All Vertex Colors, Export all vertex colors, even if not used by any material. If no Vertex Color is used in the mesh materials, a fake COLOR_0 will be created, in order to keep material unchanged. |
| Setting | Value | Notes |
|---|---|---|
| Materials | Export |
Material – Export vertex color when used by material. |
| Images | Automatic |
Material – Export vertex color when used by material. |
Animation Related Settings
| Setting | Value | Notes |
|---|---|---|
| Animations | ❌ Disabled |
Export actions/NLA tracks as glTF animations. Enabled on Godot-animation, see below. |
| Animation Mode | ACTIONS |
Exports each action as a separate animation. |
| Skinning | ✅ Enabled |
Required for armatures. |
| Bone Influences | 4 |
Godot supports up to 4 bone influences per vertex. |
| Add Leaf Bones | ❌ Disabled |
Not required for Godot. |
| Optimize Animation Size | ✅ Enabled |
Removes redundant keyframes. |
| Negative Frames | SLIDE |
Slides animations to start at frame 0, useful for looping. |
| Sampling Rate | 1 |
How often to evaluate animated values (in frames). |
| Force Sampling | ✅ Enabled |
Ensures consistent animation sampling. |
| Export Deform Bones Only | ❌ Disabled |
Export all bones unless you specifically need only deform bones. |
| Reset Pose Bones | ✅ Enabled |
Resets pose bones between actions, preventing pose carryover. |
| Bake Animation | ❌ Disabled |
Only enable if using constraints/drivers or exporting only selected objects. |
The Simple Godot Animation Preset
Godot-animation shares every setting above with Godot-default except one. This is the only difference:
| Setting | Godot-default | Godot-animation | Notes |
|---|---|---|---|
| Animations | ❌ Disabled |
✅ Enabled |
Turns on animation export at all - without this, none of the file's Actions reach the glTF file, even though every other animation-related setting (Animation Mode, Skinning, Bone Influences, and so on) is already configured correctly on both presets. |
Everything else - mesh settings, material settings, transformation settings, and every other row in the Animation Related Settings table above - stays identical to the static preset, since none of that changes just because the mesh is now animated.
gltf vs glb
.gltffiles are JSON-based and reference external binary and texture files. This makes them more human-readable and easier to edit manually..glbfiles are binary files that package all data (geometry, materials, textures, animations) into a single file. This makes them more compact and easier to manage, especially for distribution.
Comparison
| Feature | glTF Separate: | glTF Binary: |
|---|---|---|
| File Structure | Multiple files: .gltf (JSON) + .bin, textures, etc. |
Single binary file (.glb) |
| Transfer Ease | More files to manage; risk of missing assets | Single file; easier to share/transfer |
| Godot Import | Supported; may require manual asset linking | Supported; simpler import process |
| Size Efficiency | Slightly larger due to separate files and JSON overhead | More compact; optimized for transfer |
| Editing Flexibility | Easier to edit individual assets (e.g., textures) | Harder to edit; requires unpacking |
| Version Control | Better for diffing/merging (text-based JSON) | Binary; harder to version control |
| Texture Reuse | Easier to reuse textures across multiple assets | More difficult; textures are embedded |
| Material Sharing | Easier to share and update materials | More difficult; materials are embedded |
Project Structure
The textures and materials are stored as sub-folders of the assets
your_project/
├── assets/
├── [asset category]/
│ ├── asset1.gltf
│ ├── asset1.bin
│ ├── asset2.gltf
│ ├── asset2.bin
| ├──textures/
│ | ├── shared_albedo.png
│ | ├── shared_metallicroughness.png
│ | ├── shared_normal.png
| ├── materials/
│ | ├── shared_material.tres # Godot material
assets/: Contains all 3D assets.[asset category]/: User defined subfolder defining the asset category. Contains the.gltfand.binfiles.textures/: Centralized folder for all textures of this category.materials/: Godot material files (.tres) for sharing.
Automate Material Sharing (Optional)
Use a Godot script to automatically replace duplicate materials:
Updating Assets
- Textures: Replace the file in
textures/. All models using it will update automatically. - Materials: Edit the
.tresfile. Changes apply to all linked models. - Meshes: Re-export only the
.gltf/.binfiles for the updated model.
Troubleshooting
- Missing textures? Double-check paths in the
.gltfJSON. - Materials not updating? Ensure the
.tresfile is correctly linked. - Performance issues? Use Godot’s Resource Usage debugger to check for duplicates.
Example Workflow
- Export
chair.gltfandtable.gltf, both usingwood_albedo.png. - Import both into Godot.
- Extract the wood material from
chairand save aswood.tres. - Assign
wood.tresto thetablemodel. - Update
wood_albedo.png—both models reflect the change.