Summary
After updating to visionOS 26, we’ve encountered severe transparency rendering issues in RealityKit that did not exist in visionOS 2.6 and earlier.
These regressions affect applications that dynamically control scene opacity (via OpacityComponent).
Our app renders ultra-realistic apartment environments in real time, where users can walk or teleport inside 3D spaces. When the user moves above a speed threshold, we apply a global transparency effect to prevent physical collisions with real-world objects.
Everything worked perfectly in visionOS 2.6 — the problems appeared only after upgrading to 26.
Scene Setup Overview
- The environment consists of multiple USDZ models (e.g., architecture, rooms, furniture).
- We manage LODs manually for performance (e.g., walls and floors always visible in full-res, while rooms swap between low/high-res versions based on user position and field of view).
- Transparency is achieved using
OpacityComponent, applied dynamically when the user moves. - Some meshes (e.g., portals to skyboxes, glass windows) use alpha materials
- We also use OcclusionMaterials to prevent things to be seen through walls when scene is transparent
Observed Behavior by Scenario
(I can share a video showing the results of each scenario if needed.)
Scenario 1 — Severe Flickering (Root Opacity)
Setup:
OpacityComponentapplied to the root entity- NO
ModelSortGroupComponentused
Symptoms:
- Strong flickering when transparency is active
- Triangles within the same mesh render at inconsistent opacity levels
- Appears as if per-triangle alpha sorting is broken
Workaround:
- Moving the
OpacityComponentfrom the root to each individual USDZ entity removes the per-triangle flicker
Pros:
- No conflicts with portals or alpha materials
Scenario 2 — Partially Stable, But Alpha Conflicts
Setup:
OpacityComponentapplied per USDZ entityModelSortGroupComponent(planarUIAlwaysBehind)applied to portal meshes- Other entities have NO ModelSortGroupComponent
Symptoms:
-
Frequent alpha blending conflicts:
- Transparent surfaces behind other transparent surfaces flicker or disappear
- Example: Wine glasses behind glass doors — sometimes neither is rendered, or only one
- Even opaque meshes behind glass flicker due to depth buffer confusion
- Alpha materials sometimes render portals or the real world behind them, ignoring other geometry entirely
Analysis:
- Appears related to internal changes in alpha sorting or depth pre-pass behavior introduced in visionOS 26
Pros:
- Most stable setup so far
Cons:
- Still unreliable when
OpacityComponentis active
Scenario 3 — Layer Separation Attempt (Regression)
Setup:
-
Same as Scenario 2, but:
- Entities with alpha materials moved to separate USDZs
- Explicit
ModelSortGroupComponentorder set (alpha surfaces rendered last)
Symptoms:
- Transparent surfaces behind other transparent surfaces flicker or disappear
- Depth is completely broken when there's a large transparent surface
- Alpha materials sometimes render portals or the real world behind them, ignoring other geometry entirely
Workaround Attempt:
- Re-ordering and further separating models did not solve it
Pros:
- None — this setup makes transparency unusable
Conclusion
There appears to be a regression in RealityKit’s handling of transparency and sorting in visionOS 26, particularly when:
OpacityComponentis applied dynamically, and- Scenes rely on multiple overlapping transparent materials.
These issues did not exist prior to 26, and the same project (no code changes) behaves correctly on previous versions.
Request
We’d appreciate any insight or confirmation from Apple engineers regarding:
- Whether alpha sorting or opacity blending behavior changed in visionOS 26
- If there are new recommended practices for combining
OpacityComponentwith transparent materials - If a bug report already exists for this regression
Thanks in advance!