From b2c9497bae0e9d1a507bfed6d0a92acaeb176046 Mon Sep 17 00:00:00 2001 From: Dejvino Date: Thu, 20 Aug 2026 22:08:32 +0200 Subject: [PATCH] =?UTF-8?q?Epic=205=20Phase=202.5=20=E2=80=94=20model=20bl?= =?UTF-8?q?end=20via=20alpha,=20not=20lumakey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Model stages render with alpha:0 where no mesh covers (transparent clear) and carry dark material colours. Lumakey keys on luma (dot(src,0.212…)), so a dim mesh keyed to ~0 and vanished — Pylon Field 3D / Synthwave Corridor looked black. Use 'normal' for kind:'model' so the alpha is the mask; fragment over dark ground stays covered. Per-stage fog/light tuning deferred to a director param (LookGenerator) per review — not hand-tuned per stage. Co-Authored-By: Claude --- flow-state/src/look/LookGenerator.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/flow-state/src/look/LookGenerator.js b/flow-state/src/look/LookGenerator.js index 44df4aa..b3f8834 100644 --- a/flow-state/src/look/LookGenerator.js +++ b/flow-state/src/look/LookGenerator.js @@ -625,7 +625,13 @@ function buildStack(module, overlayRoster, bias, rng, temperament, story = null, // leaves unpainted is then the ground rather than black, which is the // whole point of standing it on one, and what it DOES paint stays its // own colour. 'screen' is the blaze — see above, and passes.js. - blend: standsAlone ? 'normal' : (blaze ? 'screen' : 'lumakey'), + // Model stages render with correct alpha (transparent clear) and carry + // dark material colours — lumakey would key them out. Use normal for + // kind:'model' so the alpha is the mask (Assembly, Pylon Field 3D, + // Synthwave Corridor). + blend: module.kind === 'model' + ? 'normal' + : standsAlone ? 'normal' : (blaze ? 'screen' : 'lumakey'), // Carried so the HUD, the checks and a later pass over the look can all // tell a deliberate bloom-out from a broken one. blaze,