pushrax / OpenVR-SpaceCalibrator

Use tracked VR devices from one company with any other.
MIT License
628 stars 103 forks source link

Black Screen when using OpenXR runtime in SteamVR + Unity? #73

Open ROBYER1 opened 2 years ago

ROBYER1 commented 2 years ago

I am not sure if this issue is with your tool or SteamVR/Unity but I only get this black screen when using a calibrated space in SteamVR through OpenXR Runtime as soon as I switch on a Vive tracker while using an Oculus Quest 2 or Vive Cosmos (without SteamVR faceplate)

Full detail: 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

How can we reproduce it:

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
pushrax commented 2 years ago

Hi @ROBYER1, can you confirm if the black screen still happens when you activate all the devices without Space Calibrator installed?

ROBYER1 commented 2 years ago

@pushrax I can confirm that the black screen happens with or without. I wouldn't want to waste your time looking into this if it's not a bug but I wanted to make you aware of this issue!

Does it happen for you also? Feel free to close this issue also if it's not related 👍

pushrax commented 2 years ago

I haven't had a chance to try to reproduce yet.

It sounds like the issue is outside of Space Calibrator's control given the information available so far. Unfortunately multiple driver setups are often overlooked by VR platform developers and there's a high chance there's a bug in the OpenXR runtime or its integration with SteamVR/Unity.

ROBYER1 commented 2 years ago

Would be keen to get your thoughts on what is going on at least if you do give it a try, I'm currently chasing it up with Unity support and Steam's OpenXR developer forum.

I have contacts at Unity so I got it sent onto Valve employees they work with but not holding out hope yet.