diff --git a/Assets/_Project/Scripts/Client/Presentation/StagingAmbiance.cs b/Assets/_Project/Scripts/Client/Presentation/StagingAmbiance.cs index d202c3173..66b3fdc1b 100644 --- a/Assets/_Project/Scripts/Client/Presentation/StagingAmbiance.cs +++ b/Assets/_Project/Scripts/Client/Presentation/StagingAmbiance.cs @@ -40,24 +40,23 @@ namespace ProjectM.Client } } - void Update() +void Update() { float t = Time.time; + // caustics slowly drift across the seabed if (_caustics != null) _caustics.Rotate(0f, causticsSpinDegPerSec * Time.deltaTime, 0f, Space.World); - if (_beacon != null) - _beacon.intensity = _beaconBase * (1f - + beaconFlickerAmount * Mathf.Sin(t * 7.3f) - + beaconFlickerAmount * 0.5f * Mathf.Sin(t * 17.1f)); - + // readability law: STEADY = true light. The warm beacon is left unmodulated (steady) on purpose. + // FLICKER = false/counterfeit light -> the cold gloam pools gutter with organic Perlin flicker, + // so "ours vs the deep's" reads through cadence even with hue/value removed. if (_flora != null) for (int i = 0; i < _flora.Length; i++) { - float phase = i * 1.7f; - _flora[i].intensity = _floraBase[i] - * (1f + floraPulseAmount * Mathf.Sin(t * floraPulseSpeed + phase)); + float phase = i * 3.1f; + float flick = 0.55f + 0.45f * Mathf.PerlinNoise(t * floraPulseSpeed * 1.8f + phase, phase * 0.7f); + _flora[i].intensity = _floraBase[i] * flick; } } }