diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index 69b2dda22..1c6a390c9 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -15,7 +15,7 @@ RenderSettings: m_ObjectHideFlags: 0 serializedVersion: 10 m_Fog: 1 - m_FogColor: {r: 0.02, g: 0.1, b: 0.12, a: 1} + m_FogColor: {r: 0.06, g: 0.2, b: 0.25, a: 1} m_FogMode: 3 m_FogDensity: 0.035 m_LinearFogStart: 55 @@ -511,7 +511,7 @@ MonoBehaviour: m_EditorClassIdentifier: ProjectM.Client::ProjectM.Client.PrototypeCameraRig Pitch: 58 Yaw: 0 - Distance: 17 + Distance: 14 TargetHeight: 1.3 Orthographic: 0 FieldOfView: 44 @@ -838,10 +838,10 @@ MonoBehaviour: m_EditorClassIdentifier: ProjectM.Client::ProjectM.Client.WorldAtmosphereConfig BoundaryX: 500 BlendHalfWidth: 80 - BaseFogColor: {r: 0.02, g: 0.1, b: 0.12, a: 1} + BaseFogColor: {r: 0.06, g: 0.2, b: 0.25, a: 1} BaseFogDensity: 0.035 BaseAmbientSky: {r: 0.03, g: 0.055, b: 0.08, a: 1} - ExpeditionFogColor: {r: 0.015, g: 0.075, b: 0.1, a: 1} + ExpeditionFogColor: {r: 0.06, g: 0.2, b: 0.25, a: 1} ExpeditionFogDensity: 0.04 ExpeditionAmbientSky: {r: 0.02, g: 0.045, b: 0.07, a: 1} --- !u!4 &1709609454 diff --git a/Assets/_Project/Art/Materials/Staging/M_Staging_Seabed.mat b/Assets/_Project/Art/Materials/Staging/M_Staging_Seabed.mat index c09d77733..76b4f3920 100644 --- a/Assets/_Project/Art/Materials/Staging/M_Staging_Seabed.mat +++ b/Assets/_Project/Art/Materials/Staging/M_Staging_Seabed.mat @@ -129,7 +129,7 @@ Material: - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _BaseColor: {r: 0.08, g: 0.12, b: 0.15, a: 1} + - _BaseColor: {r: 0.18, g: 0.26, b: 0.3, a: 1} - _Color: {r: 0.079999976, g: 0.11999995, b: 0.14999998, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/_Project/Rendering/PostFX_Lantern.asset b/Assets/_Project/Rendering/PostFX_Lantern.asset index ce54d3194..a20167765 100644 --- a/Assets/_Project/Rendering/PostFX_Lantern.asset +++ b/Assets/_Project/Rendering/PostFX_Lantern.asset @@ -111,7 +111,7 @@ MonoBehaviour: m_Value: {x: 0.5, y: 0.5} intensity: m_OverrideState: 1 - m_Value: 0.28 + m_Value: 0.16 smoothness: m_OverrideState: 1 m_Value: 0.4 @@ -153,7 +153,7 @@ MonoBehaviour: m_Value: 0.35 contrast: m_OverrideState: 1 - m_Value: 10 + m_Value: 4 colorFilter: m_OverrideState: 1 m_Value: {r: 0.88, g: 0.97, b: 1, a: 1} diff --git a/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs b/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs index f2f24c173..5d5862eaa 100644 --- a/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs +++ b/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs @@ -101,6 +101,7 @@ namespace ProjectM.Client ParticleSystem _stepFx; // 07-15: silt puff per footstep ParticleSystem _bubbleFx; float _bubbleTimer; // 07-16: dome bubble exhaust (+1 per footstep, loose sync) Light _lampLight; // 07-16e: the shoulder lamp CASTS — a warm spot beam riding the body yaw + Light _suitGlow; // 08-07 A0: a warm pool ON the diver (the lamp above points AWAY) Vector3 _lastFootPos; float _footDistAccum; float _footStepGap; bool _footInit; // stride-distance footsteps (local player) Entity _localPlayer = Entity.Null; @@ -575,6 +576,32 @@ namespace ProjectM.Client (Vector3)localPos + lampYaw * new Vector3(0.27f, 0.55f, 0.05f), // the kit lamp's shoulder offset lampYaw * Quaternion.Euler(26f, 0f, 0f)); // down-tilt puts the hotspot ~3m ahead (14° landed ~6m out — too diffuse) } + + // Personal suit glow (08-07, A0 readability gate). The shoulder lamp above is a FORWARD spot, so it + // lights the seabed ahead and never its own wearer — measured at the gate, the diver sat at 0.144 + // mean luminance while rocks read 0.269 and flora 0.258, i.e. the protagonist was the second-darkest + // thing on screen. Raising KeyWarm would lift the scenery by the same amount and leave the ratio + // unchanged; only a light that TRAVELS with the diver fixes figure-ground. Warm and STEADY — the + // readability law says warm+steady = ours/true. + if (_localPlayer != Entity.Null && FeelConfig.SuitGlowIntensity > 0f) + { + if (_suitGlow == null) + { + var glowGo = new GameObject("~SuitGlow"); + glowGo.transform.SetParent(_fxRoot, false); + _suitGlow = glowGo.AddComponent(); + _suitGlow.type = LightType.Point; + _suitGlow.color = new Color(1f, 0.82f, 0.55f); + _suitGlow.shadows = LightShadows.None; + } + _suitGlow.intensity = FeelConfig.SuitGlowIntensity; + _suitGlow.range = FeelConfig.SuitGlowRange; + _suitGlow.transform.position = (Vector3)localPos + new Vector3(0f, 0.9f, 0f); // torso height + } + else if (_suitGlow != null && _suitGlow.intensity > 0f) + { + _suitGlow.intensity = 0f; + } else if (_lampLight != null && _lampLight.intensity > 0f) { _lampLight.intensity = 0f; diff --git a/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs b/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs index 4fbab3edd..89e15ae0c 100644 --- a/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs +++ b/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs @@ -152,6 +152,16 @@ namespace ProjectM.Client public static float ShoulderLampIntensity; /// Shoulder-lamp beam range (m). public static float ShoulderLampRange; + /// 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. + public static float SuitGlowIntensity; + /// Suit-glow radius (m). Small — it is a pool you carry, not area lighting. + public static float SuitGlowRange; + /// Seconds the Menacing01 combat idle (CombatIdle state) holds after the last melee swing (0 = off). 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;