Loading the orrery
โ† demo.grn.dk Blender 4.5 โ†’ glTF โ†’ three.js

The Orrery

A brass planetarium modelled, textured, rigged and animated in Blender, then exported as glTF and played back live in your browser. Drag to orbit, scroll to zoom.

Cycles render below
โ€”
The same file, offline

Rendered in Cycles

What you see above is the real-time version. This is the same .blend rendered with Blender's path tracer: 192 frames, one full turn of the camera, seamless loop. Nothing here is a stock asset; the model, materials and keyframes are generated by one Python script in Blender.

Cycles, 1280ร—720, 40 samples + OpenImageDenoise, 8 s loopRendered on a 12-core CPU, ~30 min
Cycles render of the brass orrery: a walnut plinth, a brass cage with a gear train, four planets on arms around a glowing sun
Hero still, 1920ร—1080, 128 samples, AgX Punchy
How it was made

One script, every step

The whole piece is a Blender pipeline you can re-run: geometry, modifiers, materials, rigging, animation, export and render live in build_orrery.py. The same approach scales to a client's product: swap the procedural shapes for a CAD import or a hand-modelled asset and the rest of the pipeline stays.

Modelling

Turned plinth, cage, column and arms from primitives with Bevel modifiers; spur gears built from a 2-D tooth profile with bmesh, hubs and lightening rings added on top.

Materials

Principled BSDF throughout: polished brass, bronze gears, blued steel, coated walnut, enamel planets and an emissive sun. All of it survives the glTF export as PBR.

Rigging

Empties as pivots: each arm, moon and gear is parented to its own pivot, so a single Z-rotation drives a whole assembly. Gear ratios are real: 12-tooth spindle into 24, 32 and 48.

Animation

Linear keyframes over 192 frames with whole-number turns (Mercury 5, Venus 3, Earth 2, Mars 1) so the 8-second loop is seamless in both the video and the viewer.

Export

export_scene.gltf with modifiers applied and the scene animation baked into one clip. 3.6 MB binary glTF, no compression tricks, loads in well under a second.

Playback

three.js r185, self-hosted: PMREM room environment, soft shadows, AgX tone mapping to match Cycles, and a bloom pass for the sun. No CDN, nothing to expire.

132objects
โ€”triangles in the viewer
8 sseamless loop
โ€”glTF load time