[VRChat] Placing a Mirror: Toggling It On and Narrowing What It Reflects

Created: 2025-12-19Last updated: 2026-09-09

Placing the SDK's mirror and making it toggleable with a button. Covers why mirrors are expensive, narrowing the reflected layers, and keeping it off by default.

A mirror for checking your avatar is a staple of social worlds. Place it wrong, though, and the whole world gets heavy at once.

A mirror isn't a photograph. It draws the world a second time behind the scenes — the entire time it's visible.

This article places a mirror and covers toggling it with a button and narrowing what it reflects.

A mirror leaned against a room's wall, showing your reflection

What You'll Learn

  • Why mirrors are expensive
  • How to narrow the reflected layers
  • Building it off by default and revealed by a switch
  • What causes a mirror to show nothing

Start from having tried toggling with a button.

Sponsored


A mirror draws the world a second time

What you see inside a mirror isn't a prepared image.

Without a mirror it draws once; with one, twice

It redraws the view from the mirror's position, on the spot. So while a mirror is in view, the world is drawn twice. In VR that's calculated for each eye, adding still more.

That settles the policy for placing mirrors from the start.

  1. Off by default: nothing needs to be reflected from the moment someone walks in. Reveal it with a switch
  2. Narrow what it reflects: you don't need everything. Reflecting only people is often enough
  3. At most one at a time: avoid a mirror per room, all left on

Following those three keeps a world plenty light even with mirrors.

It isn't that beautiful reflections are expensive. The number of draws increases, so it gets heavy. That's why narrowing what's reflected makes it lighter.

Sponsored

Hands-On: Build a mirror revealed by a switch

Place a mirror by the wall and make a nearby button reveal and hide it.

1. Place the mirror

Create a "3D Object → Quad" and name it RoomMirror. A Quad is a single flat panel.

FieldSetting
Position(0, 1.6, 2.8)
Rotation(0, 180, 0)
Scale(1.6, 2.4, 1)

That stands a 1.6m by 2.4m mirror against the back wall. Rotation Y = 180 faces it into the room.

A mirror facing the wrong way reflects the wall's interior and goes pitch black. Check in the Scene view.

Add VRC Mirror Reflection via "Add Component." That makes it a mirror.

Delete or disable the Mesh Collider on the Quad. You don't need to bump into a mirror.

2. Turn it off by default

Select RoomMirror and uncheck the box at the top left of the Inspector to disable it.

That's the base state. People entering the world stand in a room with no mirror.

3. Build the switch

Create MirrorButton as a "3D Object → Cube" at (1.2, 1, 2), Scale (0.3, 0.3, 0.3) — beside the mirror.

In Assets/Scripts, choose "Create → U# Script" and make MirrorToggle.

using UdonSharp;
using UnityEngine;

[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class MirrorToggle : UdonSharpBehaviour
{
    [SerializeField] private GameObject mirrorObject;

    private bool isOn;

    private void Start()
    {
        // Always start hidden
        isOn = false;
        Apply();
    }

    public override void Interact()
    {
        isOn = !isOn;
        Apply();
        Debug.Log("[MirrorToggle] mirror=" + isOn);
    }

    private void Apply()
    {
        if (mirrorObject != null) mirrorObject.SetActive(isOn);
    }
}

Turning it off in Start() matters. Even if you save with it enabled in the Inspector, it starts hidden at runtime.

Add a Udon Behaviour to MirrorButton and set MirrorToggle. Drag RoomMirror into Mirror Object and set Interaction Text to Show mirror.

4. Confirm

Press Play and press the button.

ActionExpected result
Right after enteringThere's no mirror
Press the buttonThe mirror appears and reflects you
Press againThe mirror disappears
Revealing and hiding a mirror with a button

Toggle it with Stats open and the numbers change visibly (covered in making rendering lighter). It gives you a feel for what a mirror costs.

Narrowing what it reflects

What the mirror reflects is decided by Reflect Layers.

The combination of reflected layers changes what shows in the mirror

Reflect everything and the room, the furniture, and the particles all get drawn twice. Narrowing this makes a big difference.

The practical choice comes in two stages.

For a mirror that only shows people, select just Player and MirrorReflection. If checking your avatar is the goal, that's enough. The background doesn't reflect, and you see yourself clearly.

To reflect the room too, add Default. Furniture and walls start showing.

In both cases, leave the Particle, UI, and Pickup layers out. Reflecting them means nothing and only adds load.

MirrorReflection is a layer that exists purely for mirror reflection. Parts of avatars get placed on it, so include it when reflecting people.

Combining settings that lower the load

Turning on Disable Pixel Lights also skips light calculation inside the mirror. The visual difference is small and the load drops.

When placing multiple mirrors, build it so that pressing one hides the others. The easy route is reusing the same script so each button reveals only its own mirror.

Switching between multiple mirrors with buttons
Sponsored

Common Pitfalls

  • The mirror is pitch black → Check whether Reflect Layers is empty. Or the mirror faces the wall
  • Nothing reflectsRoomMirror is still disabled, or VRC Mirror Reflection isn't attached
  • You don't reflect → Check that Reflect Layers includes Player and MirrorReflection
  • It suddenly gets heavy → That's the moment the mirror enters view. Keep it off by default and reveal it when needed
  • You bump into the mirror → The Quad's Mesh Collider is still there. Delete or disable it

Bonus: Good to Know Up Front

  • On Quest and phones, consider not placing one: Device performance is limited, so avoid mirrors or always place them off. Covered in gathering in one room from PC and Android
  • Don't put a mirror facing the entrance: Seeing a mirror on arrival makes people look at their own avatar instead of the room. Placing it at the edge reads more naturally as a space
  • This is local logic: The switch here reveals the mirror only on the presser's screen. Showing it to everyone requires synchronization, though letting people reveal and hide it individually is often the kinder design
  • Modest size is fine: Tall enough for a full-body reflection is enough. A wall-sized mirror looks impressive and widens the reflected area to match
  • A timer that hides it automatically works too: Hiding it after a set time prevents people forgetting to. The mechanism in calling logic after a delay applies

Summary

Mirrors are useful, and placing them takes a policy.

  • A mirror draws the world a second time behind the scenes. That's why it's expensive
  • Keep it off by default and reveal it with a switch
  • Narrow what it reflects with Reflect Layers. Player and MirrorReflection for people only
  • At most one showing at a time

The question to ask before placing one is: "Does this mirror need to be reflecting at all times?" In most cases, the answer is no.

To review rendering weight overall, go to making rendering lighter. To add holdable props, go to a flashlight you can hold.

VRChat Notes in this section63