An interactive guide to creating 3D models in Blender and importing them into your Godot game. Covers workflows for weapons, characters, vehicles, buildings, foliage, and more.
| Format | Animations | PBR | Skeletons | Best For |
|---|---|---|---|---|
| glTF 2.0 (.glb) RECOMMENDED | ✓ Yes | ✓ Yes | ✓ Yes | Primary pipeline format — use this |
| .blend (direct) | ✓ Yes | ✓ Yes | ✓ Yes | Solo rapid iteration only |
| FBX | ✓ Yes | ⚠ Partial | ✓ Yes | Third-party / Mixamo assets |
| OBJ | ✗ No | ✗ No | ✗ No | Simple static props only |
| Collada (.dae) | ⚠ | ⚠ | ⚠ | Legacy — avoid for new projects |
glTF 2.0 is an open Khronos Group standard with native support in both Blender and Godot. A single .glb file carries meshes, PBR materials, skeletons, animations, morph targets, vertex colors, multiple UV maps, cameras, and lights. It uses meters and Y-up — matching Godot's coordinate system exactly. Blender Studio chose it over direct .blend import for their production game DOGWALK due to better pipeline control.
Godot silently invokes Blender's glTF exporter in the background. Requires Blender installed on every team member's machine. No control over export settings. Won't work on Android/web editors. Best for solo rapid iteration where save-in-Blender → auto-reimport-in-Godot speed matters.
Godot 4.3+ includes a native ufbx importer (no more FBX2glTF dependency). Blender exports FBX at 100× scale by default (1 cm units). Fix: set "Apply Scalings" to "FBX Units Scale" in the export panel. Useful for Mixamo animations and third-party FBX content.
Select everything (A), then Ctrl+A → All Transforms. Unapplied transforms — especially on armatures — are the #1 cause of deformation bugs and scale issues in Godot. Also verify normals: Viewport Overlays → Face Orientation (blue = correct, red = flipped).
Blender's front face is -Y, which maps to +Z in Godot (characters appear backward). Either model facing +Y in Blender, or rotate the root node 180° on Y in a Godot inherited scene.
Name your NLA strip with a -loop suffix (e.g., Walk-loop) and Godot will automatically enable looping on import.
Copy .glb files into your Godot project's res:// folder (e.g., res://assets/models/). Godot auto-detects and creates .import metadata files.
Click the file in FileSystem → use the Import dock for basic settings. Double-click or click "Advanced..." for per-object material, mesh, and animation control.
Right-click the imported file → "New Inherited Scene". This is mandatory — imported scenes get overwritten on reimport. Your inherited scene preserves all additions.
In the inherited scene: add collision shapes, scripts, particles, audio, and extra nodes. Save as .tscn — this is your working game asset.
Re-export from Blender → overwrite the .glb → Godot reimports automatically. Your inherited scene updates while keeping all your game-specific additions.
Imported 3D files are regenerated on every reimport. All direct edits will be destroyed. Always use the inherited scene workflow above.
Add these suffixes to object names in Blender and Godot automatically creates the corresponding nodes on import:
| Suffix | Godot Creates | Use Case |
|---|---|---|
-col | StaticBody3D + trimesh collision | Complex static collision |
-convcol | StaticBody3D + convex collision | Simpler, faster collision |
-colonly | Collision only (mesh removed) | Invisible barriers |
-rigid | RigidBody3D | Physics objects |
-vehicle | VehicleBody3D | Vehicle chassis |
-wheel | VehicleWheel3D | Vehicle wheels |
-navmesh | NavigationMesh | AI pathfinding |
-occ | OccluderInstance3D | Occlusion culling |
-noimp | (skipped entirely) | Blender-only helpers |
The only Blender shader node that glTF reads is Principled BSDF. It maps directly to Godot's StandardMaterial3D.
These Principled BSDF channels transfer automatically via glTF → Godot:
| Blender Channel | Godot Property | Notes |
|---|---|---|
| Base Color | Albedo | Color + texture |
| Metallic | Metallic | Value + texture (blue channel of ORM) |
| Roughness | Roughness | Value + texture (green channel of ORM) |
| Normal Map | Normal Map | OpenGL convention (+Y up) — no flip needed |
| Emission | Emission | Strength > 1.0 enables HDR bloom |
| Alpha | Alpha | Requires correct blend mode |
| Ambient Occlusion | AO (Red channel) | Packed into ORM texture R channel |
Procedural textures (Noise, Voronoi, Wave), color ramps, math nodes, and custom node groups do not export. You must bake them:
Add Image Texture nodes for each channel: Diffuse, Roughness, Metallic, Normal, Emission, AO.
Select the target node, set bake type (Diffuse for color, Roughness, etc.), and bake. Use 1024×1024 or 2048×2048 depending on detail needs.
Create a new clean Principled BSDF using only your baked image textures. This is what glTF will export.
Connect the Image Texture Alpha output to Principled BSDF Alpha input. The Blend Mode controls behavior:
| Mode | Behavior | Performance |
|---|---|---|
| Opaque | No transparency | Fastest |
| Alpha Clip | Binary cutoff (fully transparent or opaque) | Fast — prefer this for leaves, fences |
| Alpha Blend | Gradual transparency | Expensive — use sparingly |
For effects beyond StandardMaterial3D:
In Godot, right-click any imported material → "Convert to ShaderMaterial" to generate editable shader code.
Save the converted shader as a separate .gdshader resource to prevent reimport from overwriting it.
Apply custom shaders in your inherited scene, not on the imported asset.
Each NLA strip in Blender becomes a separate animation in Godot's AnimationPlayer. The recommended workflow:
Make a separate Action for each animation (Idle, Walk, Run, Attack, etc.).
Open the NLA Editor, push each Action down as a named strip. Strip names = animation names in Godot.
Object → Animation → Bake Action. glTF doesn't support runtime IK — only baked keyframes.
In the glTF export panel, check "NLA Strips". Each strip exports as a separate Godot animation.
Blender Studio recommends: character mesh/skeleton in one file, animations in separate files imported as AnimationLibrary. Enables modular, reusable animation sets.
Godot 4.x supports animation retargeting via BoneMap resources and the SkeletonProfileHumanoid preset:
Import your character model with its skeleton.
In Advanced Import Settings, create a BoneMap resource.
Map your skeleton's bone names to the standardized humanoid profile names.
Any model using the same profile can now share AnimationLibrary resources.
Mismatched rest poses (T-pose vs A-pose) are the primary cause of retargeting failures. Ensure source and target use the same rest pose convention.
Blender Shape Keys export as morph targets in glTF and import as blend shapes in Godot.
Enable "Shape Keys" in the glTF export Data tab. Access in code:
mesh_instance.set("blend_shapes/Smile", 0.75)
mesh_instance.set("blend_shapes/Blink_L", 1.0)
Shape keys can behave unpredictably when Blender modifiers (Mirror, Subdivision) are active during export. Apply modifiers first if you encounter issues.
Root motion is supported via AnimationMixer (Godot 4.2+):
# In your CharacterBody3D script: var root_pos = anim_tree.get_root_motion_position() var root_rot = anim_tree.get_root_motion_rotation() velocity = root_rot * root_pos / delta move_and_slide()
Set the root_motion_track property in AnimationTree to the root bone. Character should animate "in place" with the root bone carrying translation data.
Weights → Clean, threshold ~0.01| Platform | Bone Count |
|---|---|
| Mobile | 20–30 bones |
| Standard Desktop | 50–70 bones |
| Detailed (fingers + face) | Up to 120 bones |
# Add as child of Skeleton3D: var attachment = BoneAttachment3D.new() attachment.bone_name = "RightHand" skeleton.add_child(attachment) # Then add weapon as child of attachment attachment.add_child(weapon_instance)
Object → Set Origin → Origin to 3D Cursor# Runtime weapon swap:
var old_weapon = hand_attachment.get_child(0)
if old_weapon: old_weapon.queue_free()
var new_weapon = preload("res://weapons/sword.tscn").instantiate()
hand_attachment.add_child(new_weapon)
-col, -convcol) for automatic collisionMeshes → Light Baking to "Static Lightmaps" in import, or pre-unwrap UV2 in Blender via Smart UV ProjectConvert scenes to MeshLibrary via Scene → Convert to MeshLibrary. GridMap is the 3D equivalent of TileMap. Godot 4.6 added Bresenham line painting for smoother tile placement.
use_as_steering = trueuse_as_traction = truewheel.wheel_radius = 0.35 wheel.wheel_rest_length = 0.15 # suspension travel wheel.suspension_stiffness = 50.0 wheel.wheel_friction_slip = 1.5
For arcade-style driving, use an invisible RigidBody3D sphere with the car mesh placed at the sphere's position. Much simpler than full VehicleBody3D physics.
Alpha Scissor for leaves (cheaper than Alpha Blend)cull_mode = CULL_DISABLED for double-sided leaf cards// Vertex shader for wind — displace by UV.y (height)
void vertex() {
float wind = sin(TIME * 2.0 + VERTEX.x * 0.5) * 0.3;
VERTEX.x += wind * UV.y; // stronger at top
VERTEX.z += wind * UV.y * 0.5;
}
Godot 4.x auto-generates LODs on import using meshoptimizer (enabled by default). Uses a 1-pixel screen-space threshold — perceptually lossless. Godot 4.6 improved LOD generation to better preserve mesh shape for multi-part objects. Adjust globally: Rendering → Mesh LOD → Threshold Pixels, or per-instance with the LOD Bias property.
Set begin/end distances and fade margins on GeometryInstance3D nodes. The Visibility Parent property enables HLOD: individual meshes replaced by a combined mesh at distance.
Uses raster-based depth testing via OccluderInstance3D. Most effective for indoor scenes with walls/rooms. Less beneficial outdoors. Does not support dynamic occluders.
MultiMeshInstance3D handles GPU instancing for identical objects (grass, trees, crowds). Godot's Forward+ renderer also performs automatic instancing for MeshInstance3D nodes sharing the same mesh and material. Godot 4.6 made 3D texture imports ~2× faster via GPU-based Betsy compression.
The most comprehensive Godot-specific addon. One-click export with hot reload, collision shape setup (box, capsule, convex, trimesh), multimesh config, NavMesh generation, script parameter passing. Matching Godot plugin handles import. Supports Blender 3.6–5.0.
Batch export to glTF, origin alignment tools, LOD naming, UV batch tools, texel density checking, palette baking for low-poly art. Highly recommended for any game asset workflow.
Bakes PBR textures from complex node setups with minimal clicks. Essential for converting procedural materials to game-ready image textures before glTF export.
Blender's built-in character rigging addon. Generates game-compatible rigs with deformation and control bones. The standard for game-ready character rigs compatible with Godot retargeting.
Tile-based 3D scene building for pixel art aesthetics. Paint tiles directly onto 3D geometry using a tileset texture. Great for retro-style games.
Click items to track your progress. Resets on page reload.
Ctrl+A → All Transforms)