Search Issue Tracker

Won't Fix

Votes

1

Found in

2021.3.35f1

2022.3.20f1

2023.2.11f1

2023.3.0b8

6000.0.0b11

Issue ID

UUM-64801

Regression

No

[Android] URP Decal Projector fails to render decals at a shorter distance than the value of Draw Distance when built for Android

--

-

Reproduction steps:
1. Open the attached project "ReproProj"
2. Open the “/Assets/Samples/XR Interaction Toolkit/2.4.3/Starter Assets/DemoScene.unity” Scene
3. Switch to Android Platform (File > Build Settings > Android > Switch Platform)
4. Build and Run on Quest
5. Notice that the decal is fully visible
6. Teleport to the far back right corner (use the right controller’s Thumbstick)
7. Observe decal

Expected result: Decal is fully visible
Actual result: The “L” letter of the two lines has been clipped or the decal is not present at all

Reproducible with: 2021.3.35f1, 2022.3.20f1, 2023.2.11f1, 2023.3.0b8

Reproducible with devices:
VLNQA00325, Samsung Galaxy Note10 (SM-N970F), Android 12, CPU: Exynos 9 (9825), GPU: Mali-G76
VLNQA00318, Oneplus OnePlus 7 Pro (GM1913), Android 11, CPU: Snapdragon 855 SM8150, GPU: Adreno (TM) 640
VLNQA00379, Oculus (Quest 2), Android 10, CPU: Snapdragon XR2, GPU: Adreno (TM) 650

Not reproducible with devices:
VLNQA00494 - iPhone 14 Pro Max, 16.3.1 iOS
VLNQA00358 - iPhone 12, 14.1 iOS
VLNQA00392 - iPad (9th generation), 15.0 iOS
VLNQA00310 - iPad Pro 12.9", 13.4.1 iOS

Testing environment: Windows 10 Enterprise 21H2
Not reproducible on: No other environment tested

Notes:
- Does not reproduce with Play Mode, Windows Standalone, and iOS Players
- Reproducible with Oculus XR and OpenXR
- Reproducible with mobile Android devices

  1. Resolution Note:

    Hi there. I've been looking into this issue and identified the cause. Unfortunately I can't fix this for you. What I can suggest you do is to set your camera to use a larger value for the near clip plane as this will mitigate the issue (additionally, consider using a smaller value for your far clip plane as well). Alternatively you can switch to using Vulkan, if that is an option for your project.

    The more technical explanation for this is that we simple do not have enough depth precision on OpenGL ES. The screenspace decal projector relies on the depth buffer to reconstruct the local position of itself in the shader, but the amount of error in this process increases the further away from the camera the decal is. The result is that the values end up being so wrong that this reconstruction is completely unreliable, which causes the decal to clip when it shouldn't. More modern APIs like Vulkan don't have the same issues because they handle depth in a better way.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.