CyberpunkVR Port
A 6-DoF VR mod for Cyberpunk 2077, built as a RED4ext plugin -
CyberpunkVR_Stereo is the ONLY native plugin: it drives OpenXR head
tracking, real stereo, the in-headset overlay and the full-body VR avatar with
motion-controlled hands that used to live in a second DLL; and a set of CET / redscript mods add VR
weapon aiming, the physical reload, motion melee, hand-to-holster equipping and more. Everything is
configured in the VR menu (hold L3+R3) or the in-headset overlay (F10).
Repository: https://github.com/dariulone/cyberpunk-vr-port
⚠️ Experimental community mod. Not affiliated with CD PROJEKT RED. Use at your
own risk and keep backups of your saves.
Features
- Real stereo, not reprojection. The second eye is an actual engine view — a
render-to-texture camera on the player entity that runs the frame graph for its
own eye, from its own position, with its own projection. It falls back to mono
automatically whenever that view has nothing fresh to give (menus, loading).
- OpenXR head tracking injected into the REDengine render path, with the
submitted frustum matching the one the engine actually rendered on both axes,
plus world-scale / IPD controls. Each frame is submitted with its per-eye depth
(
XR_KHR_composition_layer_depth), so the runtime's reprojection knows where
things are; generated frames carry none.
- Each eye renders its own lens window (asymmetric projection, on by default,
Stereo → Asymmetric projection): exactly the headset's off-centre field of
view, at full pixel density and with square pixels, instead of a symmetric
frustum that renders past the lens. Culling, occlusion, light lists and sun
cascades follow each eye's window. The screen-space passes that assumed a
centred monitor camera are corrected by shader twins — volumetric fog,
screen-space and planar water reflections, cone AO, sun contact shadows,
particles (they face the eye, not the screen), screens and holograms, and the
Sandevistan — and the two eyes' reflections, AO and contact shadows are merged
as one wide display at their inner edges. Exposure is metered from the place
around you, so it no longer swings when you turn your head, and the sun-shadow
cascade boundary no longer sweeps across the ground. With the switch off,
off-axis lenses (Quest 3 and family) get a frustum sized to COVER the panel.
- Native VR HUD panels with per-element placement, size and visibility,
adjustable free-look cones, and separate interaction/dialogue and loot panels
(head-locked by default). Scanner, CCTV, Basilisk and sniper displays have
dedicated head-following channels; hit and kill markers have their own
head-locked window. World markers retain their native depth and are projected
separately for each eye. Popups that lay one flat picture over the frame
(phone, radio, vehicle list, messages, shards) no longer double it.
- Native VR frame generation with game motion vectors and depth: NVIDIA DLSS
Frame Generation through the game's own
nvngx_dlssg.dll (the default),
FidelityFX with or without optical flow, and NVIDIA OFA + FidelityFX, with
adaptive pacing and a performance overlay. Inputs come from DLSS, DLAA, native
TAA, FSR 2, FSR 3, FSR 4 and XeSS; on non-NVIDIA GPUs optical flow falls back to
FidelityFX. Ray-tracing motion formats and live RT changes are supported. CAS
sharpening processes real captures before frame generation, not interpolated
frames. CAS defaults to off and is bypassed automatically while game DLAA is active.
- Upscalers per eye. FSR 3, FSR 3.1/4 and XeSS get a context per eye, so
neither eye accumulates the other's history (blur and an IPD-wide ghost).
- Optional GPU savers: fixed foveated DLSS, fixed peripheral VRS, a
hidden-area mask for the lens edges, and sun shadows rendered once for both eyes.
- The F10 overlay in both eyes, so a settings panel no longer costs you
stereo the way a full-screen game menu does.
- The two views agree. Sun cascade shadows, the shader clock, the foliage
wind volume and the reflection march are all shared engine structures that the
second view used to rebuild from its own frustum — which is where blinking
shadows, dead flags, jittering vegetation and a mirror-finish ceiling came
from. All four are lent from one view now.
- The second view builds its own frame, rather than being handed MAIN's bytes.
It keeps its own depth range (borrowing MAIN's near emptied the clustered light
grid and put every lamp out indoors), the engine's own environment-override pass
is run for it instead of copied — which is what brings the scanner's green tint
back — and its composition is lent so the pass that draws the scanner outline
executes for it at all. The finished frame is then taken at the node epilogue,
from the engine's own acquire barrier, instead of mid-chain.
- Every view is identified by name, never by elimination. The port used to call
anything that was not the second eye "MAIN" — including the flat desktop window
and every reflection-probe face — and that one habit produced a white second eye,
a hang on ESC in a braindance, and a braindance with no colour grade. Views are
matched by their virtual-camera name hash now; one that cannot be named is passed
through untouched.
- Braindances are stereo. A braindance renders through a camera no component
points at, so the two eyes used to be built from different bases, at different
rates, and the frame was submitted against a pose its pixels were never drawn
from. One base, one head sample and one pose label serve both eyes, and the eye
separation goes where the picture is actually rendered from.
- Cameras you take over are yours. A surveillance camera or the AV turret keeps
its own aim as the base and the head composes on top, at the headset's own fov,
with both eyes on the lens rather than one on the player's body. The turret's
camera never reaches the hook the port classifies cameras at, so it is identified
through the entity the script names and driven through the located buffer; there
is a viewpoint slider for the mission that needs one.
- Full-body VR avatar (VRIK) — body under the HMD, arm-length calibration,
leg IK, real-life squat. Hands are with the controllers, the shoulder girdle
and elbows hang off the BODY rather than the head, and the solve is clocked by
the engine's own animation batch. VRIK suspends itself during cutscenes so the
avatar does not fight an authored scene.
- Roomscale movement, bending and hybrid body rotation with paired headset,
camera and avatar poses, anatomical shoulder reach and preserved foot contacts.
- Gesture swimming and grip-based ladder climbing, including water-aware
body posture, stroke-dependent propulsion and authored ladder hand poses.
- Third-person and external-camera stereo, plus HMD aiming and steering for
the Basilisk and head-driven surveillance cameras and story sniper sequences.
- Tactical belt and physical grenades, with carried magazines, authored
grenade grips and male/female belt assets.
- Physical body rotation (optional) — the character turns to follow the
headset through the game's own motion, independently of the VR view, so the
mesh, the collision capsule, the aim and the movement direction all move with
it. The view does not move and the hands stay on the controllers.
- Physical crouch — squat in the room and the character crouches (on by
default, 45 cm, Controls → Physical crouch depth); the VR camera stays put
through weapon changes.
- Paired animations get the body. The game's own reload (the Reload button)
eases both arms and fingers onto its animation and back. Grapples and
takedowns, picking up, dropping and hiding a body, and finishers hand the body
to their animation; while carrying, the left arm holds the body and the right
hand keeps aiming. Roomscale stays as it is.
- The physical reload. Grab the magazine with your free hand's grip, pull it
out along the path the weapon's own well defines, carry it, push it home; rack
the slide with the other palm and release it with the right stick click. Ammo
and sound follow the hands, not a timeline. Thirteen weapons are tuned
individually — Unity, Tamayura, Tsunami Nue, Constitutional Liberty, Arasaka
Kenshin, Militech Lexington, Militech Omaha, Kang Tao Chao, Tsunami Kappa,
Arasaka Yukimura, Militech Ticon, Silverhand's Malorian, and the Malorian
Overture revolver, which rolls its cylinder, ejects its cases and reloads from
a real speedloader.
- Decoupled VR weapon aim — bullets follow the real weapon muzzle, not the
camera. The hit is redirected inside the engine's own
PhysicalRay evaluator,
so shotgun spread stays spread and every other shooter in the world keeps
firing from their own barrel. Projectiles leave the muzzle too. Optional
barrel dot in both eyes, scope-zoom aware.
- Recoil in the hands, not the camera — the shot turns the wrist on a damped
spring, every weapon kicks by its own measured amount (scaled by
xr_recoil_scale, 0.7), and the head is never kicked.
- A resting hand and a real two-handed hold — with a weapon out the empty
hand relaxes instead of clawing at nothing, and bringing it to the weapon
offers the support grip: squeeze and the wrist locks on, the off hand steers
the aim from where it was when the grip closed, and the kick drops. Pull the
hand 60 cm off the weapon and it lets go.
- Physical optics — low-magnification scopes are real lenses in the headset
instead of the flat-screen ADS overlay; sniper rifles look through a scope
camera bound to the weapon; collimator reticles are placed by angle along the
sight's own optical axis, so they stay on the bore instead of sliding across
the glass when you look at the sight from the side. Bring your eye to the sight
and it comes closer; no aim trigger needed.
- VR motion melee — real swings trigger the game's native melee along the
blade (native damage/reaction/stamina).
- VR cyberware — mantis blades, gorilla arms, the monowire and the projectile
launcher are driven by your arms, with free-hand gestures from the controllers.
The monowire leaves the forearm housing and its line moves with the body.
- Physical throws — hold the left trigger with a throwable melee weapon,
squeeze the right grip, throw and open the grip. The knife flies nearly
straight, aimed mostly where you looked just before the throw; aim assistance
prefers the enemy nearest that gaze and curves the flight on to it.
- Controller vibration — every shot by weapon class, melee blocks and parries,
bullet blocks and deflections, the tactical belt and the grenade pin
(*Controls → Controller vibration / Vibration str