# 5.6 OpenXR Passthrough feedback

**URL:** <https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145>\
**Category:** XR Development\
**Tags:** Mixed-Reality, unreal-engine, OpenXR\
**Created:** [July 15, 2025, 11:40am UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145 "2025-07-15T11:40:37Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rectus\_SA](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Rectus\_SA](https://forums.unrealengine.com/u/Rectus_SA)\
**Post date:** [July 15, 2025, 11:40am UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/1 "2025-07-15T11:40:37Z")

</div>

I tried out the [5.6 improvements to OpenXR passthrough](https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/c/2040-openxr-passthrough) using my SteamVR API layer, and (almost) everything seems to work correctly. I implemented `XR_EXT_composition_layer_inverted_alpha` into the layer, and Unreal enables it successfully.

This would be enough for publishing to platforms where you know what features are supported, but not for general use, like PCVR. It would be nice to have better Blueprint support to check for what features are supported and enabled. I suggest adding these nodes:

- `GetEnvironmentBlendMode` for checking the current setting.
- `IsEnvironmentBlendModeSupported` for checking if the runtime supports passthrough.
- `GetPreferredEnvironmentBlendMode` to get the runtime-preferred mode from the top of the list.
- `IsCompositionLayerInvertedAlphaEnabled` to check if the inverted extension is active (so we can use postprocess to invert it otherwise, or only enable passthrough features that don’t use scene alpha).

It would also be a good idea to set up an enum for the the blend modes, instead of using a magic integer.

Also, `xr.OpenXRInvertAlpha` and `xr.OpenXREnvironmentBlendMode` could be added to the project settings OpenXR plugin tab to make them easier to find. It’s very bare at the moment.

---

<div class="post-metadata">

**Author:** ![Rectus\_SA](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Rectus\_SA](https://forums.unrealengine.com/u/Rectus_SA)\
**Post date:** [July 15, 2025, 1:12pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/2 "2025-07-15T13:12:56Z")

</div>

I looked more at it, and found a bug. The engine submits the frames as being alpha-premultiplied (`XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT` not set), but does not perform any premultiplication on the transparent pixels. This results in translucent materials being too bright, and color bleeding around any edges. You should either implement a premultiplication pass, or set the correct flag in the compositions layers.

 ![bild](https://d3kjluh73b9h9o.cloudfront.net/original/4X/6/8/2/682b316f7b2aecdc1dd0b116f1138dd025b811b9.png)

Playing with the image levels also shows that bloom bleeds over, and dithering leaves non-black noise in the transparent areas.

 ![bild](https://d3kjluh73b9h9o.cloudfront.net/original/4X/6/6/2/662120f04d1eb62dac63e2c5b5a4707827395485.png)

Full frames with and without alpha:

 ![passthrough1](https://d3kjluh73b9h9o.cloudfront.net/original/4X/4/8/5/48530e032488364d9f213203271f5ec032b40e37.png)  
 ![passthrough2](https://d3kjluh73b9h9o.cloudfront.net/original/4X/1/4/8/148474821d0e14a4950a85398cd845bc473ebf1c.jpeg)

---

<div class="post-metadata">

**Author:** ![VictorLerp](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/victorlerp/32/738381_2.png) [@VictorLerp](https://forums.unrealengine.com/u/VictorLerp)\
**Post date:** [July 15, 2025, 3:01pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/3 "2025-07-15T15:01:16Z")

</div>

Thanks @Rectus_SA we appreciate the feedback! We got support in last minute for 5.6 and only tested on Android, great to see that it works on PC as well. Will you be sharing your updated SteamVR API layer w. support for XR\_EXT\_composition\_layer\_inverted\_alpha? It would be useful to test with as there’s currently no OpenXR runtime for PC that supports it.

---

<div class="post-metadata">

**Author:** ![Rectus\_SA](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Rectus\_SA](https://forums.unrealengine.com/u/Rectus_SA)\
**Post date:** [July 15, 2025, 4:36pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/4 "2025-07-15T16:36:01Z")

</div>

I already released it a while ago when UE 5.6 released, with [version 0.3.4](https://github.com/Rectus/openxr-steamvr-passthrough/releases/tag/v0.3.4-beta). I didn’t get around to posting about it here until now though.

---

<div class="post-metadata">

**Author:** ![VictorLerp](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/victorlerp/32/738381_2.png) [@VictorLerp](https://forums.unrealengine.com/u/VictorLerp)\
**Post date:** [July 16, 2025, 6:04pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/5 "2025-07-16T18:04:26Z")

</div>

Thanks! We’re going to implement the functions and take a look at the issue(s) you reported for 5.7. The goal is to also implement a passthrough option in the VR Template by default.

---

<div class="post-metadata">

**Author:** ![Rectus\_SA](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Rectus\_SA](https://forums.unrealengine.com/u/Rectus_SA)\
**Post date:** [July 17, 2025, 9:05am UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/6 "2025-07-17T09:05:44Z")

</div>

Thanks, that sounds great.

BTW, I reported a marginally related issue to the bug tracker when working on the layer. The OpenXR composition layer depth seems to get submitted with the far plane (`nearZ`) distance set to the maximum finite float value, rather than +INF. If I understand it correctly Unreal uses a reversed depth buffer with an infinite far plane.

It probably isn’t a huge issue, but it might break any potential code that relies on switching of the planes being infinite or not.

---

<div class="post-metadata">

**Author:** ![VanillaThunda92](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@VanillaThunda92](https://forums.unrealengine.com/u/VanillaThunda92)\
**Post date:** [August 18, 2025, 9:17pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/7 "2025-08-18T21:17:54Z")

</div>

Hey there! I’m working on enabling OpenXR Passthrough in my project and was wondering if the open xr setting changes in the defaultengine.ini needed to be under a specific section heading for the openxr plugin or if they should just be under a custom one? Thank you!

---

<div class="post-metadata">

**Author:** ![Rectus\_SA](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Rectus\_SA](https://forums.unrealengine.com/u/Rectus_SA)\
**Post date:** [August 18, 2025, 10:14pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/8 "2025-08-18T22:14:22Z")

</div>

They all work when put under the `[/Script/Engine.RendererSettings]` heading. Not sure why though, guessing console variables are global and get parsed whenever the heading is parsed.

---

<div class="post-metadata">

**Author:** ![VanillaThunda92](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@VanillaThunda92](https://forums.unrealengine.com/u/VanillaThunda92)\
**Post date:** [August 18, 2025, 10:47pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/9 "2025-08-18T22:47:30Z")

</div>

Ah gotcha, thank you!

---

<div class="post-metadata">

**Author:** ![VictorLerp](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/victorlerp/32/738381_2.png) [@VictorLerp](https://forums.unrealengine.com/u/VictorLerp)\
**Post date:** [August 19, 2025, 3:57pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/10 "2025-08-19T15:57:24Z")

</div>

New BP nodes have been added in [this CL](https://github.com/EpicGames/UnrealEngine/commit/4ae4eaeea82cb480e9d7ae0336cdabe22d088260), and the VR Template has been updated to have a passthrough option in the Menu by default.

---

<div class="post-metadata">

**Author:** ![Rectus\_SA](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Rectus\_SA](https://forums.unrealengine.com/u/Rectus_SA)\
**Post date:** [August 19, 2025, 9:55pm UTC](https://forums.unrealengine.com/t/5-6-openxr-passthrough-feedback/2605145/11 "2025-08-19T21:55:53Z")

</div>

That looks great. I’ll see if I can try it out tomorrow.
