# Authored broad city light preview (r168)

The city-light exporter retained one enabled `EL_NightA_Moon` record in L4RA
with outer radius `9999.9902`, inner radius `9999`, and packed RGB
`[0.1569, 0.1569, 0.2157]`. L4RB repeats the identical record three times;
the viewer deduplicates identical broad records and shares one across nearby
lighting updates. Previously, the preview ignored radii above 200 world units.

The WebGL shader now uses the exported inner radius as the full-intensity
range and fades to the outer radius. Since the exported radius is effectively
flat across the city, this retains a broad, low-blue light contribution. The
preview intensity multiplier (`0.7`) and the shader's diffuse/falloff equation
are still approximations; the installed executable's city-light equation was
not recovered. This change makes the record visible to the renderer but does
not establish a retail-accurate night-light result.

A fully loaded Chrome capture at the L4RA default drive start reported 23,606
nearby triangles, 114 nearby textures, five local fixture lights plus one
deduplicated global light, and an intact WebGL context. The scene remains dark
compared with retail gameplay, so further lighting work still requires a
renderer comparison against the running game or another source-backed lighting
trace.

## Packed light alpha, revision r258

The authored point-light sidecar preserves each record's packed `colorRGBA` in
addition to normalized RGB. All 2,234 L4RA records have alpha 255. The viewer
previously multiplied their source RGB by an unrelated fixed `0.7`, discarding
that channel. It now includes `colorRGBA[3] / 255` in the local and global
gain calculation. Mesh-estimated fallback lights keep their separate
approximate gain because they have no packed source alpha.

A same-camera Chrome A/B at route 450, distance 7.2 compared `cityLightGain=1`
with `cityLightGain=0.7`. The full-alpha view raises mean pavement RGB from
175.3 to 195.5 in the sampled road crop and looks more washed out beneath the
casino canopy. The viewer therefore keeps the prior `0.7` preview multiplier
by default; the query parameter is clamped to 0–2 for repeatable captures. The
packed alpha is preserved, but the retail diffuse attenuation remains
unresolved, so this comparison does not establish the game's correct gain.

- [`cityLightGain=1` capture](../webgl-city/review/images/377-r258-light-gain-1.png)
- [`cityLightGain=0.7` capture](../webgl-city/review/images/378-r258-light-gain-07.png)
