Art: A0 readability pass — murk plane, seabed albedo, and a suit glow

Operator at the A0 gate: "a little too dark to play, not very readable yet."
Measured rather than guessed, and the diagnosis was NOT "add light":

  seabed _BaseColor (0.08,0.12,0.15) — the floor was painted near-black, so it
    reflected ~10% of anything and could never read as a surface
  fog colour (0.02,0.10,0.12) — distance faded to VOID rather than to murk;
    real water scatters, so far things should get lighter and lower-contrast
  ColorAdjustments contrast +10 on top of ACES — the low end was crushed twice
  Vignette 0.28 — ate the periphery, which is where threats arrive from

Murk pass (operator picked "murk + closer camera"):
  BaseFogColor/ExpeditionFogColor -> (0.06,0.20,0.25)   [WorldAtmosphereConfig
    drives RenderSettings every frame, so the CONFIG is the real knob]
  M_Staging_Seabed albedo -> (0.18,0.26,0.30)
  contrast 10 -> 4, vignette 0.28 -> 0.16
  camera Distance 17 -> 14

That fixed the void but INVERTED figure-ground, which the numbers caught:

  player 0.144 | rock 0.269 | flora 0.258 | warm haze 0.368

The protagonist was the second-darkest thing on screen. The shoulder lamp is a
forward-facing spot tilted 26 deg down — it lights the seabed ahead and never
its own wearer — so the diver had no personal light at all. Raising KeyWarm
would have lifted the scenery by the same amount and left the ratio unchanged;
only a light that TRAVELS with the diver changes it. Added ~SuitGlow: a warm,
steady point light at torso height (FeelConfig.SuitGlowIntensity 5 /
SuitGlowRange 4.5, live-tunable, 0 = off). "Light is territory", made literal.

  player 0.144 -> 0.320, now above rock 0.282 and flora 0.250
  figure-to-murk contrast 1.32x -> 2.94x, with scene brightness unchanged

304/304 EditMode green. Awaiting the operator's eyes on the result.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 16:58:52 -07:00
parent baa6eb521a
commit 501c52d809
5 changed files with 46 additions and 7 deletions
@@ -152,6 +152,16 @@ namespace ProjectM.Client
public static float ShoulderLampIntensity;
/// <summary>Shoulder-lamp beam range (m).</summary>
public static float ShoulderLampRange;
/// <summary>Personal suit glow (0 = off) — a warm point light ON the diver, distinct from the shoulder
/// lamp, which is a forward spot and therefore never lights its own wearer. Added at the 2026-08-07 A0
/// readability gate: with the murk lifted, the player measured 0.144 mean luminance against rocks at
/// 0.269 and flora at 0.258 — the protagonist was the second-darkest thing on screen. Lifting the KEY
/// would have raised the scenery by the same amount; only a light that travels with the diver changes
/// the RATIO. This is "light is territory" made literal.</summary>
public static float SuitGlowIntensity;
/// <summary>Suit-glow radius (m). Small — it is a pool you carry, not area lighting.</summary>
public static float SuitGlowRange;
/// <summary>Seconds the Menacing01 combat idle (CombatIdle state) holds after the last melee swing (0 = off).</summary>
public static float CombatIdleHoldSec;
@@ -303,6 +313,8 @@ namespace ProjectM.Client
RunNaturalSpeed = 2.6f; // measured: A_Run_FwdStrafeF_RootMotion_Masc averageSpeed (run ring)
ShoulderLampIntensity = 8f; // 07-16e: the suit lamp actually lights (3 got lost in the murk ambient)
ShoulderLampRange = 12f;
SuitGlowIntensity = 5f; // 08-07 A0: the diver must outrank the scenery, not the whole scene
SuitGlowRange = 4.5f; // a pool you carry — small on purpose
CombatIdleHoldSec = 4f; // 07-18: Menacing01 combat-idle hold after the last swing
MeleeArcIntensity = 0.8f; // 07-21 HEAVY LOCK: the weapon is the read, the arc recedes further
MeleeArcBubbles = 6;