PERPLACE Walk into every building you generate. Everything inside is usable.
Live demo · WebGL · no server round-trips

This page is a real three.js scene, not a render. The district below is generated from a seed: streets, kerbs, paving, ~50 buildings with lit windows. Drag to orbit, scroll to zoom, hover a building to read its place path, click to cut it open and walk its floors.

This demo needs WebGL

Your browser did not expose a WebGL context, so the 3D district and the room viewer cannot be drawn. Everything else on the page still works.

  • Enable hardware acceleration in your browser settings, then reload.
  • Or open this page in a current version of Chrome, Edge, Firefox or Safari.

Procedural district

Hover a building for its semantic path. Click it to enter.

place path
city
booting…
Room viewer

One room, every object under contract

A single authored room — sofa, armchair, coffee table, bookshelf, bed, door, window, rug, lamp. Click any object to read its record. The door and the window are articulated, so the record includes an axis, a range and a current value — and the control below drives the same transform the record describes.

room path city/block-2/building-4/floor-2/living-room
Why it matters

Structured space, not just pictures

Addressable places

Every entity resolves to a path like city/block-2/building-4/floor-2/living-room/sofa-01. An agent can be told to go there — or told where it already is.

Objects with affordances

uses, material, state and accessPoint answer the questions a planner actually asks: what is this for, can it move, and where do I stand.

Articulation as data

A hinge is not an animation — it is an axis, a range and a current value. The same numbers drive the mesh and the plan.

Collision you can trust

Each record carries a collision shape, so navigation, reachability and line-of-sight are computed, not guessed.