Lightmap
Marks a static entity as a receiver of baked global illumination —
indirect / bounced light and soft shadows stored in a per-entity lightmap.
Stores the bake configuration on the entity but does not bake on its own — call
Lightmap.bake(entityId) or Lightmap.bakeAll() from the
globalIllumination.lightmap module to actually do the work.
The bake stays attached to the entity in exactly the same way a
material does: a per-entity material (Lightmap.materialName(id))
sampling a per-entity storage buffer (Lightmap.bufferName(id)). The
previous material is preserved and restored when the component is
destroyed or Lightmap.clear(id) is called.
Fields
| Field | Default | Purpose |
|---|---|---|
resolution | 64 | Per-axis texel count. 64 = 64×64 = 4096 texels. |
samples | 16 | Hemispheric AO ray count per texel. 0 = no AO. |
intensity | 1.0 | Multiplier on the stored radiance at sample time. |
aoRadius | 8.0 | World-space max length for AO rays. |
gpu | true | Use the compute-shader baker (faster). |
applyMode | "modulate" | "modulate" or "add" — how the lightmap combines with the realtime path. |
realtimeBlend | 1.0 | Scale on the realtime contribution. 0 = baked only. |
skyR/G/B | (0.05, 0.07, 0.10) | Sky / ambient term used by AO. |
Usage
local Lightmap = require("@builtin::systems.globalIllumination.lightmap")
entity.find("floor").component.add("Lightmap", {
resolution = 256,
samples = 64,
intensity = 1.0,
})
Lightmap.bake("floor")
Re-bake when geometry, lighting, or sky values change. bakeAll()
processes every entity carrying this component using a shared scene
BVH so the per-entity cost is mostly the per-texel ray traversal.
Scoped to this part · feeds back into the world's score.