Impossible stairs
A modular staircase from the Dream Maze kit. A lilac flight climbs to a cream tower with a checkerboard landing, and a second flight turns off the landing and hangs upside-down in the air, a zigzag that reads as stairs from either side. Flat low-poly, pastel palette, 1 m grid.

Left rail: colours and the 4 knobs the agent wrote into this model — they rebuild the geometry and go into your download. Right rail: looks for the viewer. Drag to orbit, scroll to zoom.
- Triangles
- 596
- Vertices
- 1,128
- Meshes · materials
- 11 · 11
- Size (W × H × D)
- 2.0 m × 3.1 m × 3.0 m
- File
- GLB · 42 KB
- Animation
- Static
- Style
- Low-poly
- Collection
- Dream Maze
Palette · named materials
- lower flight body#b89fd1
- upper flight body#916bb8
- tread caps#fbf9f4
- tower#f1e7d0
- tower plinth#e0c994
- cornice and newel finials#d0a225
- landing tiles (light)#f4f1ec
- landing tiles (dark)#1b1b22
- handrail and posts#3d2a1c
Use it
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
const gltf = await new GLTFLoader().loadAsync(
"https://assets.stoicsoft.com/1designtool/3d/models/dream-maze-impossible-stairs/757bf2199a/model.glb"
);
scene.add(gltf.scene); // metres, +Y up, front faces +ZHow it was made
The brief given to 1DesignTool's “3D object” template:
Impossible stairs for the Dream Maze kit. Design it as one clear asset at believable real-world scale for that setting (state the size in metres in meta.notes), with its main parts modelled and named, readable at thumbnail size and from every orbit angle. It is a modular piece that snaps on a 1 m grid: give it a length in whole metres and put the origin at its snapping end, stated in meta.notes. This is one part of the Dream Maze kit (Low-poly style, flat-lowpoly direction): Stairs that go nowhere and doors in the sky. Use ONLY the kit palette, by name: lilac #b89fd1, cream #f1e7d0, checker black and white #f4f1ec, gold #d0a225, lilac dark #916bb8, cream dark #e0c994, lilac light #ded4e8, cream light #fbf9f4, soot black #1b1b22, warm white #f2ede2, mid grey #7d828c, dark wood #3d2a1c. Every material's `name` must be exactly the palette colour it uses — the GLB carries these names so the kit recolours as one; an unnamed material fails delivery. Kit knob: expose a param `gravityDirection` (0–1, default 0.5) for the kit's "Gravity direction" setting wherever it makes sense on this part, and keep that id.
- Agent: Claude Code · Claude Opus 5.5 in 1DesignTool
- Generation: 7.01M tokens (96% cached) · ≈ $4.78 at API prices · 5-hour plan +4%, weekly plan +0%
- Direction: Low-poly · family scenes
- three-check PASS · glb-lint PASS
Named parts · 16
- Impossible stairs (assembly root)
- Lower flight assembly
- Lower flight
- Lower treads
- Tower and landing assembly
- Tower
- Tower plinth
- Gold cornice
- Landing tiles (light)
- Landing tiles (dark)
- Upper flight (gravity turned) assembly
- Upper flight
- Upper treads
- Handrail assembly
- Handrail and posts
- Newel finials
Note: Size at the defaults: 1.96 m wide (x) × 3.135 m tall (top of the newel finial; the landing is 2.25 m) × 3.0 m long (z). The ground footprint is 1 m wide × 3 m long on the 1 m grid. Only the upper flight leaves the grid cell, overhanging 0.96 m to the +X side at least 0.6 m above the ground. Origin is the snapping end: bottom centre of the foot of the lower flight, resting on y = 0. The stairs climb toward -Z, so the foot faces +Z. Steps are 0.25 m rise × 0.25 m going (4 per metre), chunky dream proportions rather than code-compliant stairs. 596 triangles, 11 meshes, no textures, no animation. Normals are baked flat, so the facets survive in any engine. Each material is named exactly after its Dream Maze palette colour. The exporter writes one material per mesh, so 'cream light' and 'gold' each appear twice; recolouring by name still catches both. gravityDirection is a full-turn dial for the upper flight about its own run axis: 0 or 1 upright (it simply continues upward), 0.25 tipped toward the front, 0.5 upside down (default), 0.75 tipped toward the back. At every value the flight stays bolted to the tower's side face. length (3–6 m) adds 4 lower steps per metre and raises the tower to match. checkerTiles sets the landing's checker divisions. handrail 0 removes the rail and finials, but the empty 'stairs.rail' node stays so part ids are stable. The GLB reflects the default values only. glb-lint: 0 errors. Its overall verdict prints UNVERIFIED only because no requirements contract exists. Four warnings were reviewed and accepted: material count 11 vs 10 (one per mesh, as above), duplicate names (same cause), nested siblings (tread caps sit on the flights, plinth and cornice wrap the tower), and scale (a 3 m stair against the 1 m reference). Assembly groups use plain ids (stairs, stairs.lower, stairs.tower, stairs.upper, stairs.rail) because the kit plan grammar has no hyphens. Every mesh carries a dream-maze-impossible-stairs.* id.
More like this
All of Dream Maze →
Melting clocks
Dream Maze4,878 tris

Opening doors
Dream Maze1,632 tris

Floating platforms
Dream Maze948 tris

Rotating rooms
Dream Maze2,224 tris

Birdcages
Dream Maze2,332 tris

Giant teacups
Dream Maze1,956 tris

Floating chairs
Dream Maze1,216 tris

Chess pieces
Dream Maze4,172 tris
Free under the 1DesignTool 3D library license. Model #23 of 379.