Stacking rings
A child's stacking-ring toy at floor-toy scale: a turned wooden base and tapered peg carrying six faceted rings that step down in size, capped by a red ball topper. Built flat-shaded in the Toy Box kit palette, so it reads as a toy from any orbit angle and at thumbnail size.

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
- 1,988
- Vertices
- 3,660
- Meshes · materials
- 10 · 10
- Size (W × H × D)
- 16 cm × 22 cm × 16 cm
- File
- GLB · 139 KB
- Animation
- Static
- Style
- Low-poly
- Collection
- Toy Box
Palette · named materials
- wood#7d5736
- dark wood#3d2a1c
- primary red#c32222
- yellow#eecd2b
- blue#2e67b8
- primary red light#db5757
- warm white#f2ede2
- blue light#6190d1
Use it
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
const gltf = await new GLTFLoader().loadAsync(
"https://assets.stoicsoft.com/1designtool/3d/models/toy-box-kit-stacking-rings/b0c96814c4/model.glb"
);
scene.add(gltf.scene); // metres, +Y up, front faces +ZHow it was made
The brief given to 1DesignTool's “3D object” template:
Stacking rings for the Toy Box 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. This is one part of the Toy Box kit (Low-poly style, flat-lowpoly direction): A child's floor seen from toy height. Use ONLY the kit palette, by name: primary red #c32222, blue #2e67b8, yellow #eecd2b, wood #7d5736, primary red dark #821717, blue dark #1f457a, primary red light #db5757, blue light #6190d1, 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 `toyEra` (0–1, default 0.5) for the kit's "Toy era" setting wherever it makes sense on this part, and keep that id.
- Agent: Claude Code · Claude Opus 5 in 1DesignTool
- Generation: 9.47M tokens (97% cached) · ≈ $8.03 at API prices · 5-hour plan +13%
- Direction: Low-poly · family products
- three-check PASS · glb-lint PASS
Named parts · 12
- Stacking rings
- Base
- Base plate
- Peg
- Ring stack
- Ring 1
- Ring 2
- Ring 3
- Ring 4
- Ring 5
- Ring 6
- Ball topper
Note: Real-world scale: 0.224 m tall, 0.164 m across the base at default parameters (a 22 cm floor toy). Origin is at the bottom centre, the base rests exactly on y = 0, metres, +Y up; the toy is rotationally symmetric, so no face is 'the front'. 1988 triangles, 10 glTF materials. Material NAMES are the Toy Box palette colour names verbatim ('primary red', 'dark wood', ...), which is how the kit recolours the set — meta.palette.role carries those same names rather than generic role words. Two materials appear twice in the GLB ('dark wood' on the base plate and peg, 'primary red' on ring 1 and the ball topper) because the exporter clones a material per mesh; both copies carry the same name and colour, so name-based recolouring is unaffected. Flat shading is baked into the geometry normals (glTF has no flatShading flag), so the facets survive into Blender/Godot/Unity. Static asset: no animation clip. 'toyEra' is the kit's Toy era knob and changes geometry only, never colour: 0 gives tall, barrel-walled, softly chamfered turned-wood rings on a taller plinth with a near-straight dowel peg; 1 gives low, flat-walled, crisp moulded-plastic discs on a low base with a steeply tapered peg. 'ringTaper' is clamped so the smallest ring always keeps a 12 mm wall around the hole, and the peg height follows the stack height so the toy stays proportioned at any ring count; all four parameters were rebuilt and captured at their range corners (design-check/3d/params/). glb-lint reports two non-blocking warnings: 'heur/duplicate-materials' (the per-mesh material clone described above) and 'heur/scale' (it compares a 0.22 m toy against the flat-lowpoly direction's 1 m reference height, since the plan's declared size is not harvested into the contract). Run bare as 'glb-lint.mjs model.glb --plan design-plan.md' the verdict prints UNVERIFIED with 0 errors, because no requirements contract is passed; with the plan-harvested contract (.1design/quality/index.html/requirements.json, written by the kit's quality-sync.mjs) the verdict is PASS with 0 errors.
More like this
All of Toy Box →
Race car on track
Toy Box1,352 tris

Pull-along duck
Toy Box1,400 tris

Spinning top
Toy Box600 tris

Toy train
Toy Box2,214 tris

Toy tools
Toy Box888 tris

Rainbow bridges
Cloud Kingdom3,096 tris

Palace
Cloud Kingdom4,788 tris

Cloud islands
Cloud Kingdom7,634 tris
Free under the 1DesignTool 3D library license. Model #10 of 395.