Feel: Phase 1.5 lighting/atmosphere pass — dark ambient + dynamic lights
Dark-ambient, dynamic-light-first look (RoR2/Death Scourges reference),
built filter-agnostic so the pixel style composes on top:
- New DynamicLightSystem (client-only, PresentationSystemGroup): pooled
point lights follow projectile ghosts; pulsing portal light during
RoomExplore (same ExpeditionPortalPos authority as the beacon); soft
resource-node glow that fades with harvest-shrink; short impact
FLASHES fed by CombatFeedbackSystem's burst funnel (EmitColored +
SpawnVfx -> RequestFlash). Knobs in DynamicLightConfig (scene object,
code defaults when absent).
- Atmosphere darkened: WorldAtmosphereConfig/System palettes moved to
the dark set (base cool dusk, arid burnt dusk, per-room biome consts
darkened); scene fog switched Linear -> ExponentialSquared (the
system's per-region DENSITY writes were dead in Linear mode);
trilight ambient lowered; directional 1.9 -> 1.05 slightly warm.
- 6 landmark mood lights (warpgate cyan, artefact violet x2, survey
camp warm x2, cabin warm); URP additional-lights-per-object 4 -> 8
(was starving the existing Aether lights).
- Art-look gate material: Assets/Screenshots/artlook_{base,room}_
pixel{ON,OFF}.png over the lit scene.
Verified: lights live in Play (20 static at base incl. new landmarks;
pooled dynamics active in-room: node glows + impact flashes), fog/
ambient values confirmed live, 466/466 EditMode, console clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,37 +31,39 @@ namespace ProjectM.Client
|
||||
float boundary = cfg != null ? cfg.BoundaryX : 500f;
|
||||
float half = cfg != null ? Mathf.Max(1f, cfg.BlendHalfWidth) : 80f;
|
||||
|
||||
Color baseFog = cfg != null ? cfg.BaseFogColor : new Color(0.784f, 0.878f, 0.824f, 1f);
|
||||
float baseDen = cfg != null ? cfg.BaseFogDensity : 0.006f;
|
||||
Color baseAmb = cfg != null ? cfg.BaseAmbientSky : new Color(0.725f, 0.831f, 0.949f, 1f);
|
||||
Color expFog = cfg != null ? cfg.ExpeditionFogColor : new Color(0.851f, 0.549f, 0.227f, 1f);
|
||||
float expDen = cfg != null ? cfg.ExpeditionFogDensity : 0.010f;
|
||||
Color expAmb = cfg != null ? cfg.ExpeditionAmbientSky : new Color(0.910f, 0.769f, 0.604f, 1f);
|
||||
Color baseFog = cfg != null ? cfg.BaseFogColor : new Color(0.09f, 0.13f, 0.14f, 1f);
|
||||
float baseDen = cfg != null ? cfg.BaseFogDensity : 0.010f;
|
||||
Color baseAmb = cfg != null ? cfg.BaseAmbientSky : new Color(0.32f, 0.38f, 0.48f, 1f);
|
||||
Color expFog = cfg != null ? cfg.ExpeditionFogColor : new Color(0.24f, 0.13f, 0.06f, 1f);
|
||||
float expDen = cfg != null ? cfg.ExpeditionFogDensity : 0.016f;
|
||||
Color expAmb = cfg != null ? cfg.ExpeditionAmbientSky : new Color(0.45f, 0.31f, 0.20f, 1f);
|
||||
// Step 14 (expedition redesign): the EXPEDITION-side palette keys on the replicated per-room biome
|
||||
// (RunInfo.CurrentBiome) so every room re-themes — the camera-X blend still owns the base↔run fade.
|
||||
// Palettes are code consts (cosmetic; per-biome config knobs can layer on later without churn).
|
||||
// Phase 1.5: all palettes moved to the dark-ambient set (dynamic lights carry readability).
|
||||
if (SystemAPI.TryGetSingleton<ProjectM.Simulation.RunInfo>(out var runInfo)
|
||||
&& runInfo.Lifecycle != ProjectM.Simulation.RunLifecycle.Staging)
|
||||
{
|
||||
switch (runInfo.CurrentBiome)
|
||||
{
|
||||
case ProjectM.Simulation.RoomBiomeId.Meadow:
|
||||
expFog = new Color(0.62f, 0.82f, 0.62f, 1f); expDen = 0.008f;
|
||||
expAmb = new Color(0.68f, 0.88f, 0.70f, 1f);
|
||||
expFog = new Color(0.10f, 0.16f, 0.10f, 1f); expDen = 0.012f;
|
||||
expAmb = new Color(0.30f, 0.42f, 0.32f, 1f);
|
||||
break;
|
||||
case ProjectM.Simulation.RoomBiomeId.Cavern:
|
||||
expFog = new Color(0.42f, 0.48f, 0.60f, 1f); expDen = 0.014f;
|
||||
expAmb = new Color(0.50f, 0.56f, 0.72f, 1f);
|
||||
expFog = new Color(0.06f, 0.08f, 0.12f, 1f); expDen = 0.020f;
|
||||
expAmb = new Color(0.24f, 0.28f, 0.38f, 1f);
|
||||
break;
|
||||
case ProjectM.Simulation.RoomBiomeId.Blight:
|
||||
expFog = new Color(0.55f, 0.42f, 0.62f, 1f); expDen = 0.016f;
|
||||
expAmb = new Color(0.62f, 0.50f, 0.70f, 1f);
|
||||
expFog = new Color(0.13f, 0.07f, 0.15f, 1f); expDen = 0.022f;
|
||||
expAmb = new Color(0.32f, 0.24f, 0.38f, 1f);
|
||||
break;
|
||||
// Arid keeps the config/default orange above.
|
||||
// Arid keeps the config/default burnt-dusk orange above.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
float x = _cam.transform.position.x;
|
||||
float t = Mathf.Clamp01((x - (boundary - half)) / (2f * half));
|
||||
t = t * t * (3f - 2f * t); // smoothstep
|
||||
|
||||
Reference in New Issue
Block a user