Search Issue Tracker

By Design

Votes

0

Found in

2021.3.30f1

2022.3.10f1

2023.1.13f1

2023.2.0b9

2023.3.0a6

Issue ID

UUM-52921

Regression

No

[Android] Animations based on the _Time variable become choppy when using low-precision calculations

-

Reproduction steps:
1. Open the attached project "ReproProj" with Android Platform
2. Open the “/Assets/Test.unity” Scene
3. Build and Run
4. Let Player run for a couple of minutes

Expected result: Animation runs smoothly
Actual result: Animation shown in Player becomes choppy

Reproducible with: 2021.3.30f1, 2022.3.10f1, 2023.1.13f1, 2023.2.0b9, 2023.3.0a6

Testing environment: Windows 10 Enterprise 21H2

Reproducible on:
VLNQA00318, Oneplus OnePlus 7 Pro (GM1913), Android 11, CPU: Snapdragon 855 SM8150, GPU: Adreno (TM) 640
N/A, Hmd Global  (Nokia G20), Android 13, CPU: Mediatek MT6765G Helio G35 (12 nm), GPU: PowerVR Rogue GE8320

Not reproducible on:
VLNQA00556 - Samsung Galaxy S8 (SM-G950U1), CPU: Snapdragon 835 MSM8998, GPU: Adreno 540, OS: 9
VLNQA00517 - OnePlus 10 Pro 5G (NE2213), CPU: Snapdragon 8 Gen 1 (SM8450), GPU: Adreno 730, OS: 12
VLNQA00231, Huawei HUAWEI Mate 20 Pro (LYA-L29), Android 9, CPU: HiSilicon Kirin 980, GPU: Mali-G76
VLNQA00332, Samsung Galaxy XCover4 (SM-G390F), Android 9, CPU: Exynos 7 Quad 7570, GPU: Mali-T720
VLNQA00325, Samsung Galaxy Note10 (SM-N970F), Android 12, CPU: Exynos 9 (9825), GPU: Mali-G76
N/A, Samsung Galaxy Note9 (SM-N9600), Android 9, CPU: Snapdragon 845 SDM845, GPU: Adreno (TM) 630
N/A, Xiaomi - (Redmi Note 8 Pro), Android 9, CPU: MediaTek Helios G90T MT6785T, GPU: Mali-G76 MC4
N/A, Samsung Galaxy S21 Ultra 5G (SM-G998B), Android 11, CPU: Exynos 2100, GPU: Mali-G78
N/A, Samsung Galaxy Z Flip3 5G (SM-F711B), Android 11, CPU: Snapdragon 888, GPU: Adreno (TM) 660
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
Windows Standalone Player

Notes:
- There are two blocks showing animation, one using high-precision variables (float) and one using lower-precision variables (half). Both animations match at first, but the bottom animation becomes choppier as time goes on. It becomes noticeable after about two minutes, and significantly problematic as time goes on
- The problem is resolved by using higher precision when doing calculations based on Time

  1. Resolution Note:

    by design: even though _Time variable is full precision, the user's code casts the result down to half precision "half2 uv = IN.uv_MainTex + half2(0, _Time.y * _SideSpeed);" resulting in increasing loss of precision as the result value gets bigger.
    The variables specified float/half precision is the minimal required precision, but device drivers can decide to provide higher precision than what was requested, that's why the result can differ among different devices when attempting to use half precision variables.

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.