Skip to content

TheNewJavaman/unreal-vr

Repository files navigation

UnrealVR

No releases yet

Adds virtual reality support to flatscreen Unreal Engine games

Features

  • Stereoscopic Rendering: Presents the game in full 3D, not a flatscreen in VR
  • 6 Degrees of Freedom: Headset movement and rotation is tracked in-game
  • Configurable Profiles: Save and share your settings for each game

Coming Soon

  • Input Binding: Map VR controller buttons to game actions
  • Controller Tracking: Link hand movement to in-game objects
  • Synchronized Rendering: Renders both eyes at the same time, reducing discomfort

Improvements

There are so many features I want to add, and so many refactorings that could improve the code.

  • Input Binding: Map VR controller buttons to game actions via keyboard/mouse/gamepad input. Add a button to reset the view rotation/position.
  • Controller Tracking: Link hand movement to in-game objects. Make them rotate and move according to how your hands move. Allow configurable offsets for the UI so that it feels like your hand is holding a gun, for example.
  • Synchronized Rendering: Renders both eyes at the same time, reducing discomfort. This one isn't as important because the mod seems to perform pretty well so far. But at lower framerates, some people may experience discomfort is the positions of objects aren't aligned for the left/right eyes.
  • Optimization: Do more profiling to increase framerate. VR should be accessible to as many people as possible, so we as a community need to make sure that our mods aren't too limited by hardware.
  • VR For All: Abstract the graphics, VR, and game engine services into interfaces that can be implemented for other graphics APIs/VR runtimes/game engines; this will definitely be necessary for D3D12, and if I want to add support Vulkan/OpenGL, it'll be even more important. Probably won't be used for other game engines, but if someone uses a game engine written in any language that can interop with C++, imagine the possibilities! Probably not useful for VR, though, since OpenXR is the future... hopefully there won't ever be a replacement VR runtime that I'll have to add support for.
  • UE Version Detector: Reduces the configuration necessary for new games. Would use the same information as the Details pane in File Explorer to determine the Unreal Engine version.
  • Console Output: Enable/disable the log window; also, don't use a basic terminal for output, show it in the nice-looking app UI.
  • Unreal Engine 5: It's not too different from UE4, so add support to UML if Russell.J doesn't have time
  • Build System: Use meson so it's faster and cross-platform. Would also reduce dependence on Rider/Visual Studio
  • Stop Using UML: Build a home-grown solution that's better for this specific use-case
  • Dependency Injection: Inject service class instances at runtime so there aren't as many static members

Preview

Contribute

If you have any ideas for features or want to implement a feature yourself, please email me or send a DM on Discord to TheNewJavaman#3966.

Development Tools

  • Rider 2022.1 EAP: For writing C++ code; it has a much better code formatter than Visual Studio, is much faster, and has superior refactoring capabilities. Also supports Python for the rizin script. Get it for free via the early access program in the Jetbrains Toolbox app
  • Visual Studio 2022 Preview: For writing C# code or HLSL shaders; Rider doesn't support WinUI nor Hot Reload; also, VS supports profiling both the CPU and GPU for C++, compiling HLSL, and packaging the final app. Get it for free via the Visual Studio installer
  • Sourcetree: My favorite Git GUI; the main thing is its support for multiple stashes; get it for free from Atlassian
  • Rizin: Used to reverse engineer UE/game binaries. Get it for free from GitHub

Rizin Cheatsheet

My most-used commands for reverse-engineering game binaries

  • [command]?: Show the help menu
  • o [filename]: Open a binary (exe, dll, lib)
  • ipd [filename]: Open a debug symbols file (pdb)
  • Po [filename]: Open a project (rzdb)
  • Ps [filename]: Save project to file (rzdb)
  • aa: Run quick analysis on the binary (better for no PDB)
  • aaa: Run longer analysis on the binary (better for PDB, includes function autonaming)
  • aflq~[function]: Search for a function
  • s [address|function]: Go to an address or function
  • zaf [function] [signature]: Create a signature for the current function
  • z: List signatures
  • zos [filename]: Save signatures to file (sdb)
  • zj | python rizin_to_uml.py [numbytes]: Print signatures in UML format; see rizin_to_uml.py

Sponsor this project

Languages