Introduction to Unity3D Lighting
A Unity Light component controls where light comes from, which direction it travels, how far it reaches, and whether Unity calculates it before or during runtime. The four Built-in Render Pipeline light types are Directional, Point, Spot, and Area.
Start with one light whose purpose and affected area are easy to inspect.
- Select GameObject → Light, then choose a light type.
- Set its Mode, Intensity, and available shape controls in the Light Inspector.
- Enable Scene lighting, move or rotate the Light, and inspect the result in both Scene and Game views.
VRChat uses Unity 2022.3.22f1 and the Built-in Render Pipeline. For Android worlds, VRChat recommends baked lighting and Light Probes, warns that realtime lights are very expensive, and recommends keeping lightmap resolution low.
The Four Light Types
| Type | Shape and behavior | Typical scene use |
|---|---|---|
| Directional | Emits parallel light in one direction across the whole scene; position does not control the lighting | Sunlight or moonlight |
| Point | Emits equally in every direction from one position and fades to zero at its Range | Bulbs, lamps, or other local sources |
| Spot | Emits a cone from one position; Range and Spot Angle control the cone | Stage lights, signs, headlights, or focused beams |
| Area | Emits from one side of a rectangle or disc and produces soft illumination | Baked windows, ceiling panels, or broad fixtures |
Area Lights are not available at runtime in Unity’s Built-in Render Pipeline. Unity bakes their contribution into lightmaps.
1. Add and Preview a Light
- Select GameObject → Light.
- Choose Directional Light, Point Light, Spot Light, or Area Light.
- Select the new GameObject.
- Enable the Scene view’s lighting control—the lightbulb button—so the Scene view previews the lighting.
- Adjust the Light through its Inspector or Scene view gizmo.
The Light component exposes different properties for different types. Range appears for Point and Spot lights, while Spot Angle appears only for Spot lights.
2. Use a Directional Light
A Directional Light represents a source at an infinite distance. Its rays are parallel, do not diminish with distance, and illuminate the scene from the same direction.
- Rotate the GameObject to change the light direction.
- Moving the GameObject does not change the illumination unless the Light uses a Cookie.
- Use the forward Z axis to read its direction.
- Assign the intended Directional Light as the Sun Source in the Lighting window when the skybox should respond to it.
New Unity scenes contain a Directional Light by default. Adjust that Light before adding a second sun or moon source.
3. Use a Point Light
A Point Light emits in all directions from its position. Its intensity falls with distance and reaches zero at the configured Range.
- Place the Light at the physical source, such as a lamp or bulb.
- Increase Range until the volume passes through the surfaces that should receive light.
- Set Intensity after the Range covers the intended area.
- Select Baked, Mixed, or Realtime under Mode.
If a Point Light’s range ends exactly at a wall or floor, the surface receives little or no contribution at that boundary.
4. Use a Spot Light
A Spot Light emits a cone along the GameObject’s forward Z axis.
- Range controls how far the cone reaches.
- Spot Angle controls the angle at the base of the cone.
- Position and rotation both affect the result.
- The cone fades toward its edge.
Use the Scene gizmo to place the cone through the surfaces it should illuminate. A cone that stops exactly at a floor or sign can appear to have no effect because its intensity has already fallen to zero there.
5. Use an Area Light
An Area Light is a rectangle or disc that emits from one side of its surface. It produces softer, broader illumination than a single Point or Spot light.
- Create an Area Light.
- Choose Rectangle or Disc in its type controls.
- Position its emitting side toward the receiving surfaces.
- Include the receiving static renderers in the lightmap bake.
- Generate the lighting.
Area Lights must be baked. Do not use them for a source that needs to move or change during play.
6. Select a Light Mode
| Mode | When Unity calculates it | Main limitation |
|---|---|---|
| Baked | Before runtime; direct and indirect contribution is stored in lightmaps and Light Probes | Properties cannot change during runtime |
| Mixed | Some work is baked and some is calculated at runtime | Behavior and cost depend on the scene’s Mixed Lighting mode |
| Realtime | Every frame during runtime | Direct light and realtime shadows add runtime rendering cost |
The mode only behaves as expected when Baked Global Illumination is enabled. If it is disabled, Unity forces Baked and Mixed lights to behave as Realtime lights and shows a warning in the Light Inspector.
For static VRChat scenery, use Baked lights first. Add a Mixed or Realtime light only when its direct light, shadows, or properties must change during play.
7. Configure the Light Inspector
| Property | What it controls |
|---|---|
| Type | Directional, Point, Spot, or Area |
| Range | Maximum distance for Point and Spot lights |
| Spot Angle | Width of a Spot light’s cone |
| Color | Color of the emitted light |
| Mode | Baked, Mixed, or Realtime behavior |
| Intensity | Brightness of the Light |
| Indirect Multiplier | Strength of the Light’s indirect contribution |
| Shadow Type | No Shadows, Hard Shadows, or Soft Shadows |
| Cookie | Texture mask that patterns the emitted light |
| Render Mode | Auto, Important, or Not Important rendering priority |
| Culling Mask | Layers that the Light includes or excludes |
Use Culling Mask when a Light should not affect an entire layer. Use Cookie when a texture mask should form silhouettes or a pattern in the illumination.
8. Review Realtime Shadows
Realtime and Mixed lights expose additional realtime shadow controls:
- Strength changes shadow darkness.
- Resolution changes the shadow-map resolution; higher values require more GPU time and memory.
- Bias offsets shadows away from the Light to reduce false self-shadowing.
- Normal Bias offsets shadow-casting surfaces along their normals.
- Near Plane controls the near clip plane used while rendering shadows.
Change Bias and Normal Bias only enough to remove artifacts. Large offsets can separate a shadow from the object that casts it.
9. Review Built-in Render Priority
For realtime lights in the Built-in Render Pipeline, Render Mode controls rendering priority:
| Render Mode | Unity behavior |
|---|---|
| Auto | Unity selects a method at runtime using nearby light brightness and Quality settings |
| Important | Always renders the Light per pixel |
| Not Important | Uses the faster vertex or object light mode |
Unity recommends reserving Important for the most noticeable effects. This setting does not turn an unnecessary realtime light into baked lighting.
First VRChat Lighting Pass
- Keep the default Directional Light or create one deliberate replacement.
- Rotate it to establish the outdoor or room-wide direction.
- Add Point or Spot lights only at visible fixtures.
- Set static lights to Baked.
- Add Light Probes through spaces occupied by players and movable objects.
- Generate lighting using the workflow in Unity Lighting for VRChat Worlds.
- Test the PC and Android versions separately when the world supports both.
Video Example
This existing tutorial demonstrates a basic VRChat world-lighting pass.
Help! Moving the Directional Light does nothing.
Rotate the Directional Light instead. Its position does not control normal illumination because Unity treats it as an infinitely distant source. The forward Z axis shows its direction.
Help! A Point or Spot light does not reach the floor.
Increase its Range so the light volume passes through the floor or wall instead of ending exactly on it. For a Spot light, also check its position, forward direction, and Spot Angle.
Help! I cannot set an Area Light to Realtime.
Area Lights in Unity 2022.3’s Built-in Render Pipeline are baked-only. Use a Point or Spot light when the source must operate at runtime, then evaluate its performance cost.
Help! My Baked light behaves like a Realtime light.
Open Window → Rendering → Lighting and enable Baked Global Illumination. Unity forces Baked and Mixed lights to behave as Realtime lights while that system is disabled.
Help! Realtime shadows show acne or detached edges.
Adjust Bias and Normal Bias in small increments. Bias can reduce false self-shadowing, but large values can visibly detach a shadow from its caster.
Help! The Android version is too expensive.
Replace realtime lights with Baked lights where possible, remove unnecessary realtime shadows, add Light Probes for movable objects, and keep lightmap resolution low before testing the Android build again.
Official References
- Unity 2022.3 Manual: Lights
- Unity 2022.3 Manual: Types of Light
- Unity 2022.3 Manual: Using Lights
- Unity 2022.3 Manual: Light Modes
- VRChat: Current Unity Version
- VRChat SDK: Getting Started
- VRChat: Android Content Optimization