ValveSoftware / SteamVR-for-Linux

Issue tracker for the Linux port of SteamVR
918 stars 45 forks source link

[BUG] Falcon BMS 4.37u3 no picture in headset when commited to the 3D world #671

Closed XenoPL closed 6 months ago

XenoPL commented 7 months ago

Describe the bug Falcon BMS 4.37u3 running in VR mode correctly shows UI in headset, but once player enter 3D world (actual gameplay) headset display goes solid grey. VR companion window on monitor shows correct 3Dworld, where I can see head-tracking also works. Lowering GFX quality in the game config tool (disabled shadows, environment mapping etc...) , reducing rendering and/or transcoding resolution and bitrate, using different codec to h264 or HEVC, forcing software encoder in ALVR made no permanent difference. Once on pure chance after some changes in ALVR settings headset started started to interleave empty frames with correct ones. But it only happen if I was flying training mission no. 2, in any other case picture stayed blank for whole time. Some more changes in ALVR to lower video stream quality made headset display empty frames regardless of which mission had been flown. I couldn't reproduce this behaviour with reverting changes I've made.

A clear and concise description of what the bug is.

To Reproduce Steps to reproduce the behaviour:

  1. Add Falcon 4.0 to the library, force using Proton 8.05 and install the game
  2. Install d3dx11_43.ddl via Protontricks
  3. Download BMS 4.37u3 full installer
  4. Run explorer with following commands
    export STEAM_COMPAT_DATA_PATH="~/.local/share/Steam/steamapps/compatdata/429530/"
    export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam/"
    ~/.local/share/Steam/steamapps/common/Proton\ 8.0/proton run ~/.local/share/Steam/steamapps/compatdata/429530/pfx/drive_c/windows/explorer.exe  
  5. Run downloaded installer, install Falcon BMS 4.37
  6. Turn on headset and start all apps needed for headset to work (ALVR, SteamVR ...), make sure SteamVR dashboard is displayed in the headset
  7. From explorer run Launcher located in main Falcon BMS dir, select config
  8. In config tool, expand Hardware category and set "Activate VR Support" to enabled, then click apply and close config tool.
  9. Click Launch to start Falcon BMS
  10. In UI (should be visible in both on screen and in VR headset) click on "Tactical Engagements", select TR_BMS_02_Navigation from list of training missions and click commit.
  11. Click on Takeoff button (bottom right corner) to enter 3D world
  12. Once world is loaded actual gameplay should be visible on screen, however in the headset there'll be no picture. Picture in headset reacts to head movements and gets lighter/darker depends on what ingame camera is pointed at. On very rare occasions it might happen that for a moment headset will show correct picture but, it'll be flashing like some of displayed frames were correct some plain black. Also game might freeze or crash once player enters 3D world.

Expected behavior Same picture of actual gameplay should be show both on screen and in the headset, picture shouldn't flash or flicker, game shouldn't crash nor freeze.

System Information (please complete the following information): Hardware: CPU: Ryzen 5 5600X M/B MSI B550A-PRO RAM Patriot Viper Red DDR4 3733 MHz cl 17 GPU: Saphire Radeon RX 5700XT BE VR Headset Pico4 128MB

Software

Additional context In non-VR mode game runs fine, very stable with good (close to Windows native or better) performance. Looking at game internal FPS counter and ALVR stats, performace should be good enough for this game to meet headset refresh rate. It also runs fine on the same computer, but using Windows10, windows version of ALVR and Steam/SteamVR Other VR apps, both Linux native: StimulaXR, Locomancer and Windows apps: GoogleEarthVR show no such issue.

At least one more user experiences similar issue, see JJones780 entries in this report: https://github.com/ValveSoftware/Proton/issues/3991

Note: Commenters who are also experiencing this issue are encouraged to include the "System Information" section in their replies.

XenoPL commented 7 months ago

If it can help with anything, looking at alvr stats page I've noticed streaming bitrate constantly bounces between almost 0Mbps and +1Gbps regardless of set rendering and transcoding resolution. While under windows it stays around 200-230 Mbps where rendering res being set to Pico4 native 2160 and transcoding using scale to 1.8

JJones780 commented 7 months ago

I tried a mission that had light clouds in it - as a previous experience with heavy clouds made me suspicious. This time I was able to fly through the clouds without much flickering at all ( one brief flicker every 3 or so seconds when light). I did experience occasional periods with almost continuous flicker. Also, when hitting Esc to bring up the translucent resume/exit box the headset would stay blank/grey. The display on my monitor would be fine.

I pulled up the advanced frame timing and was able to see a correlation between the blanking and the reprojected as well as doubling of the yellow area indicating Idle time ( which I understand happens when Interleaved Projection kicks in ). I'll refer to it as "idle jump".
When the mission starts my headset is grey until the first idle jump after which it is grey only during the "idle jumps" themselves.

A bit of internet searching reveals that flickering was a fairly common problem before Async Reprojection was introduced. Note: Async Reprojection is disabled on my setup as it causes a black screen. I don't experience this flickering with any other games.

In the attached BMS2.png the large "idle jump" yellow areas are where I pressed esc to show the exit menu. You can see that the shorter "flickers" were rare (in this particular case).

BMS2 BMS2_detail

JJones780 commented 7 months ago

Hardware: CPU: Ryzen 5 5600G M/B: ASROCK B550M Pro4 RAM: 64GB GPU: NVIDIA GeForce RTX 3060 Ti/PCIe/SSE2 Driver Version: 4.6.0 NVIDIA 535.86.05 VR Headset: HTC Vive

Software

Distribution: Devuan GNU/Linux 5 (daedalus) (64 bit) Kernel: 6.5.8 Steam Beta Branch: Steam Beta Update Steam Version: 1706390103 Steam Client Build Date: Sat, Jan 27 1:58 PM UTC -08:00 Steam Web Build Date: Fri, Jan 26 12:26 PM UTC -08:00 Steam API Version: SteamClient021 Proton: GE-Proton8-22
Previously tried Proton 7.0-6 which worked with flickering as well. I'll have to re-test.

JJones780 commented 7 months ago

My process to get BMS in VR running was:

Install BMS:

I was able to install BMS (after running Falcon once to get the 429530/pfx dir ) via:

STEAM_COMPAT_DATA_PATH="/media/ssd2/SteamLibrary/steamapps/compatdata/429530/" WINEPREFIX='/media/ssd2/SteamLibrary/steamapps/compatdata/429530/pfx/' wine './Falcon BMS_4.37.4_Full_Setup.exe'

run BMS:

Then to run the BMS program I went into the Steam Properties for Falcon4 and set the Launch Option to: bash -c 'exec "${@/common\/Falcon\ 4.0\/falcon4.exe/compatdata\/429530\/pfx\/drive_c\/Falcon\ BMS\ 4.37\/Launcher\/FalconBMS_Alternative_Launcher.exe}"' -- %command%

Note: bash -c 'exec "${@/search/replace}"' -- %command% So here we replace the falcon4.exe with the BMS Alternative Launcher !

Enable VR:

cd '/media/ssd2/SteamLibrary/steamapps/compatdata/429530/pfx/drive_c/Falcon BMS 4.37/User/Config/' echo "set g_nVRHMD 1" >> 'Falcon BMS User.cfg'

Startup Steam and SteamVR then ran BMS and in the launcher went to: configure -> hardware -> activate vr support

Applied, ok'd back to launcher and hit launch.

(Optional) Run from command line:

I'm actually running from command line now after getting steam to spit out the debug/non-debug scripts using an additional Launch Option: PROTON_DUMP_DEBUG_COMMANDS=1 PROTON_DEBUG_DIR=$HOME which writes the scripts into $home/proton_yourname

XenoPL commented 7 months ago

Thanks @JJones780 I think we're onto something. Here if game is able to hear fps close to 72 I can see proper picture, with just flash once per few seconds. If framerate drops it worsens. Funny thing is here render FPS show well past 100FPS, but sim/general fps seem to be anywhere between 40 and 75. Could it be game is throttled by VR runtime, but due inefficiency in stream encoding or elsewehre in VR stack it constantly misses 72 refresh rate.

JJones780 commented 7 months ago

I saw someone solve a flickering problem that was due to a mismatch in audio settings between their PC and SteamVR... so an interrupt etc. hiccup elsewhere can throw off the VR timing.. shows that it doesn't necessarily have to be a horsepower issue. But yes.. intriguing. Maybe I'll take the time to learn how to do a GPU trace soon to get more hints. Do you have Asyn Projection on your AMD system? The mention of fallback to interleaved reprojection was here and it seems to be up-to-date? Other research seem to indicate interleaved isn't around anymore... or maybe it is and only comes into play where the newer reprojections aren't available? If so then this might solve itself when the newer reprojections are further refined and available for nvidia ( and AMD) on Linux. I also see mentions of OpenCompose - but I'm not ready to go that route yet as it seems a bit unrefined on Linux.

XenoPL commented 7 months ago

Here audio is not the culprit, with recent OS update, I couldn't connect to the headset with audio on, so 'till this prolem is fixed audio is not going to be routed to the VR device. WRT reprojection setings, in per-game sttings there's "Legacy reprojection" switch, if set to ON I see grey wall no matter what. If set to off,fps timing must be below 11ms to show correct picture, despite I've set my refresh rate to 72Hz which would give ~13ms. It's a pity SteamVR for Linux is in a such sad state.

XenoPL commented 7 months ago

Just for a note, SteamVR 2.4.1 didn't fix this issue.

XenoPL commented 6 months ago

Update on the issue: Proton 9.0 beta11 kinda fixed the issue, no empty frames even when frame pacing goes down to 14.7ms, enabling legacy reprojection seem to be fine too and brings frame pacing to about 11ms. Image quality seem to be good. However there's one issue, motion tracking is quite jerky. Even if I try to sit still just looking in front of me, camera is very unstable, pov is constantly jumping. Can't say for sure but it doesn't seem to be much related to dropped frames and frame timing. Camera shakes could occur even if bar graph could be all green and frame timing was less than 10ms. Also there were some single dropped frames, yet I don't notice any camera movement at that moment.

If this one could be fixed I'd call it perfect as perfect seem to be more stable than under Windows.

JJones780 commented 3 months ago

I'm getting a big single color view in my headset again with recent changes to SteamVR (?). I'm trying a few things but thought I'd ask if you've had a similar experience with the latest SteamVR Beta?

XenoPL commented 3 months ago

Latest I've tried is 2.6.2, but I've also moved to 4.37 update 4. No problems with empty frames due latency, but picture is distorted.

JJones780 commented 2 months ago

I finally got the new full install downloaded and reinstalled over a fresh compatdata/429530/. It gets stuck in super slow-mo until focus is taken away... I seem to think I should remember a solution for that? When input focus is away ( really hard to get it going this way but I persisted ) it has perfect visuals and afaict it's performant. I'll try reinstalling again but if this scenario rings a bell please comment.