# Mirrors in VR

**URL:** <https://forums.unrealengine.com/t/mirrors-in-vr/1784114>\
**Category:** Showcase\
**Tags:** mirror, unreal-engine, CPP\
**Created:** [April 2, 2024, 6:35pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114 "2024-04-02T18:35:25Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![emil.je](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@emil.je](https://forums.unrealengine.com/u/emil.je)\
**Post date:** [April 2, 2024, 6:35pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/1 "2024-04-02T18:35:25Z")

</div>

Hi everyone,

I’ve just released an open source project for realistic mirrors in VR! No raytracing required, and you can add as many mirrors as you want. Currently there is no recursive reflections, so be careful with the placement 🙂 You can download the project from GitHub :[GitHub - emilje/UE5\_Mirrors](https://github.com/emilje/UE5_Mirrors)  
There are a few handy knobs you can adjust to hopefully get the performance and look you are after.

Hope someone finds this useful!

---

<div class="post-metadata">

**Author:** ![Ceriatinho](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/ceriatinho/32/476121_2.png) [@Ceriatinho](https://forums.unrealengine.com/u/Ceriatinho)\
**Post date:** [July 25, 2024, 6:37pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/2 "2024-07-25T18:37:44Z")

</div>

Thank you, this was really helpful

---

<div class="post-metadata">

**Author:** ![HoutonBosta](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@HoutonBosta](https://forums.unrealengine.com/u/HoutonBosta)\
**Post date:** [May 6, 2025, 1:21pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/3 "2025-05-06T13:21:20Z")

</div>

Thank you so much for your sharing! May I ask what kind of headset you are using? I’m using the Quest 2. I added the MetaXR plugin based on your project, but it doesn’t seem to be compatible 😔

---

<div class="post-metadata">

**Author:** ![emil.je](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@emil.je](https://forums.unrealengine.com/u/emil.je)\
**Post date:** [June 10, 2025, 4:49pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/5 "2025-06-10T16:49:45Z")

</div>

I was using meta quest 3. I don’t think meta xr should be required to make this work? As long as you can use quest 2 within unreal engine, the code should work?

---

<div class="post-metadata">

**Author:** ![ajinkya\_x](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/ajinkya_x/32/1023283_2.png) [@ajinkya\_x](https://forums.unrealengine.com/u/ajinkya_x)\
**Post date:** [June 11, 2025, 2:32pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/6 "2025-06-11T14:32:22Z")

</div>

Looks useful 😃

---

<div class="post-metadata">

**Author:** ![francoaichino](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@francoaichino](https://forums.unrealengine.com/u/francoaichino)\
**Post date:** [September 4, 2025, 8:57pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/7 "2025-09-04T20:57:55Z")

</div>

What version is it compatible with?

---

<div class="post-metadata">

**Author:** ![emil.je](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@emil.je](https://forums.unrealengine.com/u/emil.je)\
**Post date:** [September 24, 2025, 12:55pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/8 "2025-09-24T12:55:12Z")

</div>

I don’t remember which version I used when I made this. But most likely you should be able to open it with a newer ue version. I think I was using 5.2 or 5.3 when making this.

---

<div class="post-metadata">

**Author:** ![Corysia](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/corysia/32/1112965_2.png) [@Corysia](https://forums.unrealengine.com/u/Corysia)\
**Post date:** [October 18, 2025, 12:26am UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/9 "2025-10-18T00:26:36Z")

</div>

5.3 is what you have on GitHub. I tried it out today with my Quest 2 as a standalone app. It worked well visually, but it needs tuning for a Quest deployment. It can’t maintain 72fps on a Q2.

The project crashes the Editor on opening in 5.6.

```auto
[2025.10.17-17.26.39:855][22]LogTcpMessaging: Started Connection to '127.0.0.1:6666'
[2025.10.17-17.26.59:749][39]LogVulkanRHI: Error: VulkanRHI::vkWaitSemaphoresKHR(Device->GetInstanceHandle(), &WaitInfo, (uint64_t)Timeout) failed, VkResult=-4
 at D:\build\++UE5\Sync\Engine\Source\Runtime\VulkanRHI\Private\VulkanSubmission.cpp:409 
 with error VK_ERROR_DEVICE_LOST
[2025.10.17-17.26.59:749][39]LogVulkanRHI: Error: Shader diagnostic messages and asserts:

	Device: 0, Queue Graphics:
		No shader diagnostics found for this queue.

[2025.10.17-17.26.59:749][39]LogVulkanRHI: Error: 
DEVICE FAULT REPORT:
* Description: 
* Address Info: 
    - VK_DEVICE_FAULT_ADDRESS_TYPE_INSTRUCTION_POINTER_FAULT_EXT : 0x0000000500A337A0 (range:0x0000000500A337A0-0x0000000500A337AF)
    - VK_DEVICE_FAULT_ADDRESS_TYPE_READ_INVALID_EXT : 0xFFFFFFFFF1E1F000 (range:0xFFFFFFFFF1E1F000-0xFFFFFFFFF1E1FFFF)
* Vendor Info: 
* Vendor Binary Size: 29624

[2025.10.17-17.26.59:749][39]LogRHI: Error: Active GPU breadcrumbs:

	Device 0, Pipeline Graphics: (In: 0x800006e8, Out: 0x800006e7)
		(ID: 0x800006c6) [Active]	Frame 39
		(ID: 0x800006c9) [Active] SceneRender - ViewFamilies
		(ID: 0x80000712) [Active] RenderGraphExecute - /ViewFamilies
		(ID: 0x800006ce) [Active] Scene
		(ID: 0x800006d9) [Active] HZB
		(ID: 0x800006da) [Active] BeginOcclusionTests
		(ID: 0x80000718) [Active] BeginOcclusionTests
		(ID: 0x80000719) [Active] ViewOcclusionTests 0
		(ID: 0x8000071e) [Active] IndividualQueries
		(ID: 0x800006f2) [Active] EditorPrimitives
		(ID: 0x800006f5) [Active] PostRenderOpsFX
		(ID: 0x800006f6) [Active] FXSystemPostRenderOpaque
		(ID: 0x8000071a) [Active] GPUParticles_PostRenderOpaque
		(ID: 0x800006f7) [Active] Translucency
		(ID: 0x800006f9) [Active] RenderTranslucency
		(ID: 0x800006fe) [Active] PostProcessing
		(ID: 0x800006ff) [Active] EditorSelectionOutlines
		(ID: 0x80000700) [Active] OutlineDepth 1628x1063
		(ID: 0x80000701) [Active] CompositeEditorPrimitives 1628x1063 MSAA=1
		(ID: 0x80000714) [Active] RenderViewEditorPrimitives 1628x1063 msaa=1
		(ID: 0x8000071f) [Active] RenderViewEditorForegroundPrimitives 1628x1063 msaa=1
		(ID: 0x80000720) [Active] RenderViewEditorForegroundTranslucentPrimitives 1628x1063 msaa=1
		(ID: 0x80000721) [Active] RenderGraphExecute - CanvasRenderThreadScope
		(ID: 0x80000722) [Active] SceneRender - HitProxies
		(ID: 0x80000736) [Active] RenderGraphExecute - /HitProxies
		(ID: 0x80000726) [Active] GPUScene.UploadDynamicPrimitiveShaderDataForView
		(ID: 0x80000727) [Active] UpdateGPUScene NumPrimitiveDataUploads 3
		(ID: 0x80000728) [Active] BuildRenderingCommands(Culling=On)
		(ID: 0x80000737) [Active] RenderGraphExecute - CanvasRenderThreadScope

[2025.10.17-17.26.59:749][39]LogWindows: FPlatformMisc::RequestExit(1, FVulkanDynamicRHI.TerminateOnGPUCrash)
[2025.10.17-17.26.59:749][39]LogWindows: FPlatformMisc::RequestExitWithStatus(1, 0, FVulkanDynamicRHI.TerminateOnGPUCrash)
[2025.10.17-17.26.59:749][39]LogCore: Engine exit requested (reason: Win RequestExit)

```

---

<div class="post-metadata">

**Author:** ![emil.je](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@emil.je](https://forums.unrealengine.com/u/emil.je)\
**Post date:** [December 9, 2025, 1:42pm UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/10 "2025-12-09T13:42:01Z")

</div>

I was able to get 72fps with a single mirror using Q3, Im not sure what the hardware difference is between 2 and 3.There should be “bIsMobileMultiView” that you can toggle which then cuts the resolution to appropriate size for mobile devices and which worked fine for my Quest 3. I will try to get it running in 5.7 soon and see if I run into the same issues.

---

<div class="post-metadata">

**Author:** ![TheGabmeister](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/thegabmeister/32/728761_2.png) [@TheGabmeister](https://forums.unrealengine.com/u/TheGabmeister)\
**Post date:** [February 14, 2026, 6:03am UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/11 "2026-02-14T06:03:53Z")

</div>

I got it working on UE 5.7.3 standalone Quest 3. Runs at 60fps.

To prevent the crash when opening the project, open DefaultEngine.ini and replace the following:

```auto
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_Vulkan
+VulkanTargetedShaderFormats=SF_VULKAN_SM6

```

with

```auto
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 
DefaultGraphicsRHI=DefaultGraphicsRHI_Default

```

In project settings, enable Mobile Multi-view and Substrate. Also, add this extra line in the .ini,  
`r.DistanceFields=0`  
Which improves performance a lot. Not sure why that is even though Generate Mesh Distance Fields is disabled.

---

<div class="post-metadata">

**Author:** ![zoe\_wxq](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@zoe\_wxq](https://forums.unrealengine.com/u/zoe_wxq)\
**Post date:** [February 20, 2026, 8:49am UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/12 "2026-02-20T08:49:51Z")

</div>

> [@TheGabmeister](#):
>
> I got it working on UE 5.7.3 standalone Quest 3. Runs at 60fps.

I got it working on UE 5.8 standalone Quest 3s. Runs at 60fps.

---

<div class="post-metadata">

**Author:** ![Dspazio](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/dspazio/32/1017657_2.png) [@Dspazio](https://forums.unrealengine.com/u/Dspazio)\
**Post date:** [March 17, 2026, 9:07am UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/13 "2026-03-17T09:07:46Z")

</div>

Hi! thank you so much for sharing your project! I’ve put it to work it on my own project using 5.6.1 meta’s fork for Q3 standalone. I’m experiencing severe fps drops but I’m just starting to fiddle with this. Since “stereoscopy” is a “nice to have, not a requirement” feature on my project, Is there any advantage over the classic scene capture 2d component?

---

<div class="post-metadata">

**Author:** ![emil.je](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@emil.je](https://forums.unrealengine.com/u/emil.je)\
**Post date:** [May 16, 2026, 11:33am UTC](https://forums.unrealengine.com/t/mirrors-in-vr/1784114/14 "2026-05-16T11:33:28Z")

</div>

This is using scene capture components, and you can actually toggle the mirror to use only 1 capture component per mirror to get better performance. At certain distances there is barely any difference.
