ValveSoftware / SteamVR-for-Linux

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

Motion smoothing not implemented for AMD #354

Open im-0 opened 4 years ago

im-0 commented 4 years ago

Describe the bug I am trying to enable motion smoothing / async reprojection and it seems not really working.

To Reproduce Steps to reproduce the behavior:

  1. Add following into ~/.local/share/Steam/config/steamvr.vrsettings:
    {
    ...
    "steamvr" : {
      "disableAsync" : false,
      "enableLinuxVulkanAsync" : true,
      ...
    }
    }
  2. Set STEAMVR_MOTION_AMD=1 for Steam (and thus for SteamVR and everything else launching from Steam).
  3. Open "Settings" -> "Video".
  4. See that "Motion Smoothing" is "Not Supported" (also see attached sreenshot).

I am not sure that manually editing steamvr.vrsettings and setting environment variable are really needed. But I was unable to find any clear instructions on how to enable this in SteamVR on Linux.

Expected behavior I expect it to at least be shown as supported in settings window. Also, according to this tweet, it really should work on RADV.

System Information (please complete the following information):

Screenshots screenshot-2020 05 20-01 54 33-935876171

Additional context I see following in ~/.local/share/Steam/logs/vrcompositor.txt:

...
Tue May 19 2020 06:04:27.265711 - Direct mode surface: 0x26a6110
Tue May 19 2020 06:04:27.265910 - Requesting 10 device extensions:
Tue May 19 2020 06:04:27.265928 -  - VK_KHR_swapchain
Tue May 19 2020 06:04:27.265937 -  - VK_KHR_maintenance1
Tue May 19 2020 06:04:27.265945 -  - VK_KHR_dedicated_allocation
Tue May 19 2020 06:04:27.265954 -  - VK_KHR_get_memory_requirements2
Tue May 19 2020 06:04:27.265963 -  - VK_KHR_external_memory
Tue May 19 2020 06:04:27.265973 -  - VK_KHR_external_semaphore
Tue May 19 2020 06:04:27.265982 -  - VK_EXT_display_control
Tue May 19 2020 06:04:27.265991 -  - VK_KHR_external_memory_fd
Tue May 19 2020 06:04:27.266000 -  - VK_KHR_external_semaphore_fd
Tue May 19 2020 06:04:27.266008 -  - VK_EXT_global_priority
Tue May 19 2020 06:04:27.266016 - Attempting to enable async support...
Tue May 19 2020 06:04:27.266024 - Enabling async support!
Tue May 19 2020 06:04:27.449630 - m_pVkInstance : 0x269bc60
Tue May 19 2020 06:04:27.449658 - m_pVkPhysicalDevice : 0x25bef90
Tue May 19 2020 06:04:27.449666 - m_pVkDevice : 0x2722740
Tue May 19 2020 06:04:27.449673 - m_pVkGraphicsQueue : 0x270e4f0
Tue May 19 2020 06:04:27.449679 - m_pVkComputeQueue : 0x270ea80
Tue May 19 2020 06:04:27.449688 - HMD swapchain mode:2 count:3
Tue May 19 2020 06:04:27.462702 - Direct mode: enabled
Tue May 19 2020 06:04:27.463101 - Mirror swapchain mode:0 count:4
Tue May 19 2020 06:04:27.483865 - CGraphicsDevice Init...
Tue May 19 2020 06:04:27.483950 - Headset is using direct mode
Tue May 19 2020 06:04:27.483961 - Initializing timing resources
Tue May 19 2020 06:04:27.484050 - Initializing CVulkanVRRenderer
Tue May 19 2020 06:04:27.484069 - Debug markers: disabled, missing extension support. Is the Renderdoc layer enabled?
Tue May 19 2020 06:04:27.668923 - Initialized Vulkan transfer ring buffer, mapped at offset 0x0x7f6cdc000000.
Tue May 19 2020 06:04:27.669305 - Found environment variable STEAMVR_MOTION_AMD=1
Tue May 19 2020 06:04:27.669940 - Motion estimation support: missing
Tue May 19 2020 06:04:27.669959 - Updated HMD Prop_DisplayFrequency_Float to 120.018997
...

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

kisak-valve commented 4 years ago

Hello @im-0, your log indicates that async reprojection is enabled. Motion smoothing hasn't been implemented yet for any hardware on linux.

im-0 commented 4 years ago

Hello @im-0, your log indicates that async reprojection is enabled. Motion smoothing hasn't been implemented yet for any hardware on linux.

Ok, thanks for clarification. Message in the Settings UI is really confusing as it states that motion smoothing is not supported exactly because of lack of async reprojection.

kedodrill commented 4 years ago

Hello @im-0, your log indicates that async reprojection is enabled. Motion smoothing hasn't been implemented yet for any hardware on linux.

Has there been any work done (not a release, just general in-house testing or similar) to try and implement motion smoothing on Linux? Is there something specifically holding that back?

frostworx commented 4 years ago

would be good to know. I consider getting a "Radeon VII" for better SteamVR performance. My current "RTX 2080" would find a new home in my wifes PC, who is looking for a faster GPU anyway. would this make sense or doesn't make it a big difference VR wise currently? looks like they are almost on par in general benchmarks.

drawingpixels commented 4 years ago

I have an RX 480 and unfortunately I've found the async reprojection with AMD to be prone to stutter and other issues that aren't present under Windows. Relying on it is not a good experience, so my current advice is to keep above the need for reprojection and that a change in hardware is not worthwhile.

We are expecting new graphics cards towards the end of the year, so regardless it's a good idea to wait if you want better performance.

frostworx commented 4 years ago

thank you very much for your suggestion, SketchStick!

edit: just wanted to mention that I replaced the rtx 2080 with a radeon vii (using mesa aco) and don't regret it. many vr games are much smoother and there are even some which do work now but didn't before (f.e. blortasia crashed on launch with nvidia and summer funland was unplayable with (the required) commandline parameter "-onethread") but works now pretty good (not perfect, but good enough to have fun playing it)

so back on topic: "Has there been any work done (not a release, just general in-house testing or similar) to try and implement motion smoothing on Linux? Is there something specifically holding that back?"

Atemu commented 3 years ago

Hi, it's been a few months; has there been progress on this? @kisak-valve

Is there anything we could do to help speed up progress or is SteamVR's MS implementation on Linux simply not a priority right now?

kedodrill commented 2 years ago

@kisak-valve is there a timeline for implementation of motion smoothing for Linux?

XDM-Inc commented 1 year ago

TWO YEARS LATER?? Nothing???? Really? this headset is $1000+ and still such limited support in linux??

jord7700 commented 5 months ago

2024 with no updates afaict

Taiko2k commented 5 months ago

I'm curious what the use case for this motion smoothing is. Do other platforms use motion smoothing? Even on Windows this algorithm works very poorly and degrades the visual experience severely. IMO this setting should be hidden to avoid confusion for novice users.

Atemu commented 5 months ago

Do other platforms use motion smoothing?

Yes. SteamVR for Windows has it on by default IIRC.

Oculus have an improved version that takes advantage of motion vectors exported by the game rather than inferring them from the 2D image but I don't think there's a standard for that in SteamVR land, so that's not possible. (Valve, please fix.)

Even the Apple Vision Pro has it; with obvious artifacts and all.

Even on Windows this algorithm works very poorly and degrades the visual experience severely.

It's a trade-off. MS is only active when your computer can't keep up with the demand. It's motion smoothed frame vs. just reprojected vs. no frame at all. Each have benefits and downsides.

Motion smoothing's main advantage over just reprojection is spacial continuity when a frame is dropped rather than just rotational continuity. This can be "live saving" for users prone to nausea and can actually make 30-45fps surprisingly decently playable.

Obviously you'd prefer native frame rate but if all you can do is 30fps, motion smoothing is preferable to the stuttery mess that is 30fps with just reprojection.

ZarathustraDK commented 5 months ago

Obviously you'd prefer native frame rate but if all you can do is 30fps, motion smoothing is preferable to the stuttery mess that is 30fps with just reprojection.

Not by much though. If my (perhaps outdated) recollection of legacy reprojection vs motion smoothing is anything to go by, the difference is between nausea from (virtual) reality not catching up to your movements vs nausea from what I imagine an aneurhysm looks like in first person. I'd prefer async reprojection a 100% of the time over (and even augmented with) motion smoothing.