ValveSoftware / openxr_engine_plugins

Contains Valve-provided plugins for using OpenXR extensions with various game engines
BSD 3-Clause "New" or "Revised" License
50 stars 15 forks source link

[OpenXR] Black screen in Unity when using SteamVR with multiple tracked devices (worked fine before with just OpenVR) #6

Open ROBYER1 opened 2 years ago

ROBYER1 commented 2 years ago
  1. What happened

This also affects any Unity game I tested that uses OpenXR if you open the game while using a Quest 2 over link/Vive Cosmos without steamVR faceplate then switch on a base station and vive tracker during the game

When using OpenXR with SteamVR as the default system OpenXR runtime and using multiple SteamVR supported devices together e.g. Vive Cosmos and Vive Trackers/Oculus Quest and Vive Trackers, the play mode/headset view will be black with SteamVR reporting ' CEF Local Resource Load Error: http://localhost:27062/app/image?app_key=system.generated.unity.exe&version=1.21.6 -> 404 (Not Found)'

See a video of this happening here, it is blocking me from working on a tool for using Vive trackers in OpenXR. I stress that this worked fine for me before I moved to using OpenXR, using OpenVR for this works totally fine but I want to support OpenXR for Vive trackers in Unity for my tool! https://www.youtube.com/watch?v=3hVtffm324s

My Unity forum post about this is here: https://forum.unity.com/threads/openxr-and-openvr-together.1113136/#post-7853883

I have reported this to Unity with Case: 1399332 and Steam Support with Ticket: HT-KB3B-G3TJ-RNNH but Steam support sent me here.

  1. How can we reproduce it using the example you attached

Download this repro project: https://drive.google.com/file/d/1Qv0bpq4ZdZoCQU5A7edSoBQeCrl3CYe_/view?usp=sharing

  1. Install Unity 2021.2.8f1
  2. Install SteamVR Beta 1.21.6
  3. Set up your Oculus Quest 2 via Oculus Link or Vive Cosmos (without SteamVR tracking faceplate)
  4. Set up at least 1 SteamVR base station and Vive tracker

Now to set up multiple drivers with SteamVR, this is a supported feature of SteamVR Below steps you can follow this video if it helps, it is a popular setup for steamVR games that use Unity like VRChat where people use multiple steamvr supported devices in the same play space as kit is interchangeable https://www.youtube.com/watch?v=JnX8NK-lsPY

  1. Install OpenVR space calibration - https://github.com/pushrax/OpenVR-SpaceCalibrator/releases

  2. Go to your steam installation e.g. C:\Program Files\Steam\steamapps\common\SteamVR\resources\settings

  3. Open default.vrsettings with notepad or VS Code to edit

  4. Change 'requireHmd' value from true to false

  5. Change activateMultipleDrivers from false to true

  6. Save the file

  7. Open SteamVR with your tracker and headset of choice switched on + the steamVR base station

  8. Goto SteamVR settings - Startup/Shutdown - Choose startup overlay apps - enable Space Calibrator

  9. Goto SteamVR settings - Advanced settings - show

  10. Goto SteamVR settings - set steamvr as Current OpenXR runtime if it isn't already.

  11. Open OpenVR Space Calibrator through the steamVR overlays menu (SteamVR menu - third dot on the bottom right from the right, looks like a compass)

  12. Select reference space - your headset controller you are holding and choose the vive tracker in the target space.

  13. Choose calibration speed - slow and click start calibration to calibrate the play spaces then hold the tracker and controller together while drawing an infinity symbol with your hand in your play space to help calibration.

  14. Verify the tracker and controllers line up in the same play space, if not try calibration again or refer to this clip of the video: https://youtu.be/JnX8NK-lsPY?t=308

(We are nearly there!) You can watch my repro video of this here https://www.youtube.com/watch?v=3hVtffm324s

  1. To repro now, turn on SteamVR, turn off the vive tracker and base station, just keep your headset on or ready 20 Open the project in Unity 2021.2.8f1
  2. Verify in Project settings - XR Plug-In Management that OpenXR is the default target
  3. Verify in Project settings - XR Plug-In Management - OpenXR - Play Mode OpenXR Runtime set to System Default
  4. Also verify in Project settings - XR Plug-In Management - OpenXR that Oculus Touch Controller Profile and HTC Vive Tracker profile is in the list if you are using Oculus, if you are using Cosmos (make sure it is without the steamvr tracking faceplate add-on), you can add the Vive Cosmos controller profile but it will cause an error with SteamVR as SteamVR OpenXR doesn't support the Cosmos controller profile yet somehow so leave that off but make sure HTC Vive Tracker Profile is in the list
  5. Open Scenes - Controller sample, with just your headset on click play and verify the scene opens SteamVR for OpenXR and works fine for at least the headset tracking, Vive Cosmos as mentioned the controllers will not track either way (I will report that as a separate bug).
  6. Now, keep the scene running and switch on the SteamVR base station and Vive Tracker, wait for them to connect. If you open the steamVR overlay you should see the tracker show up while connected.
  7. Now the scene view should go black, open SteamVR - Developer - WebConsole to see logs for this reporting this error 'CEF Local Resource Load Error: http://localhost:27062/app/image?app_key=system.generated.unity.exe&version=1.21.6 -> 404 (Not Found)'
  8. If you stop play mode and try again the view will be black and nothing tracks, this will continue until you close SteamVR + Unity and just with only the headset on (no base station or trackers on) and repeat from step 19 of this repro. Refer to this repro video to see it at this timestamp exactly as soon as the vive tracker connects it all goes black https://youtu.be/3hVtffm324s?t=37