The zoomable 3D factory room
Factory/Room replaces the floor, perimeter, rails and decorative shell inside the factory's 3D panel. It is used both docked and zoomed, at every factory level. The normal panel frame, buttons, labels and input controls remain the game's UI.
Subscribe to Sample mod - Cobalt factory room on the Steam Workshop (Options → Mods → Workshop), then restart. It contains the raw GLB and an editable Source/FactoryRoom.blend; its blue deck makes the replacement clear.
Replace the model
{
"version": 1,
"models": {
"Factory/Room": {
"file": "Models/FactoryRoom.glb",
"material": "imported"
}
}
}
Put this in models.json next to your mod.json. Use imported PBR materials (also the default when material is omitted): colors, embedded textures, roughness, metallic, normal maps, vertex paint and emission belong to your model. The model is imported and drawn during startup preparation, before opening the factory. As with other GLB mods, enabling/disabling it requires a restart. Missing or rejected replacements fall back to vanilla; a broken later mod does not hide an earlier valid override.
The stock room is Assets/Models/Factory/Room.glb, with editable source at Assets/Models/Source/FactoryRoom.blend. Its FactoryFloor material is replaced by the game's existing floor shader only on the stock model. Imported rooms keep their own materials even if a slot happens to have the same name.
Coordinates and construction
The room uses the factory's own coordinates, not the battlefield coordinates:
| Part | Godot coordinates |
|---|---|
| Up | +Y |
| Machine/floor contact | Y = 0 |
| Generator cell center | X = 0, Z = 0 |
| Grid spacing | 32 units |
| Nine column centers | X = −128, −96, …, 128 |
| Seventeen row centers | Z = 0, 32, …, 512 |
| Construction rectangle | X = −144…144; Z = −16…528 |
| Camera's resting target | (0, 0, 256) |
For Blender authoring, (x, y, z) in Godot becomes (x, -z, y) in Blender. Export Y-up glTF with transforms applied and the root at the origin. Keep the floor's upper surface at Y=0, leave the buildable cells clear, and keep tall details around the perimeter so they do not hide machinery when the camera tilts. The supplied example demonstrates seams aligned to the actual cell boundaries.
No named pivots are required. Follow the ordinary self-contained GLB contract: indexed triangle meshes with normals, at most 64 MiB, embedded images, no scripts, external resources, cameras, lights, skeletons or animation clips. The factory retains its standard lighting; emissive material surfaces are supported.
This is a cosmetic shell. It does not change grid size, build permissions, machine footprints, production, storage, saved coordinates or camera limits. Picking continues to use the Y=0 grid and the actual machine models; a custom floor cannot intercept clicks. Room geometry does not create physics colliders. Machines, moving belts and cargo remain separate models and can still be replaced through their existing Factory/Assembler_*, Factory/Splitter_*, Factory/Conveyor_* and Factory/Items/* keys. Buildings/Factory_* changes the outside building instead of this interior.
The scoped authoring script tools/art/build_factory_room.py writes only the stock room, this sample, their Blender sources, and the room's catalogue entry. It does not rebuild machinery or the battlefield.
