Lighting, GI and time of day
San Van’s time-of-day lighting combines VisualEnvironment bundles with local lights authored in lots. The 21 quality/ToD bundles (three tiers × seven ToDs) contain sun, sky, exposure and GI configuration, but no local lights. Local lights are overridden in place. Observed
GI and exposure
Section titled “GI and exposure”gibs_on selects GiRuntimeConfiguration.FallbackGi=1, ray-traced surfel GI; gibs_off selects 3, GPU probes.
The fallback enum is None/Gibs/CpuProbes/GpuProbes/Null. Enlighten.Enable remains true in both tier settings.
San Van uses Enlighten probes and a GI grid; the inspected meshes have no lightmap binding. Observed
Per-object GibsModeOverride values None 0 and Auto 1 do not provide an object-level RT-GI disable.
Studio meshes carry Auto and EnlightenType 0, as do inspected stock props. Ray-traced GI is switched off
globally instead, through Render.RaytraceEnable, GiRuntimeConfiguration.FallbackGi or the tier subsystem
DingoTierManager.Subsystem gibs_off. Observed
| High-tier environment | Minimum EV | Maximum EV | Confidence |
|---|---|---|---|
| Night | 5.7 | 7.4 | Observed |
| Morning | 6.5 | 10.0 | Observed |
| Noon | 7.0 | 11.3 | Observed |
| Afternoon | 7.0 | 11.4 | Observed |
| Evening | 7.0 | 10.0 | Observed |
| Level default | 7.5 | 11.5 | Observed |
These VisualEnvironments enable automatic exposure and store nominal EV 12; the five ToD clamp intervals
overlap only at EV 7.0–7.4. Every inspected ToD VisualEnvironment has ShaderParams NightAmount 0.
Observed
Exposure and emission have console settings: PostProcess.ForceEVEnable, PostProcess.ForceEV,
ForceEVCompensation and its enable, EVClampEnable, DrawExposureDebugInfo, and
DingoShaderSettings.EmissiveMult and NightTodActive. PostProcess.ForceEVEnable 1 with PostProcess.ForceEV 9
locks exposure for measurement. Forcing an extreme EV (±1,000,000) turns the screen black for the rest of the
session: neither disabling the force nor setting an ordinary value restores the picture. Observed
Emission and shader availability
Section titled “Emission and shader availability”Studio 20261012’s emission_texture, emission_color, emission_strength and emission_srgb fields clone
the stock LED donor, program 1138. The compiled material writes
RadiosityMaterial.EmissiveIntensity = 683 * emission_strength, and LED section vertices have Color0 zero.
There is no ToD condition on those emission fields. Observed
Stock content barely uses EmissiveIntensity: of the 161,109 RadiosityMaterial objects in the EBX documents of every
superbundle TOC, 161,085 hold 0. The other 24 are all in bam_levelroot and the dingolevel_sdm interiors:
Glass_Opaque_01_2x2m_WSDark_M (200 and 1,200), Glass_Stained_01_2x2m_M_Interior (250 to 45,000 over several
variants), lambert4 (30,000 and 45,000), Signage_Electronic_Wave_01_1x1_M (10,000) and DEV_ProxyGrid (1,500).
Observed Stock emissive lamps, screens and signs therefore get their glow some other way, through their programs’ own
emission and the blended passes described under
decals. Inferred
Studio’s available map domains are surface, decal, foliage, ocean and glass_opaque. No unlit world program is identified in the inspected stock material/program set, and ReSkate’s merge retains base programs. Black base colour plus emission is an available material arrangement; a general unlit map-shader route is not established. Observed
Studio’s GI-grid bake is forcibly disabled inside compile-map in build 20261012: the compiler clears the
GI option before baking, even when requested. --no-gi only changes the notice. Its separate --enlighten
option does produce EnlightenDataAsset/DynamicEnlightenEntityData and a database; a measured Warehouse map’s
database is 31.6 MB. Presence of a database alone does not establish useful interior illumination. Observed
Every inspected Studio map patches bam_levelroot/lighting_global without its DynamicEnlightenEntityData.
Whether that removes useful stock-city Enlighten lighting while the mod is installed is not measured.
Observed Inferred
Local lights
Section titled “Local lights”Only three light classes are used anywhere in the measured data: PbrSpot, PbrSphere and PbrRectangular. No PbrTube or Old* light is placed. Observed
| San Van | Count | Measured values | Confidence |
|---|---|---|---|
| PbrSpot | 20,686 | OuterAngle in full degrees, median 125 (p10 90, p90 140); InnerAngle median 35; median 85,000 lm; attenuation radius median 13 m (p90 27); ReflectorEnable on 98% | Observed |
| PbrSphere | 4,175 | Observed | |
| PbrRectangular | 43 | OuterAngle 40 | Observed |
The skate-park lots use spots of 85°/45° at 225,000 lm and 27 m, and of 135°/50° at 200,000 lm and 18 m, with
spheres of 75,000 lm; the cmn_lgt_floodlight_* fixtures are 95–125°/20–45°, 80,000–130,000 lm and 10–16 m.
San Van ties a fixture’s glow to its light through DingoLightComponentData (NightEnabled, Profile, MaterialData).
Observed
A light entity’s fields include Intensity in lumens, AttenuationRadius, DiscRadius or SphereRadius, OuterAngle, InnerAngle and ReflectorEnable. Observed A spot with ReflectorEnable concentrates its lumens into its cone: with equal 162,813-lm spots 6 m up and inner angle 0, at locked exposure, the floor beside the pool centre is more than 15.6 times brighter under a 40° cone than under a 180° one, and about 3.9 times under a 120° one. The cone is therefore not a mask over a fixed distribution. Observed
Light retirement
Section titled “Light retirement”An outgoing ToD subworld reports fully unloaded within one frame: its SubWorldReference handle at +0x80 is
zero, the loaded bit +0x148 & 1 is clear and the instance at +0xb0 is zero. Its light ids return to their
allocator 130–550 ms (8–32 frames) later, together in one frame, through the renderer’s per-frame pending-removal
list (Skate+0x4ec3800 to +0x4ecdda0). Loading the next layer immediately after the subworld flag clears can
therefore overlap both layers’ light allocations. Observed On a city of about 7,500 spot lights per ToD, a
Noon-to-Afternoon switch at level load lost over 7,000 of the incoming layer’s spots in 3 of 5 loads. Observed
ReSkate’s unload-before-load barrier and per-class light guard address different parts of this pressure. Sourced · ReSkate See limits.
The exposure intervals suggest a narrow common range, but no calibrated emission ramp across all ToDs establishes a universal strength-to-appearance rule. Unknown