// Every aesthetic dial lives here so the GUI, the shaders and the "copy preset" // button all read the same object. Colors are hex ints (sRGB, as authored). export const LOOK = { // ---- key light ------------------------------------------------------- sunAzimuth: 132, // degrees sunElevation: 46, // degrees above horizon sunColor: 0xfff4d4, // warm, near-white ambientSky: 0xa9d9ff, // cool bounce from the sky ambientGround: 0xd8c9a0, // warm bounce off sand ambientStrength: 0.26, // ---- the cel ramp ---------------------------------------------------- // Lighting is banded, not smoothed. `edge` is where the terminator sits in // the 0..1 half-lambert range; `softness` is how many units of that range // the transition is allowed to take (small = hard ink-like break). bands: 2, // 2 = classic WW, 3 = adds a hot top band rampEdge: 0.60, rampSoftness: 0.016, rampEdge2: 0.86, // only used when bands === 3 highlightBoost: 1.1, // brightness of the top band // Shadow tint. WW shadows keep their saturation and cool off rather than // going grey, so this is a per-channel multiply, not a lerp to black. shadeTint: [0.46, 0.54, 0.70], shadowFloor: 0.15, // how far a cast shadow pushes into the dark band litWarmth: 0.06, // warm tint added to the lit band // ---- rim ------------------------------------------------------------ rimStrength: 0.30, rimStart: 0.55, rimEnd: 1.0, rimColor: 0xffffff, // ---- outlines (inverted hull) --------------------------------------- outlines: true, outlineWidth: 4.0, // in px-ish at outlineRefDist outlineRefDist: 14, outlineMaxWidth: 0.16, // world-unit clamp so close-ups don't balloon outlineColor: 0x2a2119, // warm near-black, never pure black outlineTintFromBase: 0.35, // blend the outline toward the surface color // ---- atmosphere ------------------------------------------------------ fogColor: 0xc8ebf7, fogNear: 55, fogFar: 260, skyZenith: 0x2f93da, skyHorizon: 0xc4e8f7, cloudColor: 0xffffff, cloudShade: 0xbcd8ee, cloudCover: 0.46, cloudSharpness: 0.14, cloudSpeed: 0.006, cloudScale: 1.7, // ---- sea ------------------------------------------------------------- seaDeep: 0x1d76b8, seaMid: 0x39aecd, seaShallow: 0x8fe6e2, seaFoam: 0xffffff, seaBandSharp: 0.06, // how hard the sea's own tone break is waveHeight: 0.34, waveSpeed: 0.55, waveScale: 1.0, sparkle: 0.75, // flat white glints on the crests shoreFoamWidth: 2.2, shoreRingSpeed: 0.35, // ---- grade ----------------------------------------------------------- exposure: 1.0, saturation: 1.14, bloom: 0.16, bloomThreshold: 1.0, // only genuinely over-range pixels - the glints vignette: 0.18, }; // Surface palette, split lit/shade only where a straight multiply of the base // wouldn't read right (cliffs and trunks want a browner shadow than the tint // gives). Anything omitted just uses shadeTint. export const PALETTE = { sand: 0xf3e2ae, grass: 0x7ec84e, grassDark: 0x5aa83c, rock: 0xb6a181, rockDark: 0x8e7a5c, trunk: 0x8a6a3f, canopy: 0x51a23c, canopyAlt: 0x3f8c39, wood: 0xa87b4a, cloth: 0xe25b4a, white: 0xf6f3e6, };