Search Unity

  1. Check out the Unite LA keynote for updates on the Visual Effect Editor, the FPS Sample, ECS, Unity for Film and more! Watch it now!
    Dismiss Notice
  2. The Unity Pro & Visual Studio Professional Bundle gives you the tools you need to develop faster & collaborate more efficiently. Learn more.
    Dismiss Notice
  3. Improved Prefab workflow (includes Nested Prefabs!), 2D isometric Tilemap and more! Get the 2018.3 Beta now.
    Dismiss Notice
  4. Want more efficiency in your development work? Sign up to receive weekly tech and creative know-how from Unity experts.
    Dismiss Notice
  5. Improve your Unity skills with a certified instructor in a private, interactive classroom. Watch the overview now.
    Dismiss Notice
  6. Want to see the most recent patch releases? Take a peek at the patch release page.
    Dismiss Notice

Physics timestep handling broken/different on mobile?

Discussion in 'Physics' started by bluescrn, Apr 11, 2018.

  1. bluescrn

    bluescrn

    Joined:
    Feb 25, 2013
    Posts:
    435
    After struggling for ages with a juddery camera (tracking a rigidbody, juddering awfully when framerate fluctuated), I did an experiment....



    In this video, there's 3 spheres moving at 20 units/sec along the X axis.

    Green Sphere: RigidBody, Velocity set on Start(). Interpolation on. Zero drag or gravity
    Red Sphere: Moved in Update(), using Time.deltaTime*speed. Camera is attached to this one.
    Blue Sphere: RigidBody2D, Velocity set on Start(). Interpolation on. Zero drag or gravity

    The background is static, and the intentionally-expensive particle effects are purely to make the framerate fluctuate - and are turned on/off randomly every 30 frames. A varying framerate is required to reproduce this issue (and a varying framerate is pretty normal on a real-world Android project...)

    All physics settings and Time settings left at their new project defaults.

    In the editor, this performs flawlessly. As expected, the spheres don't move relative to each other. The rigidbodies lag behind slightly due to interpolation, but remain completely static relative to the red sphere and camera.

    But it doesn't behave like that on mobile...

    As you can see here, the green sphere judders all over the place (root cause of my camera woes). But interestingly, the 2D rigidbody is fine.

    It looks like the 3D physics update (+interpolation) is somehow using different timesteps?

    What the heck is going on here?... It's making it vastly harder than it should be to have a camera track a rigidbody when framerate fluctuates (as usually happens on low-mid spec mobile....) I'm in 2017.3.1p4 at the moment, but maybe I'll retry the experiment in some older versions and see if there's any difference...

    (Android Tablet in the video is a Pixel C - and while I haven't run this experiment on iOS yet, I'm fairly confident that I'd get the same results, given the behaviour of my other project... Also, yes, the editor build framerate wasn't dropping as low as on the tablet - but I have tested on PC with lower framerates by using more extreme particle effects, and it still works fine)

    Edit: Tried a couple more Unity releases:

    Problem exists on 2017.2.2p2
    Judder-free on 2017.1.3p2
     
    Last edited: Apr 11, 2018
  2. Edy

    Edy

    Joined:
    Jun 3, 2010
    Posts:
    1,231
    bluescrn likes this.
  3. bluescrn

    bluescrn

    Joined:
    Feb 25, 2013
    Posts:
    435
    Yeah, looks like the same issue, just tried a couple of older releases, and 2017.1.3p2 seems to work well
     
  4. Dennis_eA

    Dennis_eA

    Joined:
    Jan 17, 2011
    Posts:
    249
    Still waiting for this to be fixed in LTS :confused::(

    Can people confirm that atleast in 2018.2 the fix does actually work? thanks
     
  5. ElasticSea

    ElasticSea

    Joined:
    Aug 10, 2016
    Posts:
    3
    Seems to be fixed in 2018.2.0f1. Hope they'll patch it in the LTS release too.
     
    Dennis_eA likes this.
  6. bluescrn

    bluescrn

    Joined:
    Feb 25, 2013
    Posts:
    435
    I don't think I've still got that test project, but there weren't any extreme sizes involved - it was probably just the standard sphere at 1.0 scale. (I first noticed the issue on an iOS build of a little prototype with a humanoid-sized object, a little under 2m high, moving at fairly high speeds)