- OpenVR Driver that can render in SbS or TaB 3D with other formats converted to through ReShade
- Compatible games play great with a XInput controller. No motion controls required!
- VRto3D itself does not "fix" games for 3D, but it allows you to run VR modded (fixed) games on a 3D Display
- Currently targeting OpenVR 2.5.1.
- Windows-only solution currently, but there are other solutions on Linux like Monado XR.
- Check out the video guide here (there are 2 parts):
- 3D TVs - work great if you can find one
- 3D Projectors - work great, but need more space and may be expensive
- AR Glasses (Rokid, Xreal, Viture, RayNeo) - work great, relatively inexpensive. If you don't have a USBC port with DP-Alt mode on your PC, they require a compatible adapter - choose one with SBS and audio support. A USBC extension is also recommended
- Lume Pad - works great, a bit more expensive, requires Sunshine/Gamestream + Moonlight
- SR Displays (Acer Spatial Labs / Asus Spatial Vision / Samsung Odyssey 3D) - work great, currently expensive
- 3D Vision hardware works great thanks to WibbleWobble
- Virtual Desktop with a VR headset - apparently works, but will not be officially supported
Checkout the Compatibility List to see if a game has been tested
- Adjust Depth (Separation) with
Ctrl + F3
andCtrl + F4
- Adjust Convergence with
Ctrl + F5
andCtrl + F6
- Save all current settings (ones indicated with a
"+"
under Configuration) as a profile for the currently running game withCtrl + F7
A beep will indicate success - Reload the profile settings (ones with a
"+"
) fromdefault_config.json
withCtrl + F10
A beep will indicate success - Toggle locking the SteamVR Headset Window to the foreground with
Ctrl + F8
- Toggle HMD Height between 0.1m and configured
hmd_height
usingCtrl + F9
. This is useful for games that force a calibration on the "floor" - Check the Controls section and the Configuration table below to setup HMD camera controls for VR games (check the compatibility list to see if they are needed)
- Check the User Presets section for instructions on setting up your own Depth/Separation and Convergence presets and also reference the Configuration table below
- When Pitch/Yaw emulation is enabled, you can adjust the ctrl_sensitivity with
Ctrl -
andCtrl +
and the pitch_radius withCtrl [
andCtrl ]
- Toggle Auto Depth listener off/on with
Ctrl + F11
- VRto3D has to be installed and SteamVR launched once for this config file to show up
- Modify the
Documents\My Games\vrto3d\default_config.json
for your setup - Some changes made to this configuration require a restart of SteamVR to take effect
- Fields with a
"+"
next to them will be saved to a game's profile when you pressCtrl + F7
and can be reloaded fromdefault_config.json
usingCtrl + F10
- Reference Virtual-Key Code strings for user hotkeys
- Reference Profile Creation Steps for creating a game-specific profile
Field Name | Type | Description | Default Value |
---|---|---|---|
window_width |
int |
The width of the application window. | 1920 |
window_height |
int |
The height of the application window. | 1080 |
render_width |
int |
The width to render per eye (can be higher or lower than the application window) | 1920 |
render_height |
int |
The height to render per eye (can be higher or lower than the application window) | 1080 |
hmd_height + |
float |
The height of the simulated HMD. | 1.0 |
aspect_ratio |
float |
The aspect ratio used to calculate vertical FoV | 1.77778 |
fov + |
float |
The horizontal field of view (FoV) for the VR rendering. | 90.0 |
depth + |
float |
The max separation. Overrides VR's IPD field. | 0.4 |
convergence + |
float |
Where the left and right images converge. Adjusts frustum. | 4.0 |
disable_hotkeys |
bool |
Disable Depth & Convergence adjustment hotkeys to avoid conflict with other 3D mods | false |
tab_enable |
bool |
Enable or disable top-and-bottom (TaB/OU) 3D output (Side by Side is default) | false |
reverse_enable |
bool |
Enable or disable reversed 3D output. | false |
depth_gauge |
bool |
Enable or disable SteamVR IPD gauge display. | false |
dash_enable |
bool |
Enable or disable SteamVR Dashboard and Home. | false |
debug_enable |
bool |
Borderless Windowed. Should always be used. | true |
display_latency |
float |
The display latency in seconds. | 0.011 |
display_frequency |
float |
The display refresh rate, in Hz. | 60.0 |
pitch_enable + |
bool |
Enables or disables Controller right stick y-axis mapped to HMD Pitch | false |
yaw_enable + |
bool |
Enables or disables Controller right stick x-axis mapped to HMD Yaw | false |
use_open_track |
bool |
Enables or disables OpenTrack 3DoF HMD Control | false |
open_track_port |
int |
UDP Port for OpenTrack | 4242 |
pose_reset_key + |
string |
The Virtual-Key Code to reset the HMD position and orientation | "VK_NUMPAD7" |
ctrl_toggle_key + |
string |
The Virtual-Key Code to toggle Pitch and Yaw emulation on/off when they are enabled | "XINPUT_GAMEPAD_RIGHT_THUMB" |
ctrl_toggle_type + |
string |
The ctrl_toggle_key's behavior ("toggle" "hold") | "toggle" |
pitch_radius + |
float |
Radius of curvature for the HMD to pitch along. Useful in 3rd person VR games | 0.0 |
ctrl_deadzone + |
float |
Controller Deadzone when using pitch or yaw emulation | 0.05 |
ctrl_sensitivity + |
float |
Controller Sensitivity when using pitch or yaw emulation | 1.0 |
user_load_key + |
string |
The Virtual-Key Code to load user preset | "VK_NUMPAD1" |
user_store_key + |
string |
The Virtual-Key Code to store user preset temporarily | "VK_NUMPAD4" |
user_key_type + |
string |
The store key's behavior ("switch" "toggle" "hold") | "switch" |
user_depth + |
float |
The separation value for a user preset | 0.4 |
user_convergence + |
float |
The convergence value for a user preset | 4.0 |
- A multi-display configuration setup in fullscreen mode will be the most compatible - see notes for working setups, but single displays can be used. Some mods or games may not work with a single display
- Install SteamVR
- If you want to use Steam Input
- Open Steam->Settings->Controller
- Toggle on
Enable Steam Input for Xbox Controllers
- Click
Edit
on theDesktop Layout
and then selectDisable Steam Input
- On SteamVR's library page, click the
Controller Icon
and selectDisable Steam Input
- Generally you need to start SteamVR first and separately from the game for Steam Input to work
- Download the latest release and copy the
vrto3d
folder to yourSteam\steamapps\common\SteamVR\drivers
folder - Launch SteamVR once to generate the
default_config.json
and you should see a 1080p SbSHeadset Window
- Close SteamVR
- Edit the
Documents\My Games\vrto3d\default_config.json
as needed - see what each setting does- Set your window resolution to match your fullscreen resolution (i.e. 3840x1080 for Full-SbS or 1920x1080 for Half-SbS)
- Set your render resolution per eye to what you want - can save some performance by reducing this. If your display is half-SbS or half-TaB, then you can try setting this to that half-resolution
- Configure any
Virtual-Key Code
settings to use keys that you want (especiallyuser_load_keys
settings as these load a defined depth+convergence preset) - Single Display Mode: make sure the
debug_enable
flag is set totrue
to make more games work
- Download the latest VRto3D profiles for games and extract them to your
Documents\My Games\vrto3d\
folder - Run SteamVR to verify that you see the Headset window covering your entire display. This is usually not needed before running games.
- The Headset window must be on your primary 3D display
- Dismiss Headset Notice about
Enable Direct Display Mode
as this does nothing
- Try launching a VR game
- Keyboard and Mouse are usable, but make sure the mouse is captured by the 2D game's window
- Move all windows besides the
Headset Window
over to your second display- Some games provide the option to change which display to use - this is preferred over the options below
- Can use mouse to drag over
- Can use Windows shortcut keys to move windowed programs around
Win + Left/Right
- Can use Windows shortcut keys to move fullscreen programs and the SteamVR Headset Window around
Shift + Win + Left/Right
- May need to make the game windowed either in-game settings or with
Alt + Enter
- If running SteamVR in fullscreen mode (not the default but can be set with debug_enable=false)
- Click on the headset window to make it fullscreen on your primary display
- If the Headset Window isn't fullscreen then you may get a black screen or some UI may not render in-game
- AVOID using
Alt + Tab
as this is more likely to exit fullscreen - SteamVR Status will notify you if your headset window isn't fullscreen. Click on the
Enable Fullscreen Mode
notice or the headset window again to fix it
- Click on the game's window on your second display for control input to work
- Mouse controls will not be usable in single display mode as you will click on the headset window in the foreground and input will not register in-game.
- Make the game run in windowed mode either in-game settings or with
Alt + Enter
This will alleviate controller input and fullscreen issues - Make the SteamVR Headset Window in focus on your display
- Press
Ctrl + F8
to toggle locking the headset window to the foreground - Use
Alt + Tab
to switch to the game window (has to be in focus for control input to work) - To quit,
Alt + Tab
to switch to the headset window and pressCtrl + F8
to toggle the headset foregrounding off, and thenAlt + Tab
out
- Complete the Base Installation section
- Optionally set
tab_enable
to true inDocuments\My Games\vrto3d\default_config.json
if you prefer to lose half vertical resolution instead of half horizontal resolution- If using interlaced mode, you want SbS for Column Interlaced and TaB for Row/Line Interlaced
- Download the latest ReShade with full add-on support
- Run the ReShade installer
- Browse to to your
Steam\steamapps\common\SteamVR\bin\win64
folder - Select
vrserver.exe
and click Next - Select
DirectX 11
and click Next - Click
Uncheck All
and click Next, Next, Finish
- Browse to to your
- Download 3DToElse.fx and save it to
Steam\steamapps\common\SteamVR\bin\win64\reshade-shaders\Shaders
- Run SteamVR
- Press
Home
to open ReShade and clickSkip Tutorial
- Select
To_Else
in the menu to enable 3DToElse - Disable ReShade's
Performance Mode
checkbox - Change 3DToElse settings:
- Set
Stereoscopic Mode Input
toSide by Side
(orTop and Bottom
if you settab_enable
above) - Set
3D Display Mode
to the type needed for your display (even anaglyph) Eye Swap
can be toggled if needed- Don't touch
Perspective Slider
- Set
- Enable ReShade's
Performance Mode
checkbox - Once configuration is complete, you can run everything the same way as the Base Installation
- If settings don't save, you may have to manually edit
Steam\steamapps\common\SteamVR\bin\win64\ReShade.ini
and disable Tutorial withTutorialProgress=4
- When XRGameBridge is more stable, that will be preferable to use instead of VRto3D for games/mods with OpenXR support
- SR displays work in either Multi or Single Display environments
- For both, read the Base Installation configuration and usage instructions to ensure that you get a proper 3D image and can control the game
- Complete the Base Installation section
- Install the software package provided with your SR display, if yours did not come with one, install the
SR-VERSION-win64.exe
andsimulatedreality-VERSION-win64-Release.exe
from the LeiaInc Github - Download the latest ReShade with full add-on support
- Run the ReShade installer
- Browse to to your
Steam\steamapps\common\SteamVR\bin\win64
folder - Select
vrserver.exe
and click Next - Select
DirectX 11
and click Next - Click
Uncheck All
and click Next - Select
3DGameBridge by Janthony & DinnerBram
and click Next - Click Finish
- Browse to to your
- Run SteamVR
- Press
Home
to open ReShade and clickSkip Tutorial
- Click on the
Add-Ons
tab - Select
srReshade
in the menu to enable it- Expand the srReshade dropdown and if you get a
Status: Inactive - Unable to load all SR DLLs
then you need to install the SR Runtime + SDK from Leia's Github above - 3D can be toggled on and off by using srReshade's
Ctrl + 2
hotkey
- Expand the srReshade dropdown and if you get a
- Click on the
Home
tab- Enable ReShade's
Performance Mode
checkbox
- Enable ReShade's
- Once configuration is complete, you can run everything the same way as the Base Installation
- If settings don't save, you may have to manually edit
Steam\steamapps\common\SteamVR\bin\win64\ReShade.ini
and disable Tutorial withTutorialProgress=4
- Using WibbleWobble is at your own risk to your monitor/emitter/glasses. It works well but is unofficial
- WibbleWobble works with 3DVision, Open3DOLED, and several DIY hardware solutions
- If you don't need VRto3D features (User Presets, Auto-Depth, Pitch/Yaw Emulation, etc) it will be easier to use the WibbleWobbleVR plugin directly
- 3DVision installation detailed below. See WibbleWobble GitHub for other configurations
- Complete the Base Installation section
- Set the Render Resolution to match your Fullscreen Resolution or something lower for performance
- Set the
window_width
to 2x yourrender_width
- Leave it in the default SBS display mode and leave
debug_enable
as true - If you decide to use 100Hz, set
display_frequency
to50.0
- Use 3D Fix Manager to install the 3D Vision Driver
- If the emitter driver didn't install, browse to the place you installed the manager and run the
Drivers\3DVisionControllerDriver\3dvisioncontrollerdriver.exe
- If the emitter driver didn't install, browse to the place you installed the manager and run the
- Download the latest WibbleWobble Release and extract it somewhere without spaces in the path like
C:\
- Under the
WibbleWobbleClient
folder, runRegister.bat
as an administrator and replyYes
if prompted - Under the
WWReshadeAddon\Reshade
folder, run the included ReShade Setup- Browse to to your
Steam\steamapps\common\SteamVR\bin\win64
folder - Select
vrserver.exe
and click Next - Select
DirectX 11
and click Next - Click
Uncheck All
and click Next, Next, Finish
- Browse to to your
- Under the
WWReshadeAddon\Release\x64
folder, copy all files to yourSteam\steamapps\common\SteamVR\bin\win64
folder - Download the latest CRU Release and save it to your WibbleWobble folder
- Run
CRU.exe
and grant it admin- Take note of your monitor's EDID (first 7 characters in the dropdown list)
- Exit CRU
- Download the latest NvTimingsEd Release and save it to your WibbleWobble folder
- Run
NvTimingsEd.exe
and grant it admin- From the drop down list, select your monitor's EDID (AUS_27B1 for Asus PG278QR for example)
- Select the framerate you want to run 3D at. 100Hz is recommended for performance/stability
- Click
Edit
but don't change anything - Copy the exact refresh rate for WibbleWobble's
Sync Rate HZ
- Copy the
X
value for WibbleWobble'sOpen Delay Microseconds
- Copy the
Y
value for WibbleWobble'sOpen Duration Microseconds
- Copy the
W
value for WibbleWobble'sW
- Open Nvidia Control Panel and under the
Change Resolution
tab, setRefresh Rate
to100Hz
or120Hz
based on your preference - Run SteamVR
- Press
Shift + END
to start WibbleWobble - Press
Shift + END
again to bring up the WibbleWobble menu - Press
Shift + /
to (un)focus WibbleWobble (necessary to see anything else on desktop) - Select
Client Config
- Set
Window Size X/Y
for your Fullscreen Resolution - Set
Source Format
toSide By Side Half
- Set
Reprojection
toDisabled
- Click
Save
andX
to close the window
- Set
- Select
Game Config
- Set
Window Size X
to be your VRto3D horizontal render resolution - Set
Window Size Y
to be your VRto3D vertical render resolution - Click
Save
andX
to close the window - This may crash SteamVR, just close out and try again
- Set
- Select
Emitter Config
- Set
Sync Rate HZ
to match your exact refresh rate from NvTimingsEd - Click
Nvidia Config
- Select
Enabled
- Set
Open Delay Microseconds
to the NvTimingsEdX
value - Set
Open Duration Microseconds
to the NvTimingsEdY
value - Set
W
to the NvTimingsEdW
value - Click
Save
andX
to close the window
- Select
- Click
Save
andX
to close the window
- Set
- Press
Shift + END
to close the WibbleWobble menu - Use
Shift + /
to focus/unfocus WibbleWobble when starting VR games/mods - Close the
SteamVR Status
window to completely exit out of things
- Press
- Edit
Steam\steamapps\common\SteamVR\bin\win64\ReShade.ini
and disable Tutorial withTutorialProgress=4
andPerformanceMode=1
- If you experience ghosting, try turning on your monitor's
Ultra Low Motion Blur
orULMB
feature. You may have to enable 3DVision in Nvidia Control Panel for this setting to be available
- Once configuration is complete, you can run everything in single display mode similar to the Base Installation
- Start SteamVR
- Press
Shift + END
to start WibbleWobble - Press
Shift + /
to unfocus WibbleWobble (Don't useCtrl + F8
!) - Launch VR Game/Mod
- Press
Shift + /
to focus WibbleWobble (Don't useCtrl + F8
!) Alt + Tab
to the game window for controls to work if the game window wasn't already active- Mouse controls can work on a single display as long as you are clicking somewhere on the game window that is covered by WibbleWobble
- The primary display will be where the "Headset" window is located and should be 3D capable
- The game's main window has to be in focus for control input from your mouse/keyboard/controller to work
- SteamVR may still complain about Direct Display mode, but this can be safely dismissed
- Exiting SteamVR will "restart" Steam - this is normal
- Overlays generally won't work on this virtual HMD
- XInput controller is recommended (required for Single-Display mode)
- SteamVR doesn't support HDR currently
- AutoHDR may work, but some games will be too dark or too bright
- Some mods/games may override your VR settings
- DLSS, TAA, and other temporal based settings often create a halo around objects. UEVR has a halo fix that lets you use TAA, but others may not
- This project is primarily targeted for VR mods of flatscreen games, not full VR games. As such, there is only HMD pitch & yaw emulation and no VR controller emulation
- Several VR controller only games can be made to work by using Driver4VR, a paid SteamVR Vive controller emulator. Games with mainly pointer controls work ok. Games with a lot of interaction/movement don't work well.
- Optional HMD
pitch_enable
andyaw_enable
emulation can be turned on to help with games or mods that need it (maps to XInput right stick)- Reference Virtual-Key Codes to find the strings to use for these hotkeys
- The
ctrl_toggle_key
can be set and used to toggle these settings on/off in-game (only functions ifpitch_enable
and/oryaw_enable
is set to true). Thectrl_toggle_type
can be set to either"toggle"
them on/off or"hold"
that disables them while the button is held - The
pose_reset_key
can be set to allow resetting the view to the original position and orientation - Both of these keys can be set to XInput buttons & combinations or single keyboard/mouse keys as outlined in User Settings - Load Keys
- The
pitch_radius
can be set to make the pitch emulation move along a semicircle instead of just tilting up/down in place
- OpenTrack 3DoF support is available over UDP loopback at the default 4242 port when
use_open_track
is true. It can be used in combination with Pitch/Yaw emulation
- If you swap between different convergence settings in-game, sometimes you will end up with black bars on the sides of the screen or you may not see a change immediately. If you reload/restart/reinitialize the VR mod, you should see the change
- It is recommended to use a single convergence setting for all your presets given the above issue with some VR mods
- Create any number of user depth/separation & convergence hotkeys in the
user_settings
area of thedefault_config.json
- A user preset looks like this:
-
{ "user_load_key": "VK_NUMPAD1", "user_store_key": "VK_NUMPAD4", "user_key_type": "switch", "user_depth": 0.5, "user_convergence": 0.1 },
- A Load key and a Store key can be configured to load and save Depth/Separation and Convergence settings for a preset
- Load keys can use XInput buttons & combinations as well as single keyboard/mouse keys
- The Guide button can be used, but not in combinations
- XInput Combinations can be set like this
"XINPUT_GAMEPAD_A+XINPUT_GAMEPAD_B"
- Store keys can only use single keyboard/mouse keys
- Reference Virtual-Key Codes to find the strings to use for these hotkeys
- Load keys can use XInput buttons & combinations as well as single keyboard/mouse keys
- The Load key can be configured to
"switch"
to the user depth/separation & convergence setting,"toggle"
between the preset and the previous setting every 1.5s, or"hold"
the user setting until the key is released - The Store key will update your user Depth/Separation and Convergence setting to the current value (this only saves while the game is running - you need to create a game profile to store it permanently)
- It is recommended to have a single user preset of
"switch"
type that matches the default depth/separation & convergence so you can easily get back to the default
- Modify or copy and create user preset(s) in
default_config.json
for the game you want to play - If applicable, modify
hmd_height, pitch_enable, yaw_enable, pose_reset_key, ctrl_toggle_key, ctrl_toggle_type, pitch_radius, ctrl_deadzone, ctrl_sensitivity
for the game profile - If the game is already running, use
Ctrl + F10
to reload thedefault_config.json
with your new settings and presets - Adjust depth/separation (
Ctrl + F3
andCtrl + F4
) & convergence (Ctrl + F5
andCtrl + F6
) for a preset - Use the configured
user_store_key
to temporarily save the current depth/separation & convergence values to the preset - Repeat 4 & 5 for each preset you need
- Adjust depth/separation & convergence back to what you want the default to be (if you have a default
"switch"
preset, you can use its configureduser_load_key
) - If applicable, adjust the
ctrl_sensitivity
withCtrl -
andCtrl +
and thepitch_radius
withCtrl [
andCtrl ]
- Save the profile with
Ctrl + F7
- Open your new profile from
Documents\My Games\vrto3d
in a text editor and make final adjustments like: making all the convergence values match to avoid rendering or performance issues, changing virtual-key mappings, or tweaking other values/settings - Close out of SteamVR and the game and restart the game. You should hear a loud beep to indicate the profile loaded. Test the profile and you can still repeat steps 4-10 if needed
- Share your
Documents\My Games\vrto3d\Game.exe_config.json
with others
- Make sure you set your displays to EXTENDED MODE or this will not work
- Here are some example multi-display configurations that are confirmed to work:
- A single display connected to your computer twice - switch between the inputs on the monitor as needed to move windows around
- Multiple displays connected - easier to move things around and manage
- A dummy passthrough or dummy plug works, but you may not be able to see what you're doing
- A software virtual monitor will work for non-3DVision setups, but will prove tricky
- This IDD one works
- This one also works
- Sunshine/Moonlight is compatible
- The first thing to try is deleting your
Steam\config\steamvr.vrsettings
- If you have used other SteamVR drivers that also create a virtual HMD, you will need to disable and/or uninstall them
- Run SteamVR
- On the SteamVR Status window, go to
Menu -> Settings
- Change to the
Startup / Shutdown
tab - Click
Manage Add-Ons
- Turn
Off
any virtual HMD drivers (ALVR, VRidge, OpenTrack, VCR, iVRy, etc) - You can also try forcing SteamVR to use the VRto3D driver by editing
Steam\config\steamvr.vrsettings
and under the"steamvr" : {
section, add this line:"forcedDriver" : "vrto3d",
- if issues still arise, try a Clean SteamVR Install and delete your
Steam\steamapps\common\SteamVR
folder
- If you have a VR headset and run into issues with this driver, here's some things to try:
- Disconnect VR headset from computer
- Clean SteamVR Install
- Set SteamVR as OpenXR Runtime
- Clone the code and initialize submodules
- Define
STEAM_PATH
environment variable with the path to your main Steam folder - Open Solution in Visual Studio 2022
- Use the solution to build this driver
- Build output is automatically copied to your
SteamVR\drivers
folder