Lighting, Light Grids, and Shadows
Asset brain · Engine Integration · GfxWorld and Brush Models · Transient Zones
Status
Light-grid and lightmap loader candidates are mapped to Replay targets. Lighting payload/schema and shadow integration are not complete.
Game-Test source evidence
Exact source names include Load_GfxGpuLightGridTransientData (RVA 0x4ABB40, source size 325), Load_GfxLightGridVolumeAtlasDataTempPtr (0x4ADA20, 141), and Load_GfxLightmapAtlasDataTempPtr (0x4AE720, 141). Source ownership and parent routes differ across pointer, array, and stream wrappers; see the per-function reports.
Replay 1.20 evidence
q_Load_GfxGpuLightGridTransientData: Replay RVA0xD920A0, SQLite/.pdata extent 304 bytes; target observes a 0x28-byte region, a count-by-64 array, and nested data pointer.q_Load_GfxLightGridVolumeAtlasDataTempPtr: Replay RVA0xD92730; Replay extent 134 versus source 141.q_Load_GfxLightmapAtlasDataTempPtr: Replay RVA0xD92970; Replay extent 134 versus source 141.
The q prefix reflects incomplete caller consensus and build-specific extent differences. These loader observations do not establish identical disk layouts across builds.
Integration and safe use
Lighting data is reached as GfxWorld child data and may include atlas and transient-grid references. Keep stream phase, pointer-wrapper semantics, count/stride, and nested data ownership explicit. Shadow functions and payload remain an evidence gap in this vault.
Open questions
- Which source wrapper route corresponds to each Replay pointer/array path?
- What do the Replay stream helpers show about alignment and payload bounds?
- Which shadow-map and light-grid consumers validate the loaded data?
Evidence
- Transient GPU light grid
- Light-grid volume atlas pointer
- Lightmap atlas pointer
DPVS shadow-visibility fields
The static DPVS source PDB and paired Replay access crosswalk record surfaceCastsSunShadow at +0x260, sunShadowOptCount at +0x268, sunSurfVisDataCount at +0x26C, and surfaceCastsSunShadowOpt at +0x270. The crosswalk reports matching source/Replay schema types for these fields. These are loader-access/member observations only; they do not define shadow payload serialization or runtime shadow behavior. Full DPVS context is in GfxWorld and Brush Models, with raw evidence in the paired access crosswalk.
The enclosing Replay Postload_GfxWorld route now has applied q-prefixed children q_Postload_GfxWorldDpvsPlanes (ID 18330), q_Postload_GfxWorldDpvsStatic (ID 18331), and q_Postload_GfxWorldDpvsDynamic (ID 18329). Their exact roles, per-build extents, parser observations, and remaining wrapper/boundary caveats are documented in GfxWorld and Brush Models. Their visibility/shadow fields provide loader context only; they do not establish lighting or shadow payload serialization.