Auto Warz — Blender Pipeline & Asset Standards¶
Document Type: Art & Audio Reference Version: 1.0 Status: Active Last Updated: 2026-03-24 Vault destination:
03_Art & AudioParent Document:[01_Art Direction Document](<./01_Art Direction Document.md>)Related Documents:[05_Asset List & Delivery Specification](<./05_Asset List & Delivery Specification.md>)·[03_Prompt Library](<./03_Prompt Library.md>)·[01_Technical Architecture Document](<../02_Technical Documents/01_Technical Architecture Document.md>)Folder:03_Art & AudioConsolidates:02_Blender Pipeline Standards.md+04_Blender Setup & Asset Standards.md(both superseded — delete them)
Table of Contents¶
- #Purpose
- #Blender Version
- #Scene Setup
- #Origin Point Rules
- #Mesh Structure
- #Naming Convention
- #Material Setup
- #Export Settings
- #Godot Import Settings
- #Building Mesh Breakdown
- #Animation Rigs
- #Checklist Before Export
- #Revision History
Purpose¶
This is the single reference for all Blender work on Auto Warz. It covers scene configuration, mesh structure, naming, materials, export settings, and Godot import. Follow this guide for every building, character, and environment asset. There is no other Blender document — this supersedes all previous versions.
Blender Version¶
Use Blender 4.x (latest stable). The .glb exporter is most reliable in 4.x for Godot 4 imports. Do not use Blender 3.x — the GLTF exporter behaves differently and scale issues are common.
Scene Setup¶
Do this once when opening a new Blender file for any Auto Warz asset.
Units¶
- Open Scene Properties (camera icon in Properties panel)
- Under Units set:
- Unit System: Metric
- Unit Scale: 1.0
- Length: Meters
This makes 1 Blender unit = 1 metre = 1 Godot unit = 1 grid cell. A 2×2 building must measure exactly 2.0 m × 2.0 m at its base footprint. A 3×3 building is 3.0 m × 3.0 m. Never approximate.
Viewport Grid¶
- Open Overlay settings (top right of viewport, the two overlapping circles icon)
- Set Scale to
1.0and Subdivisions to2
This gives one large grid square per grid cell. Buildings should snap cleanly to grid squares.
Axes¶
- X = right
- Y = forward (into screen in top-down view)
- Z = up
Godot uses Y-up. The exporter handles the conversion — do not rotate the scene to compensate.
Origin Point Rules¶
The origin point of every asset determines how Godot positions it on the grid. Getting this wrong causes floating buildings or misaligned grid snapping.
| Asset Type | Origin Point Location |
|---|---|
| All buildings | Bottom-centre of the footprint at Y = 0 |
| Resource nodes | Bottom-centre of the mesh at Y = 0 |
| Genesis bot | Bottom-centre of the feet at Y = 0 |
| Terrain tiles | Bottom-left corner at Y = 0 |
| Animated sub-meshes | At the part's own pivot point (e.g. drill tip centre) |
| Particle empties | At the intended emission point |
How to Set Origin Correctly¶
- Select your mesh in Object Mode
- Move the mesh so its base sits at Z = 0 in world space
- Place the 3D cursor at the base-centre: Shift+S → Cursor to World Origin, then adjust if needed
- Object → Set Origin → Origin to 3D Cursor
- Verify in the N panel: Location should read
(0, 0, 0)after origin is set
Mesh Structure¶
Every building is a collection of named child objects under a single root empty. This allows Godot to address individual parts for animation, colour changes, and particle attachment.
Root Object¶
Name: bld_[building_id] (e.g. bld_mining_drill)
Type: Empty (Plain Axes) — this becomes the Node3D in Godot
Origin: Bottom-centre of footprint at Y = 0
Required Child Meshes¶
| Child Name | Purpose | Notes |
|---|---|---|
body_mesh |
Main building body | Always required |
badge_mesh |
Thin flat band at base for faction colour | Always required for buildings — Godot sets colour at runtime |
emissive_mesh |
Glowing elements (indicator lights, screens, energy coils) | Required if building has glow — separate material with emission |
Optional Child Meshes¶
| Child Name | Purpose | Notes |
|---|---|---|
[part]_mesh |
Any animated part (e.g. drill_mesh, rotor_mesh) |
Origin must be at the part's pivot point, not the building centre |
[part]_particles |
Plain axis empty marking a particle spawn point | Named clearly, e.g. exhaust_particles, drill_particles |
What NOT to Model¶
- Module slots — modules are stacked programmatically in Godot at runtime. The building just needs a clean, flat rooftop. Do not model slots or recesses.
- Connector ports — IoConnectors are placed as separate grid entities by the player. Do not add port geometry to buildings.
- Health bars or UI elements — all UI is drawn by Godot's CanvasLayer system.
Naming Convention¶
All file and object names use lowercase with underscores. No spaces. No uppercase.
File Names¶
| Type | Pattern | Example |
|---|---|---|
| Building | bld_[id].glb |
bld_smelter.glb, bld_mining_drill.glb |
| Terrain | ter_[name].glb |
ter_ground_base.glb, ter_rock_lg.glb |
| Resource node | node_[id].glb |
node_metal_ore.glb, node_silicon.glb |
| Character | char_[id].glb |
char_genesis.glb |
Object Names Inside Blender¶
| Object | Name |
|---|---|
| Root empty | bld_[id] |
| Main body | body_mesh |
| Faction band | badge_mesh |
| Glow elements | emissive_mesh |
| Animated parts | [part]_mesh (e.g. drill_mesh) |
| Particle empties | [part]_particles (e.g. exhaust_particles) |
Consistent naming is critical — Godot scripts reference child node names directly (e.g. $drill_mesh, $badge_mesh). Misspelling a name means the script silently fails to find the node.
Material Setup¶
Auto Warz uses flat colour materials only — no texture maps, no UV unwrapping required.
Standard Material¶
Each mesh surface gets one StandardMaterial3D equivalent in Blender (a Principled BSDF with all values zeroed except Base Color):
| Property | Value |
|---|---|
| Base Color | The flat colour for this surface |
| Metallic | 0.0 |
| Roughness | 1.0 |
| Specular | 0.0 |
| All other properties | Default / off |
Use the building's category accent colour for the main body, and neutral greys/darks for secondary surfaces. See [01_Art Direction Document](<./01_Art Direction Document.md>) for the full category colour palette.
Emissive Material¶
For emissive_mesh surfaces:
| Property | Value |
|---|---|
| Base Color | Same as emission colour |
| Emission | Enabled |
| Emission Color | The glow colour (e.g. amber for extraction, cyan for research) |
| Emission Strength | 2.0–5.0 (adjust to taste — Godot will apply its own multiplier) |
Badge Material¶
For badge_mesh:
| Property | Value |
|---|---|
| Base Color | Any placeholder — Godot overwrites this at runtime |
| Alpha | 0.85 (slight translucency) |
| Blend Mode | Alpha Blend |
Set up the translucency in Blender so it exports correctly, but the colour itself is irrelevant — the game sets it based on player faction.
Number of Materials Per Mesh¶
Keep it to one material per mesh object. Do not use multi-material slots on a single mesh — this creates extra draw calls and complicates runtime colour changes. If a part needs a different colour, make it a separate mesh object.
Export Settings¶
Export each asset as a separate .glb file. Never combine multiple buildings in one file.
How to Export¶
- Select the root empty and all its children (A to select all, or manually)
- File → Export → glTF 2.0 (.glb/.gltf)
- In the export panel, use these settings:
Export Panel Settings¶
Include tab: - Selected Objects: ✅ On - Visible Objects: ✅ On - Custom Properties: ✅ On (preserves metadata if any) - Cameras: ❌ Off - Punctual Lights: ❌ Off
Transform tab: - Y Up: ✅ On - +Y Up: ✅ On (Godot expects Y-up)
Data tab: - Apply Modifiers: ✅ On — apply all modifiers before export - UVs: ✅ On (even if unused — avoids import warnings) - Normals: ✅ On - Tangents: ❌ Off (not needed for flat colour) - Vertex Colors: ❌ Off - Textures: ❌ Off — flat colour only, no texture export
Animation tab: - Export animations only if the asset has a defined animation. Otherwise off.
Apply Transforms Before Export¶
Before exporting, always apply all transforms to avoid scale/rotation issues in Godot:
- Select all objects in the hierarchy (A)
- Ctrl+A → All Transforms
- Verify Location = (0,0,0), Rotation = (0°,0°,0°), Scale = (1,1,1) on all objects
If scale is not (1,1,1) after applying, the mesh will import at the wrong size in Godot.
Output Location¶
Save .glb files to the correct res://assets/ subfolder:
| Asset Type | Godot Path |
|---|---|
| Buildings | res://assets/buildings/ |
| Genesis | res://assets/genesis/ |
| Terrain | res://assets/terrain/ |
| Resource nodes | res://assets/resources/ |
Godot Import Settings¶
After placing a .glb in the project, configure its import settings in the Godot editor.
- Select the
.glbfile in the FileSystem panel - Open the Import tab (top of Inspector)
- Set these options:
| Setting | Value |
|---|---|
| Import As | Scene |
| Root Type | Node3D |
| Root Name | (leave blank — uses filename) |
| Scale Mesh | 1.0 |
| Root Scale | 1.0 |
| Lighting | Use scene lighting (no baked lightmaps) |
| Generate Shadow Meshes | Off (cel-shader handles outline via inverted hull — M5.2) |
| Physics | Off — collision shapes are added in Godot, not imported |
- Click Reimport after changing any setting.
Verifying Scale in Godot¶
After import, drag the scene into the world and verify:
- A 2×2 building occupies exactly 2×2 grid cells
- The building base sits at Y = 0 (not floating, not sunken)
- Child nodes (body_mesh, badge_mesh, etc.) are present and named correctly in the scene tree
If scale is wrong, the issue is almost always un-applied transforms in Blender. Go back and apply transforms, re-export.
Building Mesh Breakdown¶
Reference breakdown for common building types.
Mining Drill (2×2)¶
| Object | Type | Notes |
|---|---|---|
bld_mining_drill |
Empty (root) | Origin at bottom-centre of 2×2 footprint |
body_mesh |
Mesh | Main drill housing, amber accent colour |
drill_mesh |
Mesh | Rotating drill head — origin at drill tip centre |
emissive_mesh |
Mesh | Amber indicator lights |
badge_mesh |
Mesh | Thin band at base |
drill_particles |
Empty | Placed at drill tip — dust/rock particle spawn point |
drill_mesh rotates on its Y axis via AnimationPlayer or script in Godot. The origin being at the tip centre is what makes it spin in place.
Smelter (3×3)¶
| Object | Type | Notes |
|---|---|---|
bld_smelter |
Empty (root) | Origin at bottom-centre of 3×3 footprint |
body_mesh |
Mesh | Main smelter body, orange-red accent |
emissive_mesh |
Mesh | Glowing furnace vents / firebox windows |
badge_mesh |
Mesh | Thin band at base |
exhaust_particles |
Empty | Placed at chimney top — smoke/heat shimmer spawn |
Genesis Bot¶
| Object | Type | Notes |
|---|---|---|
char_genesis |
Empty (root) | Origin at foot level Y = 0 |
body_mesh |
Mesh | Main body |
emissive_mesh |
Mesh | Visor panel — colour driven by equipped skin |
thruster_mesh |
Mesh | Optional thruster nozzle if hover effect is added |
thruster_particles |
Empty | Thruster particle spawn point |
No badge_mesh for Genesis — faction colour is not displayed on the character.
Animation Rigs¶
For assets with animated parts (e.g. Mining Drill):
- Animate in Blender using Object-level keyframes (not armature/bone rigs) for simple rotations. This is simpler to import and drive from GDScript.
- Name each animation clearly:
drill_spin,rotor_idle,door_open,door_close. - Keep animation loops clean — first and last frame should match for looping animations.
- Export animations with the mesh. In Godot, access via
AnimationPlayer.
For complex character animation (future — Genesis movement), armature rigs will be needed. That is out of scope for Phase 1 buildings.
Checklist Before Export¶
Run through this for every asset before exporting. Do not skip.
Blender:
- [ ] Unit system set to Metric, scale 1.0
- [ ] All transforms applied — Location (0,0,0), Rotation (0°,0°,0°), Scale (1,1,1)
- [ ] Origin at bottom-centre of footprint at Y = 0
- [ ] All child objects named correctly (body_mesh, badge_mesh, emissive_mesh, etc.)
- [ ] One material per mesh object — no multi-material slots
- [ ] No texture maps — flat colour Principled BSDF only
- [ ] Badge material set to alpha blend, ~0.85 opacity
- [ ] Emissive material has Emission enabled with correct colour and strength
- [ ] Animated part origins are at their own pivot points, not the building centre
- [ ] Particle empties placed and named correctly
- [ ] No cameras, lights, or other scene objects selected at export time
- [ ] Export settings: Y-up on, Apply Modifiers on, Textures off
- [ ] File saved to correct res://assets/ subfolder with correct naming convention
Godot:
- [ ] Import settings verified — Scale 1.0, Physics off, Shadow Meshes off
- [ ] Asset placed in world scene — base sits at Y = 0, not floating or sunken
- [ ] Correct grid cell footprint — 2×2 building occupies exactly 2 grid cells
- [ ] Child nodes visible in scene tree with correct names
- [ ] badge_mesh colour can be changed via script (set_surface_override_material)
- [ ] emissive_mesh glows at runtime
- [ ] Animated parts respond to script control
Revision History¶
| Version | Date | Changes |
|---|---|---|
| 1.0 | 2026-03-24 | Consolidated from 02_Blender Pipeline Standards.md and 04_Blender Setup & Asset Standards.md. Both source documents are superseded — delete them from the vault. Full pipeline from scene setup through Godot import. Added animation rigs section, badge material spec, and Godot import settings. |