How to make your own mirrors in Unity
Mirrors are a popular effect in Unity environments, especially in social and avatar-focused spaces. A basic mirror setup usually works by rendering a camera view into a render texture, then displaying that texture on a flat material.
The easiest way to understand it is:
- A camera captures a view.
- That view is written to a render texture.
- A material displays that render texture.
- A flat object uses the material and appears to act like a mirror.
This can look impressive, but it is not free. A mirror asks Unity to render another view of the scene, so it should be treated as a feature with real performance cost.
Build one small mirror first, prove the render texture works, then decide whether the visual payoff is worth the performance cost.
- Create the surface: Use a simple plane or quad where the mirror should appear.
- Create the render texture: This is the live image target the mirror material will display.
- Connect the camera: Point a camera at the scene and set its target texture.
- Apply the material: Put the render texture on a material and assign it to the mirror surface.
- Test cost early: Check performance before duplicating mirrors or adding UI controls.
Mirrors are one of the most expensive social-world features because they render another view of the scene, often including avatars. In VRChat, give users a clear mirror toggle and avoid treating realtime mirrors as free decoration.
Video Companion
This video is a direct fit for this page because it shows a world-specific mirror setup route instead of treating mirrors as a generic Unity effect in isolation.
Unity mirror setup video
Why it belongs here: it gives a practical example of where mirrors, UI, and performance tradeoffs collide in an actual VRChat world workflow.
What a Basic Mirror Setup Needs
At a simple level, a mirror setup usually involves:
- A flat mirror surface.
- A camera.
- A render texture.
- A material using that texture.
- Optional UI or trigger logic to enable and disable the mirror.
The mirror object itself is usually just geometry with a special material. The real mirror effect comes from the rendered camera image.
Choose the Right Kind of Mirror
Before building anything, decide what the mirror is meant to do.
| Mirror use | Better approach | Why |
|---|---|---|
| Avatar checking in a social room | Realtime mirror with an obvious toggle | Players expect to inspect themselves, but the mirror should not be forced on everyone. |
| Decorative shiny surface | Fake reflection, baked texture, cubemap, or simple glossy material | A decorative reflection often does not need to render avatars or the whole scene again. |
| Small dressing area | One controlled realtime mirror | Easier to test, easier to optimize, and easier for users to understand. |
| Large walls, floors, or many reflective panels | Avoid realtime mirrors unless the scene is designed around them | Large active mirror areas can become expensive very quickly. |
If the mirror is only there to make a room look polished, a fake reflection is usually the better choice. Save realtime mirrors for places where the player actually benefits from the live view.
Why Mirrors Need Care
Mirrors can affect performance because they add another rendered view of the scene.
That means:
- The more expensive the reflected scene is, the more expensive the mirror can become.
- The higher the render texture resolution is, the more the mirror can cost.
- The more mirrors are active at once, the easier it is to hurt performance.
- The more avatars, realtime lights, particles, and transparent effects are visible, the less forgiving the mirror becomes.
For beginners, the most important practical rule is simple: test mirrors carefully before you design a whole room around them.
Mirror Settings That Matter Most
These settings usually make the biggest difference between a usable mirror and a mirror that looks fine in the editor but hurts the world in practice.
| Setting | Beginner-safe starting point | What to watch |
|---|---|---|
| Render texture resolution | Start modest, then raise only if needed | Higher resolution makes the mirror sharper, but costs more memory and rendering time. |
| Culling mask | Render only the layers the mirror needs | Do not make the mirror camera render hidden helpers, effects, or distant scenery by accident. |
| Clipping planes | Keep the far clip as short as the scene allows | Long camera distance can make the mirror render far more of the world than the user notices. |
| Mirror default state | Default off in busy rooms | Users can enable it when they want it, instead of paying the cost all the time. |
| Number of active mirrors | One active mirror area at first | Multiple active mirrors multiply the chance of performance problems. |
Treat these as tuning controls, not decoration. A mirror that renders less unnecessary content is usually a better mirror.
A Good Beginner Workflow
If you want to create a simple mirror:
- Start in a small test scene.
- Create the mirror surface.
- Create a render texture.
- Create or assign a material that uses the render texture.
- Add a camera that renders into the texture.
- Apply the material to the mirror surface.
- Test the result from the player position.
- Add a toggle only after the mirror works.
The reason to use a test scene first is that mirror work can be confusing if you try to set it up directly inside a large complex environment.
Step 1: Create the Mirror Surface
The mirror surface is usually a simple flat mesh, such as a plane or a quad, depending on the style of the project.
This object should:
- Face the correct direction.
- Sit in the correct location.
- Be sized to match the visual mirror area.
- Use a material that is easy to identify later.
The geometry itself is simple. The important part is the material and render setup behind it.
Step 2: Create a Render Texture
The render texture is where the camera output will be stored. It acts like a live image target that the material can display.
Beginners do not need to memorize every render texture setting immediately. The useful concept is:
- The camera writes to the render texture.
- The mirror material reads from it.
- The render texture resolution affects quality and cost.
Start with a modest resolution while testing. Increase quality only if the mirror is important enough to justify the cost.
Name the render texture clearly, such as RT_Mirror_MainRoom, so you can tell it apart from other textures later. Mirror issues are much easier to debug when the camera, render texture, and material all have matching names.
Step 3: Set Up the Mirror Material
Create or configure a material so it uses the render texture as its displayed image. That material is then assigned to the mirror surface.
At this point, the surface is ready to show the rendered view once the camera is set up.
If the mirror appears upside down, stretched, or offset, check the material UVs, the surface orientation, and whether the texture needs to be flipped in the shader or setup you are using. Do this before changing a lot of camera settings, because the camera may already be rendering correctly.
Step 4: Add a Camera for the Mirror View
The mirror camera is responsible for generating the reflected image.
The camera should:
- Be positioned and configured appropriately for the mirror effect.
- Render to the render texture instead of the normal screen output.
- Avoid rendering layers or objects the mirror does not need.
- Use clipping settings that keep the mirror view from rendering unnecessary distance.
This is where mirror setups often become more technical, because the camera behavior has to match the intended reflected result well enough to feel convincing.
In VRChat worlds, the culling mask is especially important. If you have organized your world with sensible Unity layers and tags, you can keep the mirror camera focused on the objects it actually needs to show. For VRChat-specific layer behavior, also review Unity layers in VRChat.
Step 5: Add Controls Before Production Use
For VRChat-style social spaces, a mirror should usually have an obvious on/off control. Players often want mirrors, but not every player wants the performance cost active all the time.
Good control patterns include:
- A button near the mirror.
- A local-only toggle if the mirror is just for personal use.
- A low-quality and high-quality option if the world has enough users to justify it.
- A default-off mirror in busy rooms.
Test in a Simple Controlled Scene First
Before using mirrors in a production scene, test:
- Whether the surface displays correctly.
- Whether the camera output looks reasonable.
- Whether the render texture resolution is acceptable.
- Whether the performance impact is acceptable.
- Whether the mirror still behaves well when avatars or animated objects are nearby.
This matters because mirror setups can fail visually or become expensive without obvious warning if you only judge them in a busy full environment.
VRChat Mirror Checklist
Before you call the mirror finished, check:
- The mirror can be turned off by the user.
- The mirror starts off if it is in a busy or public-facing area.
- The render texture resolution is no higher than it needs to be.
- The mirror camera only renders useful layers.
- The mirror still behaves acceptably with avatars nearby.
- The mirror does not sit directly in the most crowded part of the room unless that is intentional.
- The world still fits your performance goals after the mirror is enabled.
If a mirror only works well in an empty test scene, it is not finished yet. Test it in the kind of room where players will actually use it.
Common Beginner Problems
The mirror surface is blank or not updating.
Check that the camera target texture is assigned, the material uses the same render texture, and the mirror surface is using that material rather than a duplicate or older material.
The mirror shows the wrong angle or view.
The mirror camera position, rotation, clipping planes, or culling mask may not match the intended reflected area. Test in an empty scene first so camera setup is easier to see.
The mirror is too expensive.
Lower the render texture resolution, reduce what the mirror camera renders, add an on/off toggle, and avoid placing active mirrors in the busiest areas of the world.
The mirror looks useful in Unity but feels bad in VRChat.
Test with avatar-heavy use in mind. Avatars, particles, transparency, and realtime lighting can make a mirror much more expensive than it looked in a quiet editor scene.
The mirror is showing objects that should not be visible.
Check the mirror camera culling mask and your object layers. The mirror camera may be rendering helper objects, hidden effects, or distant scene layers that the player does not need to see.
Good Beginner Advice
- Start with one small test mirror.
- Confirm the effect works before scaling it up.
- Test performance as well as visuals.
- Avoid treating mirrors as free decorative effects.
- Prefer a controlled mirror area over mirrors scattered everywhere.
- Use clear object names so the mirror surface, camera, render texture, and material are easy to trace.
- Decide whether the mirror is functional or decorative before you spend time optimizing it.
Helpful follow-up pages
- Rendering Photos in Unity
- How to apply a texture to an object
- Creating and Managing Materials
- Unity3D Layers and Tags
- Optimizing Unity3D Worlds for Performance
- Unity Performance Basics for VRChat Worlds
- Unity Layers in VRChat
- World Optimization Checklist
- VRChat World Creation Guide
Final Advice
Mirrors are a good example of a feature that can look impressive but also carries technical cost. For beginners, the safest approach is:
- Understand the basic camera -> render texture -> material workflow.
- Test in a small scene first.
- Keep the setup controlled.
- Only expand it if the result is worth the cost.
References
- Official/source reference: Unity Camera - reviewed 2026-05-26.
- Official/source reference: Unity Render Texture - reviewed 2026-05-26.
- Official/source reference: Unity Layers - reviewed 2026-05-26.
- Official/source reference: VRChat World Optimization Checklist - reviewed 2026-05-26.
- Local note: Unity editor behavior and VRChat platform guidance can change; keep future version, module, and platform claims tied to these sources.