Forge Universe

Scene fixtures

Bundled under assets/scenes/ and copied to website/assets/scenes/ at build time.

projections-demo.json

Used by: /demos/projections-2d.html

Node Type Notes
hexahedron hexahedron Offset left; ry: 35, rx: 10
sphere sphere Offset right; radius: 0.55

Camera: eye [3, 2, 5], target [0, 0.5, 0], fov 50.

five-solids-static.json

Used by: /demos/static-solids.html

Six gallery tiles — one node per Platonic solid plus sphere. Poses are mostly rotation-only (ry) so thumbnails show varied orientations. Sphere uses radius: 0.55.

Flyout recenters each node at origin while preserving rotation for inspection.

five-solids-drone.json

Used by: /demos/drone-flythrough.html

Same six solids arranged in 3D space for the multi-object WebGL scene. Nodes include x/y/z offsets so solids do not overlap.

sim-bounce.json

Used by: /demos/sim-bounce.html

Five nodes with active sim.bodies — two spheres and three polyhedra (hexahedron, octahedron, tetrahedron) dropped from above a ground plane at y: 0.

Node Type Notes
ball-a sphere radius: 0.45; body b1, initial velocity [0.4, 0, 0.1]
ball-b sphere radius: 0.4; body b2
cube-a hexahedron size: 0.8, ry: 20; body b3, shape aabb
oct octahedron size: 0.7; body b4
tet tetrahedron size: 0.75; body b5
sim field Value
dt 0.016
integrator semi_implicit_euler
gravity [0, -9.81, 0]
ground { y: 0, restitution: 0.35 }
bodies Five entries (b1b5) linked by nodeId

Camera: eye [6, 4, 8], target [0, 1, 0], fov 45 (matches UniverseSimGl default view).

construction-site.json

Used by: /demos/construction-assets.html

Three asset nodes with GLB URIs and kinematic articulation:

Node Type GLB Joints
excavator-01 hexahedron sample-excavator.glb slew, boom, stick, bucket
truck-01 hexahedron sample-articulated-truck.glb steering, dump, front wheels
worker-01 hexahedron sample-worker.glb left-arm, right-arm

sim.bodies is empty — articulation is presentation-only. See Construction assets.

construction-site-realistic.json

Used by: /demos/construction-realistic.html

Open-pit mine (environment.preset: "open-pit-mine") with prepared third-party GLBs and articulation:

Node Type GLB Joints
excavator-real hexahedron realistic/excavator-realistic.glb slew, boom, stick, bucket
adt-real hexahedron realistic/articulated-dump-truck-realistic.glb steering, dump

Attribution: assets/models/construction/realistic/ATTRIBUTION.md.

Adding a custom scene

  1. Add JSON under assets/scenes/my-scene.json matching world model v1.
  2. Point a mount call at the URL:
UniverseStaticCss.mount('#mount', '/assets/scenes/my-scene.json');
  1. Run python3 generator/build-site.py to copy assets into website/.

Validation

Invalid scenes throw from UniverseWorld.validateScene():

  • version must be 1
  • Each node needs id, type, pose
  • type must be in SOLID_TYPES (or alias cube)