BLENDER TO GODOT · WORKED EXAMPLE
Three models.
One material.
One atlas.
Separate exports do not have to mean separate materials. This small, reproducible example uses Godot’s own import settings to share a material and preserve its edits when the geometry changes.
Tested 3 October 2026 · Blender 4.5.14 LTS · Godot 4.7.2 Standard · Linux x86_64
Original test meshes, source, scripts and results. 140,503-byte ZIP · SHA-256. No account, add-on or email required.
THE IMPORTANT DISTINCTION
Sharing a resource and removing duplicate files are different jobs.
Our three GLB files contain the same tiny atlas. Extracting their materials into one shared folder makes all three models use one loaded material and one texture. Godot still extracts three PNG files. Exporting separate glTF files that refer to one external atlas avoids those extra images in this example.
What the test actually measured
Three simple meshes—a floor, a wall and a post—use the same named material and atlas. The inspection script keeps all three imported scenes loaded together and counts distinct material and texture resource instances.
| Setup | Loaded materials | Loaded textures | PNG files in project |
|---|---|---|---|
| GLB, default import | 3 | 3 | 3 |
| GLB, Extract Once to a shared folder | 1 | 1 | 3 |
| Separate glTF, shared external atlas, Extract Once | 1 | 1 | 1 |
Read the recorded results (JSON). These are resource identities and source-file counts. This test does not measure GPU memory, frame rate, draw calls or the size of an exported game.
NATIVE WORKFLOW
Keep the atlas external. Give the material a shared home.
Use one deliberate material identity in Blender.
Assign the same material to the meshes that should share it. The fixture uses
SharedAtlaswith one image texture. Keep that name stable during geometry revisions. Different-looking materials should have distinct names.Export separate glTF files with one external image.
The supplied example exports each mesh as glTF Separate: a
.gltffile, its.bingeometry and a reference totextures/atlas.png. Preserve those relative paths when moving the files. This avoids embedding a copy of the image in every GLB.Point each model at the same material folder in Godot.
Set Materials → Extract to Extract Once, use the text format, and set Extract Path to
res://materials. Reimport. In this fixture, all three imports resolve tores://materials/SharedAtlas.tres. The downloaded projects already contain the tested settings.These are Godot’s native material extraction options. Extract and Overwrite is a different choice: it replaces the material during reimport.
Edit the external material and check the reimport.
Change
SharedAtlas.tres, then revise and re-export a mesh. Inspect an instance of the imported model in your scene. Godot’s Advanced Import preview can still show the source material rather than your external override; see its material extraction documentation.
The settings used by the reproducible fixture
For a new test project, the harness sets the following scene importer defaults before the first import. For existing assets, change their import settings and reimport them.
[importer_defaults]
scene={
"materials/extract": 1,
"materials/extract_format": 0,
"materials/extract_path": "res://materials"
}Material edits survive the geometry revision
Both the GLB and external-atlas glTF cases pass the same check. The test changes material roughness to 0.123, then replaces the wall with a taller export: its imported height grows from 2.0 to 2.5 metres.
- The vertex data changes.
- The material file’s SHA-256 stays unchanged.
- The external resource path and UID stay unchanged.
- All three meshes still share one material with the edited roughness.
The archive includes the before-and-after evidence and the scripts used to produce it.
Names and overrides need care
A renamed material needs remapping. Godot documents this boundary. Keep the old external material and associate the renamed source material with it in Advanced Import Settings. Do not assume a rename will preserve the relationship automatically.
One name must not mean two different materials. A shared extraction folder is useful when the materials are intentionally the same. Give unrelated materials different names or map them explicitly.
This is a small import test. It uses simple opaque textured meshes and headless resource inspection. The harness writes native settings and runs the real importer; editor button interaction was not tested. It is not a rendered appearance test, a large-scene performance benchmark, or a test of every material feature. Other Godot/Blender versions and operating systems are untested.
REPRODUCE THE RESULT
Inspect the files. Run the comparison.
The ZIP includes a README with the exact entry points and tool requirements, the original fixture generator, Godot inspection scripts and recorded results. Blender and Godot are not bundled.
Run the comparison on Linux
From the extracted folder, using the tested Blender and Godot versions:
python3 scripts/run_pilot.py all \
--godot "/path/to/Godot" \
--blender "/path/to/blender" \
--output-root fresh-run
python3 scripts/account.py fresh-runUse a new output folder. The harness uses headless execution, restricts its work to CPU cores 0 and 1 at low priority, and disables GPU backends. Those CPU IDs must be available on your Linux host. See README.txt for the full method and limitations.
Fixture and script licence: MIT; see LICENSE.txt inside the ZIP. This is a separate teaching example; the Repair Corner stool has its own asset licence.