Spinning vents
Low-poly rooftop turbine vents: a brick vent curb on a steel flashing plate, with a slatted louvre on the front and two whirlybird ventilators on round steel throats. It has a seamless 6 s loop in which the tall and short turbine heads spin at different speeds.

Left rail: colours and the 3 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
- 2,872
- Vertices
- 8,616
- Meshes · materials
- 19 · 19
- Size (W × H × D)
- 1.3 m × 1.4 m × 70 cm
- File
- GLB · 235 KB
- Animation
- scene-motion · 6.0s
- Style
- Low-poly
- Collection
- Rooftop District
Palette · named materials
- brick red: curb#c32222
- brick red dark: brick courses#821717
- brick red light: coping slab#db5757
- tar grey dark: flashing plate, louvre frame, throat boots and collars, turbine rings#525860
- mid grey: throats and louvre slats#7d828c
- tar grey light: turbine vanes#a3a5a8
- sunset orange: turbine crowns#ed7e1d
- soot black: louvre opening, crossbars and spindles#1b1b22
Use it
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
const gltf = await new GLTFLoader().loadAsync(
"https://assets.stoicsoft.com/1designtool/3d/models/rooftop-district-spinning-vents/0061d01c08/model.glb"
);
scene.add(gltf.scene); // metres, +Y up, front faces +Z
const mixer = new THREE.AnimationMixer(gltf.scene);
gltf.animations.forEach((clip) => mixer.clipAction(clip).play());
// in your loop: mixer.update(delta)How it was made
The brief given to 1DesignTool's “3D object” template:
Spinning vents for the Rooftop District 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 moves: author a seamless baked loop (2–12 s) with every pivot exactly at its hinge, axle or swivel, and keep the base still. This is one part of the Rooftop District kit (Low-poly style, flat-lowpoly direction): Life above the streets. Use ONLY the kit palette, by name: brick red #c32222, tar grey #757e8a, sunset orange #ed7e1d, water-tower brown #6b4a2e, brick red dark #821717, tar grey dark #525860, brick red light #db5757, tar grey light #a3a5a8, 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 `skylineHeight` (0–1, default 0.5) for the kit's "Skyline height" setting wherever it makes sense on this part, and keep that id.
- Agent: Claude Code · Claude Opus 5.5 in 1DesignTool
- Direction: Low-poly · family abstract-kinetic
- three-check PASS · glb-lint PASS
Named parts · 7
- Spinning vents
- Curb and flashing
- Front louvre
- Tall throat
- Short throat
- Tall turbine
- Short turbine
Note: Size: 1.30 m wide (X) by 0.70 m deep (Z) by 1.38 m tall. A 1.1 × 0.5 m brick curb (0.44 m to the top of its coping) stands on a steel flashing plate. Two 300 mm steel throats carry 440 mm whirlybird turbine heads; the louvre faces +Z. The origin is at the bottom centre and the model rests on y = 0. The exported model has 2,872 triangles in 19 meshes. It uses 8 of the 12 kit palette colours, and every material is named exactly after its colour. The exporter writes one material per mesh, so names repeat (19 slots, 8 names): recolour by name. The baked clip scene-motion (6 s, seamless) turns the tall turbine 2 whole turns and the short one 3, clockwise seen from above. Each turns about its own throat axis, with the pivot on the bearing at the top of the throat. The runtime's bake also writes constant tracks for the static nodes (root, base, louvre, throats); they never move. Params are baked into the GLB at their defaults and only change the model when the scene is rebuilt in the viewer. skylineHeight (the kit's 'Skyline height') raises both throats: the tall one from 0.22 m to 0.82 m above the coping and the short one from 0.10 m to 0.46 m. That puts the overall height at about 1.08 m at 0 and 1.68 m at 1. vanes sets 10 to 24 vanes per turbine, and vaneTwist sets how far each vane sweeps around the ball. Only the default params were rendered and checked; the extremes were not captured. glb-lint: 0 errors and 4 heuristic warnings. These cover the material count from per-mesh clones, duplicate material names, non-indexed geometry (deliberate flat shading), and nested overlaps where the brick courses, louvre and collars sit on their parent forms. Its verdict reads UNVERIFIED only because no host requirements contract was supplied. plan-check passes except for its part-id regex, which rejects the hyphens in the slug-based ids this library requires; the same plan with the slug de-hyphenated passes. three-check accepts the real ids, and all 7 survive the GLB reload. index.html gained an empty data-URI favicon so the browser's automatic /favicon.ico request no longer logs a 404.
About the Spinning vents 3D model
Spinning vents is a free animated low-poly 3D model from the Rooftop District set. It measures 1.3 m × 1.4 m × 70 cm (W × H × D) at real-world scale and is built from 2,872 triangles across 19 meshes, with 7 named parts and a baked animation (6.0 s). Download the 235 KB GLB and drop it into three.js, React Three Fiber, Godot or Blender — free for commercial use, no attribution required.
- Is the Spinning vents 3D model free for commercial use?
- Yes. It is free under the 1DesignTool 3D library license: use it in personal and commercial work — games, apps, websites, renders, ads and client projects — and modify it as you like, with no credit required. What you can't do is re-sell or re-distribute the file on its own or inside a model pack.
- What file format is it, and how big is it?
- A single binary glTF 2.0 file (.glb), 235 KB: 2,872 triangles, 8,616 vertices and 19 materials, modelled in metres at 1.3 m × 1.4 m × 70 cm.
- Is Spinning vents animated?
- Yes — the GLB carries a baked animation (6.0 s), ready to play with any glTF animation mixer.
- Which engines and tools can open it?
- Anything that reads glTF 2.0. three.js, React Three Fiber, Babylon.js, Godot 4 and Blender import the GLB directly; Unity and Unreal Engine load it through their glTF importers. The snippets above show the exact code for three.js, React Three Fiber, Godot and Blender.
- How was the Spinning vents 3D model made?
- Claude Code (Claude Opus 5.5) generated it inside 1DesignTool's 3D template from a written brief, then the design kit's checks verified the geometry and the GLB before it was published. You can make your own the same way with 1DesignTool.
More like this
All of Rooftop District →
Zip line
Rooftop District1,952 tris

Billboard flicker
Rooftop District2,676 tris

Satellite dishes
Rooftop District1,540 tris

Planters
Rooftop District1,812 tris

Pigeon coop
Rooftop District1,772 tris

String lights
Rooftop District2,108 tris

Deck chairs
Rooftop District924 tris

Aerials
Rooftop District1,156 tris
Free under the 1DesignTool 3D library license. Model #3 of 902.