GPUOpen-LibrariesAndSDKs / Radeon-ReLive-VR

157 stars 19 forks source link

Connects but shows a frozen image of SteamVR on the quest #67

Closed BubbleLavaCarpet closed 4 years ago

BubbleLavaCarpet commented 4 years ago

I have connected to the 5 GHZ version of my router on the quest, and my pc has a gigabit ethernet connection. Everything tracks well on the VR view on my monitor, but the quest shows a frozen image of the SteamVR home and won't change even if I restart everything. I have tried all devices on headset emulation, and my quest is almost right next to my router, so the connection shouldn't be a problem. I have an RX 580, i5 8400, and 16 GB Ram. Here's the log from the most recent attempt with using the vive as an emulator (it crashed after a few minutes). AMDWirelessVR.log

`

GennadiyAMD commented 4 years ago

@BubbleLavaCarpet - try switching to streaming over TCP instead of UDP in Radeon Settings (the same place where you enabled SteamVR integration, just a few lines below), see if this makes a difference. What it sounds like is that messages carrying video are not getting through to your headset.

Do you have any custom settings in the router, such as, for example, enabling QoS, or have you changed the channel width or assigned a custom channel for the 5GHz AP in the router?

BubbleLavaCarpet commented 4 years ago

e

Changing to TCP worked! Thanks for your help!

GennadiyAMD commented 4 years ago

@BubbleLavaCarpet - this means that your router is blocking some UDP packets for whatever reason, most likely by size. Since latency is so paramount in VR, we try to squeeze every bit of performance out of every component involved, including the network and this works with 99% of the routers out there, but I guess there are a few exceptions and yours might be one of them. Not all devices support large UDP datagrams. You have a working solution and could always go back to it, but UDP generally performs a little better, not by a huge margin though. If you're willing to spend a bit more time on this, let's try one more thing that might work even better:

We would appreciate if you could let us know the model of your router, so that we know which ones are problematic as the absolute majority of them work well with 65507.

xenoliferttv commented 4 years ago

Hey im from germany and have exactly the same issue, more german likely have the same router. Specs: Rx 580, Ryzen 5 3600x, 16gb 3200mhz, 5ghz router with the ac thingie at the end. I switched to 40mhz channel which is free around 6-8 channels to left and right. 1 mobile phone streaming music over 2.4ghz wifi atm. 100mb/s lan.

Router:

https://kabel.vodafone.de/static/media/Technicolor_VodafoneStation_CGA4233DE.pdf Serialnr. 8CM2D299J700863 Firmware-Version AR01.02.037.08_121719_711.PC20.10

and im running Malware Antibytes Pro as additional Firewall and security software.

UDP SteamVR home would instantly freeze. 50mb/s - 100mb/s didnt change much. TCP i could boot Beat Saber but the latency was everything about stable. It was jumpy as heck and disconnected every 1-2mins completly. Tracking worked fine on PC screen, disconnects happend on PC screen too.

Didnt had this problem with ALVR, however i think you guys have the better software on paper and i couldnt stream well with ALVR. Everything uninstalled (SteamVR, ALVR and AMD Factory reset) deleting every trace i could fine. Im not sure i got everything regarding ALVR tho. Then fresh installed Ocolus Software, SteamVR and lastly ReLive when Link worked fine.

So... how can i make this work? I would love to use ReLive!

Why would ALVR would work but ReLive wont? Can i still use UDP without compromises, f.e. unlock some ports?

Im not to techsavvy and if you need anything else i will gladly provide you.

Thanks for your awesome work <3

GennadiyAMD commented 4 years ago

@xenoliferttv - the log you attached clearly shows very high packet loss. Have you tried reducing the DatagramSize to about 4096 or so? Repeating instructions from above: open the c:\Users\AppData\Local\AMD\OpenVR\settings\settings.json file in a text editor like Notepad. If you don't see the AppData folder, click on the View tab in Windows Explorerand check the Hidden items checkbox. Scroll down towards the end of the file and there you will see a section called "Headset". It will look like this: "Headset" : { "DatagramSize" : 65507, "LogPath" : null, "MaxUserCount" : 1, "Network" : "UDP", "Port" : 1235 } Try putting 4096 or smaller instead of 65507 (make sure you have a comma at the end of this line), restart SteamVR after making the change. You can go as low as about 1000 bytes.

There might be many reasons why ALVR works, it uses a different protocol. For example, they don't try to send large datagrams to minimize network overhead. There might be other differences in the protocol that your router doesn't like for some reason.

Please let us know if reducing the datagram size helps. Thanks!

xenoliferttv commented 4 years ago

First of all, thanks for your quick response! Since posting ive been trying hard to make a change... almost no success. Hope we can work this out :)

By reducing it, how will it impact my latency? Anyway. Ran a test with following settings:

settings - 4096dgs.txt

AMDWirelessVR.log

My pc was sending 50+mb/s but only receiving around 7-8 mb/s, gpu at 91% max. That didnt change much throughout the whole day not even with the small datagrams. However, although it was cutting off the edges (black bar edges) pretty hard and struggled heavy to get beat saber starting, it was the first time i could actually finish a song. There was stutters and controller miscalculations but yeah... it helped a little! Finally some progress!

Let me know what else you need or i should try. I would love to know by tomorrow if should buy a new router, if that somehow possible. To be honest everything points at the router not transmitting packets efficiently as far as i understand (?).

Other things i tried today: (its late ill edit details tomorrow if unclear)

Turned off phone and all other possible interference switched lan cable 100mb/s - 1gb/s Port forwarding Setting channel on automatic reducing to 20mhz delete all vr related software, files and gpu drivers again (clean) reinstalled apk's reinstalled c++ redist...pack ran disk and registry check from windows (forgot the name) entered the ip of quest and pc into router somewhere (dhcp?) tried different settings.json turning off all security thingies, namely windows firewall and all malwarebytes protections (except router) checked frame timings and other hardware for errors tried tuning down graphics (resolution) restarted headset, pc and router several times checked if link works normal (yes it does) opted out of all beta versions (amd drivers + ocolus) updated windows

dada

Let me know what else you need or i should try. Ill try tomorrow with 1000 bytes. Good night and keep it up! :)

cheers

GennadiyAMD commented 4 years ago

@xenoliferttv - you're still streaming over TCP, not UDP. DatagramSize has no meaning and no effet for TCP, please switch back to UDP. Also change height under EyeResolution to 1440 from 1600, your encoder is not fast enough at this resolution. I've attached the correct settings.json (please remove the .txt extension)

settings.json.txt

I've also enabled the embedded web server, so that you could make changes using the browser rather than editing the file manually - just connect to http://localhost:8080.

Any chance you could try a different router (like borrow one from a friend) before you buy one? If you end up buying one, make sure it has Gigabit wired LAN - some cheap devices offer 5GHz WiFi, but only 100Mbps wired, which is not enough for good VR experience, so check the specs before you buy.

Btw, your graphics driver is not the latest.

Please let me know how it goes.

xenoliferttv commented 4 years ago

@GennadiyAMD

Oops, i deleted the comment i wanted to write first!

summary = After changing some little things, isolating datagramsize and lowering it to 1000bytes worked. So i proceeded to narrow it down. You where right all along!

Will this router work? https://www.amazon.de/dp/B08FD8X48Q?tag=conqu11-21 Im not sure it has cable input so it would probably go over the modem, which seems to be the bottleneck. Does that negate the higher specs of the router in a LAN environment? confusion

Also: How do i make sure, that the allowed Datagramsize is as huge as possible on my new router/modem?

some less interesting results:

Result 4: = At the beginning it looked about to crash, performance graph was constantly high, then loaded beat saber and somewhat stable again, fps/latency felt slow - controllers felt responsive. Performance Graph green thingies where low again. 

Ethernet = around 50mbps Send and around 7mbps Receive

Setting: DGS @ 1250

AMDWirelessVR.log

Result 5: Same thing, steamvr home laggy - beat saber fine. Low fps/latency but somewhat stable

Setting: DGS @ 1400

Result 6: Crash at first frame

Setting: 1500

Result 7: works, same thing. 

Settings: 1450

FINAL RESULT: It works @ 1472 DGS. Stops working @ 1473 DGS.

on Technicolor_VodafoneStation_CGA4233DE modem/router. Vodafone default for high speed internet in Germany.

For this router there seems to be open source software. Maybe even a newer firmware? I dunno, could that possibly help or is that rather a hardware limitation?

its somewhat stable but fps/latency feels low, controller rather responsive.

AMDWirelessVR.log

Changing to 100mbps Bitrate, didnt seem do have much of a positive effect. with 100mbps: AMDWirelessVR.log

Id apprecicate an answer in max 5hrs, so i can proceed to buy a router in a local estore before it closes. If thats what i leads to in the end. :) Thanks so far!

sidenote: TCP hasnt changed obv.

Ill do some work. Catch ya later

xenoliferttv commented 4 years ago

oh btw, my lan cable is cat5, it shows in ethernet details that its 1gbps - could that be the bottleneck?

GennadiyAMD commented 4 years ago

@xenoliferttv - I think the Honor router should work, at least spec-wise. You could also try this one. With Amazon, you can always return it if you don't like it.

CAT-5/CAT-5E/CAT-6 cabling - much depends on the length. When the cable is a meter long, it shouldn't matter much. But when it gets longer, it does matter. At 15m CAT-5e might not give you Gigabit speeds - didn't work for me, had to go with CAT-6. But if your connection properties actually show 1Gbps, you should be fine - for me the lights on the switch would turn yellow instead of green indicating 100Mbps.

Sorry for the late answer - I'm in the EST timezone, it's early morning here.

xenoliferttv commented 4 years ago

Thanks a lot my men! Atleast now u have some data and me some clarity. Wish you all the best and keep up the great work!

GennadiyAMD commented 4 years ago

@xenoliferttv - you're welcome! Some answers to some other questions that you asked:

  1. Connect the Internet port of your new router to a LAN port of your Technicolor. In this case you'd have two NAT routers cascaded. What you would need to make sure is that the two routers assign IP addresses on different subnets to their respective LANs. For example, if your Technicolor assigns 192.168.0.x to local hosts, then set your new router's DHCP server to assign addresses in the 192.168.1.x subnet - you'd find these under DHCP server settings. In this case make sure that your VR PC is hooked up to the new router's LAN port, not the Technicolor and the headset connects to the new router's WiFi access point. I'd recommend turning off WiFi on the Technicolor to avoid interference between them. The plus of this setup is that your VR network is fully isolated from the Technicolor router and if it does something to the UDP traffic, it won't affect your streaming. The downside - if you have any devices connected to Technicolor, they might not see other devices connected to the new router. Also if you have any servers accessible from the Internet (like streaming from your PC to your phone with AMD Link, or any of the Bittorrent stuff) and you move the PC behind the second router, you would have to open some ports on both routers and change your port forwarding settings - this is all unrelated to VR, but something to consider when configuring your network.
  2. TP-Link routers typically have an Access Point mode, when it essentially becomes a dumb switch with WiFi (typically located under Advanced->Operation Mode in the menus). I'd try this mode first (still disable WiFi on the Technicolor) - if you get good performance in this mode, this would make the simplest setup. In this case leave the Internet port of the new router unused and connect them with LAN ports. I'd still plug the PC into the new router directly.
  3. Essentially the same as option 2 above, but works with any router, even those that don't have the Access Point mode. Disable DHCP server in one of the routers (this is important so that there's only one DHCP per subnet, doesn't matter which router, just make sure there's only one), configure the IP address of the routers themselves to be on the same subnet (say, configure one to be 192.168.0.1 and the other one to 192.168.0.2) and connect them using LAN ports, leaving the Internet port of the new router unused. You can refer to this Wiki page for more information on this.

Good luck, hope this helps!

xenoliferttv commented 4 years ago

@GennadiyAMD Men that all so valuable and thought trough info, explained in a way that combines the logic and action parts in a intuitive manner. You are a great dev and support. Thanks for your time taken and i really appreciate the guide/info. Will need it and it saves a lot of time on my part.

If you busy, its just an update of what ive done today and the results - dont mind skipping :)

Basicly got this router ...i love the GUI

Setting:
just turned off wifi on Modem and connected the router via LAN to modem (in the internet port), made sure Quest is connected to new 5g wifi. 

Results:
54ms very stable - actually not much better yet, regarding just the latency. 

Compared side by side (on first glance) 

avg. is was around 59ms, now is around 54.3ms 
client still rather jumpy 
network around 5ms - now 2.5ms. Awesome!
decoder around 14.5ms to around 13.25ms
avg. is was 59ms, now is 54.3ms 

Last succesfull test with Datagramsize of 1471bytes:

AMDWirelessVR.log

compared to: AMDWirelessVR.log

Definetly dont have to worry about crashes and stuff, played for like 2hrs straight. It feels responsive but i think i can do better. The latency is still noticable as opposed to link (subjectively speaking on first glance, need more testing).

Ill test more in the next days. Most of the latency gathers on client and server. Will try follow your "foveated scaling" documentation and set up the network correctly. 

They actually both run on same IP as of now, good to know thats not optimal. xd

Is a goal of 30ms to 40ms stable, realistic? That would be a dream.

If i can ever help you out with something - give me a pm. Appreciate your time and efforts!
Have a good one. quickedit: Goddamn it, 2am again. Good night!

GennadiyAMD commented 4 years ago

@xenoliferttv - thanks for the update! Now you can try to crank the datagram size back up. The max value is 65507, but anything above 16000 makes very little difference. I've never seen a TP-LINK that had issues with 65507. You could probably shave off another millisecond or two off the network time.

30ms - not realistic. Mid-to-upper 40-s possible with Navi (RX5600/5700), which has a faster encoder. With RX-580 this is pretty much as good as it gets. The only thing you can try to reduce the appearance of black borders when you move your head quickly is to set the field of view to about 104-105 degrees (this would be 1.745329 radians) - the FOV section in settings.json, or if you use the Web UI, it would be in the Streaming tab - note that you specify it in degrees in the browser, but in radians in settings.json - the UI would do the conversion for you.

Foveated scaling should be on by default - NonLinearScale set to true in settings.json or Scaling set to Non-linear under Streaming in Web UI. You could lower the Encoder resolution to 1280x1280 - this would gain you a couple of ms latency.

Other than that, just keep your PC in a well ventilated environment. Depending on the case your computer is in, if you can add a chassis fan that blows air onto the GPU, this might help to keep the GPU cooler under heavy load and not throttle as much. But this would not make a huge difference.

Enjoy! Good night.