Search Unity

Bug [Video and Project included] Quest 2 Camera rendering goes crazy if Main Camera does not move

Discussion in 'VR' started by JustinAHS, Mar 11, 2022.

  1. JustinAHS

    JustinAHS

    Joined:
    Feb 18, 2013
    Posts:
    33
    + Unity version: 2020.3.28f1
    + Oculus XR Plugin 1.12.0
    + XR Plugin Management 4.2.1

    1. Create a new default VR project
    2. Project Settings > XR Plug-in Management
    3. Enable Oculus for PC and Android
    4. Open the SampleScene
    5. Set XRRig positon.y = 2
    6. Click on Main Camera
    7. Disable Tracked Pose Driver
    8. Connect Quest 2 to computer
    9. Play in editor
    10. Put on headset
    11. Move head side-to-side, up-and-down
    12. Notice insane screen jumpiness and rendering craziness

    This rendering bug is only seen on the Quest 2 displays. The in-game editor correctly displays the camera as not moving. This still happens even when built and run on the Quest 2.

    Is this a known issue?
    Is there a workaround for this?

    My exact use case does not involve disabling both movement and rotation. But it does involve modifying rotation somewhat. However, this bug is annoying the heck out of me and it makes it look like the framerate is dropping when the framerate is fine, it's just this weird rendering glitchiness.

    When looking at a video of the issue, I can see black being rendered on the edges of the camera vision that corresponds to head movement. It feels like the Quest 2 is "expecting" the game camera to always move when the device moves. So, it modifies what the camera is showing. When the game camera doesn't actually move, it "jumps back" to the game camera position and this produces the rendering glitchiness.

    Video:
    https://imgur.com/a/QoRGKSp

    The jitter isn't super bad in the video but it shouldn't jitter at all.
    And it gets worse when you have 500k - 1M triangles to render.

    Repo:
    https://github.com/AnyhowStep/VR-Jitter

    upload_2022-3-11_15-41-13.png
     
    Last edited: Mar 11, 2022
  2. DevDunk

    DevDunk

    Joined:
    Feb 13, 2020
    Posts:
    5,048
    I think this is because the quest/headset buffers a bit of extra screen. Normally you will catch up to it with a new frame, but now you use the buffer to slightly look up, and then unexpectedly the camera did not move.
    What do you want to accomplish with removing the tracked pose driver? That is the main component for 6dof movement.

    Also, if you're also using Oculus integration asset in the project, update it as well to the latest version
     
  3. JustinAHS

    JustinAHS

    Joined:
    Feb 18, 2013
    Posts:
    33
    As stated, my exact use case does not involve disabling both movement and rotation. But it does involve modifying rotation somewhat. It is a player initiated action and lasts while a button is held down by the player.

    When the button is held down, 6dof becomes 5dof. Don't worry about motion sickness or whatever from the player because I'm the most motion sick person on Earth and I've tested this system a lot. It doesn't produce motion sickness when the screen jittering is low. But the Quest 2's own rendering is causing it to jitter like crazy and the jitter is what is giving me motion sickness, not the actual 5dof feature I implemented.

    For some reason, jitter is low when there are few triangles but grows as the number of triangles does... Even though the camera should not move, and so the scene should not move.

    This repro and video where I remove all rotation and position tracking is just a minimal repro to demonstrate the problem. If I added all of my code and all of my assets, it would be too easy to say that my code is the issue.

    I'm also not using the Oculus integration asset.