# Radius 01 · Beyond the lantern passage

The first extension adds one vaulted connector and one small sun court. The Woven atrium remains available as the reference scene, with its exact geometry retained. The expanded world is a continuous place: the existing northern portal leads into the new passage and room. There is no loading transition between them.

## Architecture and movement

A ribbed barrel vault compresses the view around a warm lantern. Beyond it, a compact court combines a roof aperture, a high mullioned window, repeated side arches, low stone benches and a bronze armillary on a plinth. It uses the same material batches, stone dimensions, carved arch construction and procedural surfaces as the atrium. No external assets are loaded.

Lantern passage, Sun court and Under the oculus camera buttons expose the addition. Slow passage follows a continuous outbound-and-return rail through the doorway. The narrow passage has explicit sampled clearance tests. Rail entry uses both position and look direction so the nearby return path cannot accidentally send a visitor back toward the atrium. A full collision-based walking controller is still separate future work.

## Quality gates

- The reference atrium's position, normal and UV buffers match the saved SHA-256 fixture. Its bounds and vertex count are unchanged.
- The expanded world's longest dimension grows from approximately 28.485 to 41.835 units. The grid resolution grows with that span so voxel spacing stays at least as fine at every preset. Balanced therefore uses 118 along the longest axis instead of 80; this is additional coverage, not lower density.
- Padded grid-cell counts remain below 1.6 times the reference at each preset. These are grid cells, not a claim about total GPU memory.
- The directional shadow camera fits the expanded bounds. Map dimensions grow enough to retain at least the reference's 2048/38 texels per world unit. All world corners are tested inside the frustum for the three lighting studies.
- Future growth that would exceed a 256-voxel longest axis or 4096 shadow-map budget raises an explicit error. A second substantial radius needs zoned lighting rather than quietly reducing detail.

The atrium and extension declare static geometry, allowing the sun shadow map to be reused between changes. Scene, sun, quality and output updates invalidate it. Other host scenes keep automatic shadow updates unless they opt in explicitly.

The current extension uses one larger lighting volume; it is not a streaming or multi-volume system. Keeping spatial resolution does not establish identical lighting everywhere: the adjoining geometry intentionally changes occlusion and bounce transport through the portal. Temporal artifacts and GPU memory still have their own qualification tasks.

## Verification and cost

`make check` verifies the reference fixture, volume density and budget, corridor route and shadow fit, then builds the app. The expanded browser smoke checks both WebGPU and forced direct fallback, all scenes/presets, the doorway journey, effects, exported settings, full screen and mobile layout.

`node tests/radius-benchmark.mjs` compares the reference and expansion from the same court camera at 1440×1000 in ABBA order. Each run warms for 3.5 seconds and collects 120 animation-frame intervals. It records adapter, selected grid, shadow coverage, mean/median/p95 and browser errors in artifacts/radius-performance.json. These are end-to-end frame intervals, not GPU timestamps or a portable FPS guarantee. Run without other GPU-intensive work when comparing future changes.

The first extension stops at the sun court. Retain this bounded approach for subsequent work: add one space, compare reference images and cost, and establish lighting zones before the current coverage budget is exhausted.

### Local commissioning sample · 2026-10-21

On the local Apple Metal 3 adapter, the final paired run measured average frame intervals of 76.66ms for the reference and 84.23ms for the extension, approximately 9.9% additional end-to-end frame time. The p95 stayed approximately 100ms in both. These local headless measurements indicate relative cost under the current machine load; they are not a smoothness or FPS guarantee for another browser/device. No browser rendering errors were recorded. Balanced lighting uses 197,120 versus 286,720 padded grid cells, while spacing is 0.3561 versus 0.3545 world units per voxel.
