Put a light in a room and it gets brighter. But that light keeps being calculated the whole time it's running. In a world with several avatars in it, that calculation weighs heavily.
For floors and walls that don't move, you can calculate the light ahead of time and store it on the surface. That's called baking. At runtime it just pastes the stored result, so shadows come out clean and it runs lighter.
This article puts one Point Light in a small room, switches it to Baked, bakes it, and gets shadows onto the floor.
What You'll Learn
- How Realtime, Baked, and Mixed differ, and which to use where
- Why going dark right after switching to Baked is normal
- The three settings baking requires
- The constraint that baked light can't be turned off at runtime, and the way around it
Start from a room with floors and walls. If you don't have one, build it in blocking out a room and stairs from Cubes.
Calculate every frame, or burn it into a photo
Lights have three modes. The difference is when the light gets calculated.

- Realtime calculates "where is this light hitting right now" every frame. Move the light or switch it off and the result changes on the spot. It's easy to understand, but leaving it lit constantly gets heavy
- Baked calculates once during production and burns brightness and shadows onto the floor and wall surfaces. At runtime it's just pasting a photo, so it's light and the shadows are clean. In exchange, you can't move or switch it
- Mixed blends the two: baked onto walls, realtime onto moving objects. Convenient, but the Realtime cost remains, so don't use it for your first one
In VRChat worlds, constantly-lit rooms are Baked by default. What stays Realtime is only lights that need to move: a lamp you switch off, a flickering neon sign. Shipping to Quest or phones makes this even more the rule.
One thing to know up front: a newly placed Point Light's Mode is Realtime. Switching it to Baked is your move.
Hands-On: Bake one Point Light
Put one light in a small room and bake it. When you're done, it's bright under the lamp with soft shadows in the corners.
1. Place a ceiling and a light
Save under a new name via "File → Save As" as WorldLab_Lighting.unity before you start. That way you can experiment without breaking the original scene.
Add a ceiling and a light. Put both at the top level of the Hierarchy.
| Name | Settings |
|---|---|
Ceiling | Cube. Position (0, 3.1, 0), Scale (6, 0.2, 6) |
CeilingLight | Point Light. Position (0, 2.6, 0), Range 6, Intensity 3, Color white |
Ceiling's underside sits at Y=3, meeting the top of the 3m walls. Don't bury CeilingLight in the ceiling — drop it slightly into the room. Set Shadow Type to "Soft Shadows."
2. Turn down the sun and the ambient
Press Play now and you probably can't tell the difference. A new scene has a Directional Light playing the sun, plus ambient light from the sky, so the room is already bright.
Turn the surrounding light down so you can compare.
- Disable
Directional Lightin the Hierarchy - Open "Window → Rendering → Lighting" and go to the Environment tab
- Set Environment Lighting's Source to "Color" and Ambient Color to a dark grey
Now the room's brightness comes from CeilingLight alone. Step in with ClientSim and confirm it's bright under the lamp.
Ambient is light wrapping around from the sky and surroundings. It's a separate dial from the light's Intensity, so touching both at once when things look dark hides the cause. Move one at a time.
3. Switch to Baked (this is where it goes dark)
Stop Play and change Mode to "Baked" in CeilingLight's Inspector.
The room goes dark.

This is normal. A Baked light illuminates nothing until you bake it. Plenty of people assume it's broken here and switch back to Realtime, so remember this. Going dark is the cue to move on to the next step.
4. Mark the surfaces to bake
Only surfaces marked as bake targets can receive light. Target the static floor, walls, ceiling, and stairs.
Select the targets and check Contribute GI in the Static dropdown at the top right of the Inspector.
For this exercise, that's Floor, EntranceFloor, each wall (BackWall, LeftWall, RightWall, FrontLeft, FrontRight, Lintel), Ceiling, each stair step, and Platform.
GI (Global Illumination) is the idea of handling not just direct light but light bouncing off walls too. Contribute GI means "include this surface in that calculation."
Don't set it on VRCWorld, SpawnPoint, or the doors and pickups you're about to move. Baking something that moves leaves the shadow behind when you move it.
5. Press Generate Lighting
Open the Scene tab in the Lighting window. If there's no Lighting Settings Asset, create one with "New Lighting Settings" and name it something like WorldLabLighting.
Line up these values to start.
| Field | Value | Reason |
|---|---|---|
| Baked Global Illumination | On | Calculate Baked light |
| Lightmapper | Progressive GPU (CPU if unavailable) | GPU is faster |
| Lightmap Resolution | 20 | Plenty for a small room |
| Max Lightmap Size | 1024 | The cap for one image |
| Auto Generate | Off | Bake on your own schedule |
Save the scene, then press Generate Lighting at the bottom.
For a small room, GPU takes tens of seconds to a couple of minutes. CPU takes several minutes. If it runs well past five minutes, suspect your settings. The usual causes are Lightmap Resolution set too high (over 40), or a room scaled larger than expected.
When it finishes, it's bright under the lamp with shadows against the stairs and walls. That's a completed bake.
6. Check the result
Try these to see whether it baked cleanly.
| What to try | What you should see |
|---|---|
Disable CeilingLight during Play | Floor and walls stay bright. The baked light remains |
| Set Lightmap Resolution to 40 and rebake | Shadow edges get smoother. It takes longer |
| Move the stairs and Play without rebaking | The shadow stays in the old position |
That last one shows baking's nature best. Light is paired with the arrangement, so moving something means baking again. Once you've tried it, put the stairs back and rebake.
Baked light can't be turned off at runtime
There's only one constraint to remember about baking. Baked light can't be switched off or moved at runtime.

The floor and wall brightness is already stored in the surface images. Toggling the Light component leaves the stored light exactly where it is.
That property matters later when you build a light switch. To make "a switch that darkens the room," that light has to stay Realtime.
The practical design looks like this.
- Base brightness for the whole room → Baked (light and clean)
- One lamp toggled by a switch → Realtime (acceptable cost if you keep the count down)
Realtime lights want a ceiling of 1–3 in a PC world. Shipping to Quest or phones means zero as a rule, or one without shadows if you really need it. Making everything Realtime tanks the moment people gather.
One more thing: don't confuse this with Emission. Raising a material's Emission makes the surface itself look lit, but that alone doesn't make it a light that illuminates its surroundings. Emission to make a sign glow, Light to brighten a room.
Common Pitfalls
Different symptoms point at different places.
- Still pitch black after switching to Baked → Did you press Generate Lighting? If you did, check that Contribute GI is on for the floor and walls
- Baked, but the brightness doesn't change → The light is still Realtime, or the Directional Light and ambient are strong enough to bury the difference
- Baked, but no shadows → Check whether the light's Shadow Type is "No Shadows," and whether Range reaches across the room
- Light leaks in from beyond the walls → Check for gaps at the wall-ceiling corners. Raising Lightmap Resolution sometimes helps
- Only moving props are dark → Lightmaps only bake onto static objects. You need Light Probes and Reflection Probes
Bonus: Good to Know Up Front
- External models need Generate Lightmap UVs: Unity's Cube has bake-ready UVs from the start, but models imported from Blender and friends often don't. Without turning on "Generate Lightmap UVs" in the model's Import Settings, baking leaves them black or striped
- Bake rough, then raise it: Starting at a high Resolution means a long wait before you notice a mistake. Bake at 20, confirm shadow positions, then raise it
- You can refine just one part: To clean up only a prominent floor, raising that object's Scale In Lightmap is more efficient than raising the global Resolution
- Bleeding and grain aren't brightness problems: Adjusting Intensity won't fix ugly shadows. Suspect overlapping UVs, resolution, or gaps in the walls
- Lightmaps take up space: They cut runtime calculation, but the images themselves count toward your world's size. Decide bake scope and resolution based on your target devices
Summary
Baking calculates light ahead of time and stores it on surfaces.
- Constantly-lit rooms are Baked; leave only lights you want to toggle as Realtime
- Going dark right after switching to Baked is normal. Generate Lighting brightens it
- Three things are required: set the light to Baked, mark surfaces with Contribute GI, and press Generate Lighting
- Baked light can't be turned off at runtime. Move something and you rebake
The question to ask when you're stuck is: "Did I set it to Baked, mark the surfaces, and bake?" Almost always, one of those three is missing.
Once the floor and walls are lit, moving props and avatars are next. Light Probes and Reflection Probes blends objects walking through the room. To add sound too, go to BGM and spatial audio.