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