← Back to Blog tutorials

Blender 5.0 glTF export: what breaks in Unity, Godot, UE5

By BitSoul Team8/18/20265 min read3 views
Blender 5.0 glTF export: what breaks in Unity, Godot, UE5

You update to Blender 5.0, export the same `.glb` you've exported for two years, and reimport into Unity, Godot, or Unreal Engine 5 — the mesh is fine, but the wood grain on your prop is flat grey, the rust-streak node group you built is gone, and the lightmap sits doubled up on UV0. Blender 5.0's glTF export changed more than the version number suggests: it's now the recommended path for static assets, with better Draco defaults, `KHR_materials_variants`, and a dedicated lightmap UV channel. What didn't change: the exporter still only reads Principled BSDF's standard inputs. Procedural nodes and custom node groups never survived glTF export, and 5.0 doesn't fix that — you still bake first.

What actually changed in Blender 5.0's glTF exporter

What actually changed in Blender 5.0's glTF exporter — illustrated

Blender 5.0 shipped November 18, 2025, closing out the 4.x line (4.5 LTS is the last long-term-support release in that series) with 588 bugs fixed against 4.5. For glTF specifically, three things moved: Draco mesh compression now defaults to settings tuned for real-time rendering instead of archival quality, `KHR_materials_variants` lets one mesh carry multiple material sets in a single export, and a dedicated lightmap UV channel exports without the manual UV-index workaround Blender 4.x needed. Combined, the Blender team is positioning glTF as a first-class export path for props and environment kit pieces — FBX stays the safer choice for skeletal meshes, since its skinning pipeline is still more forgiving of complex bone hierarchies.

None of that touches materials. The glTF 2.0 spec has one PBR material model (metallic-roughness), and Blender's exporter maps it from a Principled BSDF node and nothing else.

Why materials still break after a clean export

Why materials still break after a clean export — illustrated

If a material's Principled BSDF gets its Base Color, Roughness, or Normal input from a Noise, Voronoi, or Wave texture node instead of an image, that input exports as a flat average value — the procedural pattern doesn't travel. Same story for custom node groups: anything downstream of a Group node that isn't feeding Principled BSDF's named sockets is invisible to the exporter. Subsurface scattering and clearcoat export as glTF extensions, but neither Unity's, Godot's, nor Unreal's importer reconstructs the equivalent shader setup automatically — you get the base color and lose the effect.

The fix is the same one riggers have used for years on skeletal meshes: bake everything procedural to an image texture before you export.

Bake procedural materials before export

Select the object, make sure Cycles is your render engine (bake doesn't run in Eevee), and add a target image node per material:

```python
import bpy
mat = bpy.data.materials["ChestWood"]
img = bpy.data.images.new("chest_wood_baked", 2048, 2048)
node = mat.node_tree.nodes.new("ShaderNodeTexImage")
node.image = img
mat.node_tree.nodes.active = node # bake target must be active
bpy.ops.object.bake(type='DIFFUSE', margin=4)
img.save_render(filepath="//textures/chest_wood_baked.png")
```

Repeat per channel you need baked (roughness, normal) with the matching bake `type`, then wire the new image nodes into Principled BSDF and delete the procedural nodes so nothing ambiguous is left in the tree at export time.

Catch bad nodes before you export, not after

Scanning every material for the nodes that won't survive takes one loop, and it's worth running before you hit File > Export rather than after you've already reimported into the engine and gone hunting for what's grey:

```python
bad_types = {'TEX_NOISE', 'TEX_VORONOI', 'TEX_WAVE', 'GROUP'}
for mat in bpy.data.materials:
hits = [n.type for n in mat.node_tree.nodes if n.type in bad_types]
if hits:
print(mat.name, hits)
```

Anything it prints needs baking or flattening before export.

What each engine does with the result

| Engine | glTF import path | Draco | `KHR_materials_variants` | Known gotcha |
|---|---|---|---|---|
| Godot 4.x | Native, built-in importer | Decoded automatically | Reads variants, switch via the Inspector | Lightmap UV must be Blender's second UV map — Godot maps it to UV2 by position, not name |
| Unity | glTFast (`com.unity.cloud.gltfast` package) | Supported | Supported in recent glTFast versions, but confirm your installed version before relying on it | Materials land as URP/HDRP Lit shader graphs, not a Standard shader — expect a conversion pass |
| Unreal Engine 5 | Interchange glTF importer | Supported | Not exposed in the import dialog — only the default variant applies on import | Anything that was a custom node group in Blender imports as a flat grey Unlit-looking material, no error thrown |

Walkthrough: static prop, Blender 5.0 to glTF

  1. Model with the scene at metric scale, 1 unit = 1 centimeter.
  2. UV unwrap with two channels — one for textures, one for the lightmap.
  3. Bake procedural materials per the script above; confirm the validation scan comes back clean.
  4. `Ctrl+A > All Transforms` to apply rotation and scale.
  5. File > Export > glTF 2.0 (`.glb`), with Apply Modifiers, UVs, Normals, and Vertex Colors all on, Materials set to Export, and Draco Mesh Compression on for props you're not editing further.
  6. Import into your engine and check the material graph against the table above before you assume it's correct.

BitSoul's Reinforced Treasure Chest is a useful test case for this exact workflow — wood, aged metal banding, and a normal-mapped lock, all baked rather than procedural, so it round-trips through the pipeline above without surprises. Drop it into 3D Studio first if you want to check tri count and UV layout before committing to a bake pass. A free account's two monthly downloads cover evaluation; commercial use is included with paid memberships.

Gotchas worth writing down

Vertex colors only export from whichever Color Attribute is set active for rendering — if the wrong layer is active, the export silently uses it instead of erroring. Grease Pencil objects in the same selection as your mesh will throw an export error; exclude them explicitly. And if you're compressing textures separately with KTX2 for engine-side memory savings, do that after the bake, not before — baking reads from the image datablock, not the compressed file on disk. For the KTX2 side of that pipeline, see our KTX2 texture guide. If you land in Unreal and a parent material shows up greyed out after import, that's a separate Interchange quirk covered in our UE5 material troubleshooting post. Godot users chasing the lightmap UV2 gotcha above can cross-reference our Godot 4.8 glTF workflow post.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: blender workflow texturing pbr tutorials 3d-models

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models