Venues: song sky, ride roadside, room camera, filmstrip venue pin
- Shared sky dome (src/venues/sky.js): gradient backdrop from palette / section light / style texture, wired into chamber/stage/ride with fog matched to the dome mid colour — replaces clear-to-black - Ride roadside: houses, signs, trees, seeded viz billboard, all analytic scroll; popMul fade for crew, arrangement-gated roadside (no mid-section popping); parked idle creep + engine shake; analytic dash clock - Room camera: traverse glide + progress look sweep + per-section dolly, single-side room visits, one re-hang max; venue framing per archetype - Filmstrip venue selector (?venueSel=) with cache key; seed persisted to URL on reroll; gallery query plumbing
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
// Primitives only in V1 — no glTF kit.
|
||||
|
||||
import { actorToGeometry } from '../actors/meshes.js';
|
||||
import { buildSky, paintSky } from './sky.js';
|
||||
|
||||
export const chamber = {
|
||||
name: 'Chamber',
|
||||
@@ -212,6 +213,11 @@ export const chamber = {
|
||||
scene.fog = new T.Fog(0x0e0e12, 12, 28);
|
||||
scene.userData.transparentBackground = true;
|
||||
|
||||
// Song sky above the open room — replaces clear-to-black. Radius 90
|
||||
// clears the 22-unit room with margin; fog melts the horizon.
|
||||
const sky = buildSky(T, { radius: 90 });
|
||||
scene.add(sky.mesh);
|
||||
|
||||
// Population container — memories
|
||||
const popGroup = new T.Group();
|
||||
popGroup.name = 'memories';
|
||||
@@ -221,6 +227,7 @@ export const chamber = {
|
||||
room, floor, floorMat, wallMat, walls, windowMesh, windowMat,
|
||||
reflection, reflectMat,
|
||||
ambient, sun, fill,
|
||||
skyMesh: sky.mesh, skyMat: sky.mat,
|
||||
popGroup,
|
||||
seed,
|
||||
venueSpec: venueSpec || null,
|
||||
@@ -305,6 +312,12 @@ export const chamber = {
|
||||
}
|
||||
}
|
||||
|
||||
// Song sky + matched fog. The sky replaces clear-to-black; fog takes
|
||||
// the dome's mid colour so the horizon melts instead of banding.
|
||||
paintSky(instance.skyMat, {
|
||||
palette: pal, light: roomLight, style,
|
||||
seed: instance.seed,
|
||||
});
|
||||
// Fog via space + story: resolution (fog 0.55) closes the room in,
|
||||
// climax (0.18) opens it. Swing near AND far so the depth change reads.
|
||||
if (scene.fog) {
|
||||
@@ -312,7 +325,9 @@ export const chamber = {
|
||||
const fogDepth = (space ? 12 + space.depth * 6 : 15) * (0.7 + fogMul * 0.75);
|
||||
scene.fog.near = fogDepth;
|
||||
scene.fog.far = fogDepth + 10 + fogMul * 10;
|
||||
scene.fog.color.setRGB(c0[0] * 0.06, c0[1] * 0.06, c0[2] * 0.08);
|
||||
const mid = instance.skyMat ? instance.skyMat.uniforms.u_mid.value : null;
|
||||
if (mid) scene.fog.color.copy(mid);
|
||||
else scene.fog.color.setRGB(c0[0] * 0.06, c0[1] * 0.06, c0[2] * 0.08);
|
||||
}
|
||||
|
||||
// Rebuild population if needed (deterministic, seeded). The arrangement
|
||||
|
||||
Reference in New Issue
Block a user