FREEcommercial use · no sign-up

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.

Stacking rings 3D model

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
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 +Z

How 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
Make your own with 1DesignTool →

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.

Free under the 1DesignTool 3D library license. Model #10 of 395.