Quick answer: A stuck bake usually means GPU memory exhaustion, OptiX denoiser failure, or one outlier chart consuming most resources. Switch Lightmapper to Progressive CPU as a workaround, lower Max Lightmap Size, or split the scene into bake chunks via separate scenes/lightmap groups.
Here is how to fix Unity Progressive lightmap bakes that freeze at 30%, 70%, or some other oddly stable percentage and never finish. The progress bar is steady. CPU/GPU usage hovers near zero. The editor is technically responsive but the bake is dead. Recovering means understanding which sub-step stalled and either changing the lightmapper or reducing scene complexity.
The Symptom
Hit Generate Lighting. Progress climbs to some value (commonly 30%, 70%, or 92%) then stops. CPU/GPU activity drops. No error in the console. Cancel only sometimes works; otherwise you have to kill the editor.
What Causes This
GPU memory exhaustion. Progressive GPU loads the entire bake context into VRAM. A scene larger than your GPU’s available memory stalls when paging fails.
OptiX denoiser unavailable. If you enabled OptiX but lack a CUDA-capable NVIDIA GPU, the denoiser request silently fails and the bake stalls.
Single oversized chart. One mesh with a 4096x4096 lightmap chart can dominate the bake. Other charts are starved while it processes.
Editor.log silent crash. The bake worker process can crash without surfacing to the editor UI. Check the log file directly.
The Fix
Step 1: Try Progressive CPU. Open Window → Rendering → Lighting → Scene. Set Lightmapper to Progressive CPU. Slower but memory-tolerant. Often finishes when GPU stalls.
Step 2: Lower bake size limits.
Lighting Settings -> Lightmapping Settings:
Max Lightmap Size: 512 (was 1024)
Lightmap Resolution: 10 (was 40)
Direct Samples: 32 (was 64)
Indirect Samples: 128 (was 512)
Environment Samples: 128 (was 256)
Lower these and re-bake. If it succeeds, your earlier bake was hitting memory or timeout limits.
Step 3: Disable OptiX if your GPU does not support it. In Lighting → Filtering, set Denoiser to None or Optix only if you have a recent NVIDIA card. Open Image Denoise (OIDN) works on AMD/Intel and does not stall on missing CUDA.
Step 4: Find oversized charts.
// Editor script: find renderers with huge lightmap area
[UnityEditor.MenuItem("Tools/Find Big Lightmap Charts")]
static void Find()
{
foreach (var r in Object.FindObjectsByType<Renderer>(FindObjectsSortMode.None))
{
Vector4 st = r.lightmapScaleOffset;
float coverage = st.x * st.y;
if (coverage > 0.1f)
Debug.Log($"{r.name}: {coverage:P0} of lightmap", r);
}
}
Anything over 10% of a single lightmap is usually a chart you should split (mark the renderer’s Scale In Lightmap lower).
Step 5: Bake in chunks. Split the scene into smaller scenes (BG terrain, props, hero areas). Bake each separately. Combine via additive scene loading or lightmap groups.
Reading Editor.log
If the bake is stuck, open Editor.log:
# macOS
~/Library/Logs/Unity/Editor.log
# Windows
%LOCALAPPDATA%\Unity\Editor\Editor.log
# Linux
~/.config/unity3d/Editor.log
Look for repeated “Out of memory”, “OptiX initialization failed”, or worker process exit codes. The error usually appears within a few lines of where the stall began.
“If GPU bake stalls, switch to CPU. If CPU stalls, the scene is too big — split it.”
Related Issues
For baked GI seams, see Baked GI Seams. For occlusion baking, see Occlusion Portal.
CPU first when GPU stalls. Smaller charts. Editor.log tells the truth.