Tags: Window Games
How I Stream VR FPS Games
Often when I find myself playing a game in VR and I wish I could share the experience with friends.
Whether that be through Twitch or via a Discord VOIP channel, I really want to show just how cool playing games in VR is. Plus, streaming to a Discord channel gives you the same experience Oculus intended with their phone app for streaming content to family members, just better and over the Internet. I almost always play PCVR games on my Quest using the Oculus Link, so this tutorial / walkthrough / FAQ will focus on how I set up OBS to capture, record and stream PCVR video and audio for first-person shooters. The walkthrough is transferable to many other games, but FPS games present a pain-point for VR streamers, most notably that many games default to a dominant left-eye view as opposed to a dominant right-eye view with no option to change!
I'll show you how to fix these issues and record beautiful gameplay in VR!
First, I assume you have the Oculus software on your PC. I know it's shitty software and it works maybe half the time but you need it to play Link games so... no way around it!
Next you're going to open a window which will mirror your Oculus headset's view.
You'll need to press
CTRL+R and type
Files\Oculus\Support\oculus-diagnostics\OculusMirror.exe and click run.
Obviously if your Oculus install path is different from this tune the command
accordingly. Now a window should be opened which displays a rectilinear view of
everything being fed into your Oculus headset. There are a number of parameters
you can specify to this command which will modify the displayed window. These
--LeftEyeOnly Display left eye image in rectilinear view
--RightEyeOnly Display right eye image in rectilinear view
--RectilinearBothEyes Display both eye images in rectilinear view
--SymmetricFov Force rectilinear output to symmetric FOV
--DisableTimewarp Disable timewarp to avoid black pull-in
--FovTanAngleMultiplier [x y] Override all render FOVs (prefer < 2)
--DisableFovStencil Force disable FOV Stencil for all apps
--NativeResolution Lock window size to 1:1 resolution (rectilinear or post-distortion except in fullscreen)
--FullScreen [resolutionScale] Fullscreen on main monitor. Ignores 'Size'. Smaller scale values can help performance.
--PostDistortion Display both eye images corrected for lens distortion and timewarp.
--IncludeGuardian Show Guardian boundary layer
--IncludeNotifications Show Oculus notifications
--IncludeSystemGui Show Oculus System GUI.
--Size [width height] Set window size using width & height
--Screenshot [filename] Save a PNG screenshot using file name
--FlashFrameDrops Flash on Oculus Compositor frame drops.
... you can also adjust these by playing around with them in the window's "Settings" tab, though I prefer to create a batch script with these parameters for consistency's sake.
For FPS games you should adjust the command to use either
--RightEyeOnly depending on your dominant eye. This way your screen capture
will look more cohesive when you aim down sights. For example, when I play
Onward or Contractors VR I set this to
--RightEyeOnly because I close my left
eye when I aim down sights. This helps viewers to understand where you are
aiming, and is necessary for many FPS as some games do not have an option to
change the dominant eye like you can with the mirror (tragic!)
Watching your Twitch Chat in VR with XSOverlay
Interacting with your streaming audience is a key ingredient for a successful stream. To ensure I can read my chat while I'm in VR I use a software called XSOverlay. It allows me to pin windows to my hands or to the virtual world, letting me see a few selected windows on my desktop at a time. I use Twitch's pop-out chat feature to break out the chat window so I can capture and render that using XSOverlay without much other clutter; I also often put the activity feed next to it so I can monitor incoming follows, subs, and raids.
One feature I use often in XSOverlay is the "auto-hide" feature. This makes it so the selected window is invisible when I am not looking directly at my wrist, which is a big help in FPS games where the window could otherwise obscure my viewport. You can choose which settings to toggle for each window by going into the window's settings in XSOverlay by hovering over it.
Finally you can use capture / streaming software like OBS to record this mirrored window and add chat overlays to your final product. I prefer to keep clutter to a minimum (especially for FPS), which means adding a rolling chatbox (messages disappear after 15 seconds) and adding alerts for important events in a small corner of the screen. For other games which expose rich textual data you could add text overlays which aggregate this real-time data (e.g. kills / deaths, score etc.) though I don't know of many games other than BeatSaber with HTTP Status which do this.
If you have an NVIDIA card I'd recommend using NVENC as the encoder, as this frees your CPU from needing to perform the heavy-lifting demanded by encoding a stream at 60 fps in a decent resolution. Though this is a very good place to start you will definitely need to tweak many more settings to get the encoding quality just right.
Below are the settings I use for OBS; adjust these values according to your computer's capacity. For the record, these settings produce the best quality I can eek out of my GTX1070. Also, keep in mind that you will be sending this video through your ISP, so ensure your uplink can keep up with around 5Mbps for the below settings, otherwise adjust the bitrate until it fits within your uplink capacity.
|Resolution||1536 x 864 (16:9)|
|Bitrate||5000kbps (constant bitrate)|
|Downscale filter||Lanczos (36 samples)|
You may need to toggle advanced settings to see all these prompts in the OBS dialogue box. Note: 1536 x 864 is still a 16:9 aspect ratio (which is an ideal ratio for streaming) but the lower resolution here is necessary for high motion content which may be at-risk for artifacting. With rapid head movements in VR, I'd highly recommend streaming at a similar resolution, as the encoding deadlines coupled with a high resolution may result in blocky artifacts in the final product.
FAQ / Problems and Solutions
Q: When I listen back to my stream, the audio from the Quest sounds "crackly"... why?
A: Oculus Link was in beta until very recently. If you have not upgraded the Link software then I'd recommend doing so, this has fixed a number of bugs I've encountered such as crackling audio, microphone issues, etc. etc.
Q: How can I overlay chat on top of my Twitch stream?
A: Streamlabs widgets captured via an OBS browser source.