A FogVolume covering the site carries a fog shader whose scattering albedo
follows the same spectral transmittance as the seabed and whose density
grows below the reference depth, so haze darkens and turns indigo with
depth around every object; the global volumetric density moves into the
volume and the far depth fog only covers what lies beyond 128 m. Sand
ripples are bent by a slow domain warp, blended with a larger ripple
scale and faded out between 40 and 60 m, which hides the 3.2 m tiling.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The seabed shader applies per-channel Beer-Lambert transmittance relative
to a 24 m reference depth: the scalar part dims the directional light in a
custom light() function and the sky ambient through AO, the chroma part
tints the albedo, and artificial lights are left untouched for the
submarine's projectors. Sky, fog and sun are cooled and the sun softened
so the plateau reads green-blue, the canyon floor cold blue and the
drop-off foot near-indigo.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The environment declared the sky as its ambient source without a sky, so
shadowed faces received no ambient light. A procedural underwater sky now
feeds ambient and reflections; the directional light is steeper and
stronger with 70 % soft shadows; SSAO, filmic tonemapping, aerial
perspective and tinted volumetric fog complete the pass.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Rock is normal-mapped triplanar in world space at two scales, sand carries an
oriented ripple normal map on the xz plane, and a grain map drives detail
occlusion, albedo mottling and roughness. The three maps are seamless,
seeded, mipmapped textures built synchronously by SeabedDetailTextures, so
no asset is needed and builds are deterministic. The mesh has no tangents:
perturbed normals are computed in world space and written to NORMAL.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Strata now take a world rectangle, so the 4 m ledges cover the whole break
and talus south of z = 118 m without touching la Saignée or the landmarks.
Roughness gains octave and fractal-type parameters; a SlopeRoughness
modifier roughens rock faces only. Both sites are re-baked with hummocks
from 250 m down to 5 m. The secondary item, the first debris piece and one
safe-route waypoint move a few metres to keep their contracts.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Drop a dead initial value in PlayableBoundsRule, guard
DiveSite.configure() when called before the node is in the tree, and
align the zone 1 brief with what was built: generic dive_site.tscn,
the resolved collision check, and the graybox shader deviation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The target hull now lies along the groove axis (yaw derived from the
groove constants), set back 22 m from the groove end so both hull ends
rest on the flat groove floor. The mooring, spawn and first route
waypoints move to z = -210 and the decoy yacht to (-30, -150) so no
wreck is farther than 320 m from the mooring and no two wrecks are
farther than 260 m apart (spec 4.1). The spawn faces south toward the
site. Four contract assertions pin the budget, the spawn heading and
the hull orientation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zone 1 becomes the default dive site; the foundation suite still selects the
calibration site explicitly. Documents the site suites, the site content
workflow and the authored heightfield terrain (ADR 0012), and aligns the zone 1
brief with the baked data (storage format, route lengths, 6 m ridge and
pinnacles).
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>