[VRChat] Lighting and Baking: Burning Light Into a Small Room

Created: 2026-09-08Last updated: 2026-09-09

Setting one Point Light to Baked, baking it, and getting shadows on the floor. Covers Realtime versus Baked versus Mixed, Contribute GI and Generate Lighting, and why it goes dark right after baking.

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.

A pendant light lit in a small room, casting shadows on 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.

Sponsored


Calculate every frame, or burn it into a photo

Lights have three modes. The difference is when the light gets calculated.

Realtime following runtime changes, compared with Baked using precalculated light on fixed floors and walls
  • 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.

Sponsored

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.

NameSettings
CeilingCube. Position (0, 3.1, 0), Scale (6, 0.2, 6)
CeilingLightPoint 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.

  1. Disable Directional Light in the Hierarchy
  2. Open "Window → Rendering → Lighting" and go to the Environment tab
  3. 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.

Realtime is lit on placement, Baked goes dark once, and Generate Lighting brings shadows

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.

FieldValueReason
Baked Global IlluminationOnCalculate Baked light
LightmapperProgressive GPU (CPU if unavailable)GPU is faster
Lightmap Resolution20Plenty for a small room
Max Lightmap Size1024The cap for one image
Auto GenerateOffBake 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 tryWhat you should see
Disable CeilingLight during PlayFloor and walls stay bright. The baked light remains
Set Lightmap Resolution to 40 and rebakeShadow edges get smoother. It takes longer
Move the stairs and Play without rebakingThe 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.

Baked light stays even when switched off; Realtime goes out

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.

Sponsored

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.

VRChat Notes in this section63