# Atmosphere and living-market revision 3
Inspected 17 October 2026. This is an interactive artistic model, not surveyed vegetation or calibrated wind/water simulation.

## Requested project references inspected
- Happy Space: local `Happy Space/Proactive Urban Strategist/landscape.js`, makeLandscape/tree/shrub; and `CleanShot 2569-10-13 at 15.55.04.png`. Observed rounded faceted, asymmetric crowns, umbrella/broadleaf/columnar/palm families, height and crown variation, minimum-spacing placement and clustered understory. Adapted these visual principles in newly authored `src/landscape.js`. The market has its own small footprint and clear canal corridor; no park map or external tree inventory copied. Reference code is marked copyright Happy Space; code and screenshot are not redistributed in this package.
- Suvarnabhumi Airport: local `app.js`, lightState/syncLight around lines 304–318 and frame lighting around line 364. Observed independent azimuth, elevation, direct power, ambient and exposure; morning/noon/evening presets, shadow toggle, ACES output. Adapted the control approach to this model’s scale and existing Sky/PMREM pipeline. Did not copy airport geometry or its light intensities wholesale. Source path: `/Users/jtiapbn.ai/Desktop/MBP Backup/Whispering Weekends/3D World/Suvarnabhumi Airport/app.js`.
- [Three.js r180 shadow shader](https://raw.githubusercontent.com/mrdoob/three.js/r180/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js), inspected PCF/PCFSoft branches. PCF offsets multiply shadowRadius; PCFSoft uses fixed texel offsets. The model therefore uses PCFShadowMap so the softness slider actually controls the sampling footprint. This is a blur radius, not physical area-light penumbra.

## Changes and assumptions
- Sun azimuth −180..180°, elevation 8..80°, power 0..5, sky fill .1..1.5, exposure .5..1.5; four presets, reset. Angle convention: x=sin(az), z=cos(az), y=sin(el); artistic angles, not geographical ephemeris.
- Shadows can be disabled or softened (.5..6 texel sampling radius), default 2; normal bias .035 scene units. Light direction and sky are shared with water. PMREM updates after a 160ms drag debounce; previous GPU target disposed. Direct light changes immediately.
- Seeded planting uses four tree silhouettes, varied heights, crown scales/rotation/palette and irregular shrub clusters. Default seed randomized once on load; query `?seed=51740` reproduces this QA planting. “สุ่มสวนใหม่” creates another seed and restarts the scene, visibly disclosed. Tree and shrub coordinates are presentation choices, not a species inventory.
- Wind 0..1.6 scales the same three coarse wave modes in GLSL and JS. Float height samples the field; pitch and roll sample bow/stern and port/starboard, clamped .025/.035 rad. It is a damped visual response, not rigid-body buoyancy or measured wind speed.
- Passenger boats make slow bounded .62-unit fore/aft excursions, vendors .07 units. Their canal-following headings update with position. Paddle strokes use individual phase offsets. Activity slider 0..1 changes excursion/stroke amount. Zero wind makes the coarse water and hull rocking flat; zero activity stops background excursion/strokes. The story boat remains controlled by chapter travel.
- Global pause freezes simulation time for water, boat drift, rocking and paddles; light controls remain usable. No added continuous PMREM generation or reflection recursion. Paddle groups excluded from static mesh batching.
- Original research of Damnoen Saduak, architecture, water and PBR remains in `research/v2/RESEARCH-IMPROVEMENTS.md` and `research/RESEARCH.md`.
