Global Illumination Setup for Games
A scene looks believable when light not only falls directly from the source but also reflects off walls, flows through doorways, and colors shadow zones with warm or cool tones. Without GI, all this must be manually imitated through additional Fill Lights—and the image still looks flat. Properly configured Global Illumination eliminates this compromise.
Why the GI Pipeline Breaks More Often Than Expected
The most common complaint: "we baked lightmaps, but the seams between tiles glow white." This is UV unwrap discrepancy in Lightmap UV (UV Channel 1)—either the islands are packed too densely, or Texels Per Unit is set identically for objects of different scales. As a result, the Progressive Lightmapper cannot correctly sample boundary pixels, and instead of a smooth transition, we get an artifact.
The second typical situation: Realtime GI via Enlighten works in the Editor, but in the build the lighting "jumps" when the scene loads. The reason is usually that the Lighting Data Asset was not included in the build—it must be explicitly specified in Scene settings or generated through Lighting.BakeAsync() and stored in Addressables.
A separate story with HDRP and Lumen-like solutions. In HDRP, Screen Space GI (SSGI) gives a beautiful result but requires correct Ray Tracing Acceleration Structure configuration—if the scene has skinned meshes with Raytracing enabled, each frame recalculates the BVH and Frame Time spikes. For skinned characters, it's better to disable Raytracing on the Mesh Renderer component and exclude them from Ray Tracing Acceleration Structure.
How the GI Pipeline is Built on Real Projects
The first step is to determine which mode is needed: fully baked (Baked Indirect), mixed (Mixed), or fully realtime. This is not a matter of taste—it's an architectural decision that affects the entire pipeline.
Baked Indirect is suitable for static scenes—casual games, RPGs with fixed levels. In Unity, we configure it via Window → Rendering → Lighting, select Progressive GPU Lightmapper (faster than CPU version on most scenes), and set Lightmap Resolution separately for each surface type via Lightmap Parameters Asset. For outdoor scenes with large open spaces, it makes sense to lower resolution for distant objects via LOD Groups.
Mixed Mode with Subtractive or Shadowmask is a compromise for mobile projects with dynamic characters. Shadowmask stores baked shadows in a separate texture channel and allows dynamic objects to cast shadows in realtime over baked ones. Subtractive is simpler and cheaper but doesn't work correctly with colored shadows.
For fully dynamic scenes—Light Probes and Reflection Probes. We place Light Probe Group manually at key light transition points (doorways, room corners, street/interior transitions). Automatic placement via Probe Volume (HDRP/URP Adaptive Probe Volume) appeared in Unity 2022.2 and significantly speeds up work on large levels—zones with frequent lighting changes get more probes, open uniform spaces get fewer.
Reflection Probes require separate attention. Box Projection for interior spaces is mandatory—without it, reflections on the floor look like they were taken from the street. The Realtime type with Refresh Mode Every Frame kills performance, so for most scenes we use Baked or Realtime with Refresh Mode On Awake + manual RenderProbe() calls when the scene changes.
Case Study: GI Setup for Isometric RPG
On one project—an isometric RPG with tiled levels—the initial bake time was 4 hours for a medium-sized scene. After an audit, we discovered: 60% of objects had Contribute GI enabled by default, including decorative small props (stones, grass) with UV island areas of 2–4 pixels. The Progressive Lightmapper spent enormous time sampling objects that contributed no visual value to the final lightmap.
Solution: we moved small props to a separate Lightmap Parameters Asset with Indirect Resolution 0.5 (versus 2.0 for main surfaces), and completely switched decorative objects smaller than 0.5 m² to Receive GI: Light Probes. Bake time dropped to 35 minutes, visual quality remained unchanged—small objects correctly received lighting from the nearest Light Probe.
Stages of GI Setup Work
Work begins with an audit of the current state: we look at Scene Lighting Stats, analyze the number and size of lightmap textures, check UV1 unwrap via Lightmap UV Preview. At this stage, 80% of problems are already visible.
Next—agreement on architectural decision (Baked/Mixed/Realtime) based on platform and art style. If the project is already in production, changing the mode may require shader rework and artistic reconsideration of lighting.
After choosing the strategy—configuring bake parameters, placing Light Probe Groups and Reflection Probes, test bakes with artifact analysis. The final stage—validation on target hardware via GPU Profiler and verification of correct LOD-lighting transitions.
| Scene Scale | Estimated Timeline |
|---|---|
| One small location (indoor, up to 50 objects) | 2–5 days |
| Medium level (mixed indoor/outdoor, up to 300 objects) | 1–2 weeks |
| Open world or complex of multiple scenes | 3–6 weeks |
Common Mistakes in GI Setup
Enabling Contribute GI on all objects indiscriminately—first and most common mistake. Particularly painful on vegetation-heavy levels: each instance of grass or foliage with Contribute GI enabled multiplies bake time and creates artifacts in lightmaps.
Using identical Lightmap Resolution across the entire scene. Distant mountains and near interior cannot have the same texels-per-unit—the difference should be 4–8x in favor of near surfaces.
Forgetting about Lighting Seam Stitching. In Progressive Lightmapper, it's enabled via Mesh Renderer → Stitch Lightmap Seams and fixes most seams between neighboring level tiles without manual corrections.
Neglecting verification through Rendering Debugger (Window → Analysis → Rendering Debugger). The view mode Lighting → Indirect Diffuse immediately shows zones with zero GI contribution—exactly where improperly configured objects or gaps in Light Probe coverage often hide.





