An unofficial beta built on
tig3rmast3r's v0.2.1.
Use the NVIDIA backend if you have an NVIDIA card
Recommended: set the backend to NVIDIA in the tray. The shipped default
is still FidelityFX, which works on any card, but almost everything gained in
this release is on the NVIDIA path.
The reason is where the optical flow runs. NVIDIA cards have a dedicated
hardware engine for it - the Optical Flow Accelerator - which is idle while
your game renders, so frame generation costs you almost none of the GPU the
game is using. About 86% of the work goes there. FidelityFX computes the same
flow in ordinary compute shaders, on the very same shader cores the game is
drawing with, so it competes with your frame rate instead of hiding behind it.
That is why the headroom improvement below - needing roughly 48 FPS natively
rather than 57 to hold a steady 90 - is NVIDIA-only. On FidelityFX the work
cannot overlap, so there is nothing to win by moving it.
If you are coming from v0.2.2_beta, the headline is that the layer now
keeps 90 in scenes where it used to give up — and, more importantly, gets back
to 90 on its own once a demanding scene is over. Everything from the first beta
is still here and listed below.
New in beta2
- It recovers. The most common complaint about beta1 was that a demanding
scene would knock it down and it would stay down — back in an easy scene, or
even back at the menu, it would sit at a lower frame rate until you restarted
the game. The layer paced its own frames against an internal schedule that
could drift out of step with the headset's refresh and had no way to drift
back. It now corrects itself against the timing the runtime reports, every
frame, so a bad patch lasts seconds rather than the rest of the session. - More headroom before it gives up. The frame generation work used to be
queued behind the game's own rendering, so the game had to reach roughly
57 FPS on its own before the layer could hold 90. On NVIDIA it now runs
alongside the game's rendering instead, which brings that down to roughly
48 FPS. If you were just short of a steady 90, this is the change most
likely to get you there. - Fewer frames thrown away. When a frame ran long the layer would often
skip the next display slot entirely rather than fill it, which reads as a
hitch. It now only skips when a submission would genuinely land on top of
the previous one. Measured across a session, frames landing correctly on the
display's own cadence went from 92% to 98%. - Synthetic frames placed where they are actually shown. The generated
frame was always the exact midpoint between two rendered frames, which is
only correct when the game runs at exactly half the refresh rate. Away from
that it was shown slightly early or late, and — because the error follows
your frame time — alternately early and late as frame times swing. A
constant offset would be invisible; an alternating one reads as judder.
It is now placed to match when it is actually displayed. - Stability fixes in the new NVIDIA path: GPU work is properly drained when
a swapchain or session goes away, and the generated frame is prepared in the
right resource state rather than relying on the driver to tolerate it.
The first three are NVIDIA-specific or benefit NVIDIA most. FidelityFX is
unchanged from beta1 except where noted.
Still in from beta1
- Steady 90 FPS at high headset resolution. At 27 Mpx per eye the layer
previously produced fewer frames per second than running without it. The
runtime was being told the layer's frame cost about a millisecond when the
real work was around 15 ms, so it scheduled against numbers that described an
empty loop. It now measures the real work, which is also what makes fpsVR's
GPU and CPU frame times meaningful again. - Frame generation engages immediately. It could previously sit idle for
minutes on a demanding scene — generating frames the whole time, at full GPU
cost, with none of them being displayed — and then suddenly start working when
you looked at something simple. The layer now decides it needs to pace itself
by measuring the runtime rather than by guessing from the game's frame loop. - No more one-second dropouts. Changing settings, loading a world, or the
game recreating its swapchains each cost a full second of generation.
Transitions are now seamless. - Generation no longer stops permanently after a menu or loading screen.
A clock inside the layer could drift a second per second until the game was
predicting poses ten minutes into the future; once there, it never recovered
for the rest of the session. - Games that would not start in VR now start. Titles that create many
swapchains — The Callisto Protocol under UEVR, for example — exhausted the
runtime's swapchain budget and failed at session creation. The layer now only
takes resources for swapchains that actually carry the image you see. - Luke Ross mods: black flashes and double vision fixed. Cyberpunk 2077 was
tearing down and restarting the layer's internals about three times a second,
and separately publishing the previous pair's frame as the current one. - Higher resolution ceiling. Roughly 340 MB of per-frame copying moved off
the critical path, taking the workable ceiling from about 15 to about
24.5 Mpx.
Changed default
Unchanged from beta1, repeated here because it still catches people out:
FidelityFX honours the Optical flow resolution tray setting, which it
previously ignored and ran at full resolution. With the shipped default of 50%
this makes FidelityFX noticeably cheaper, at some cost in motion-vector detail.
Set nvidia_input_scale=100 in ofxr_bridge.ini to restore the old behaviour.
The tray menu entry is called Optical flow resolution rather than
"NVIDIA OFA resolution", because it applies to both backends. The ini key name
is unchanged.
Installing
Unzip anywhere and run OFXRBridgeTray.exe, then Arm bridge. Keep
OFXRBridgeTray.exe and the ofxr folder together. If you have an earlier
version armed, disarm it first.
Known issues
- The frame generation work sharing the GPU with your game is new. If a game
that was steady on beta1 is worse here, please say so and include a flight
log — that is the case most worth hearing about. - Very high per-eye resolutions remain the limit. If frame times are erratic,
drop the resolution first before changing anything else; the layer's cost
scales with it.
Tested
Microsoft Flight Simulator 2024, Cyberpunk 2077 (Luke Ross mod), The Witcher 3,
and UEVR titles including The Callisto Protocol, on SteamVR with a Pimax
Crystal Super at up to 4172×3268 per eye, on both the NVIDIA OFA and FidelityFX
backends. VDXR is covered by the earlier work this builds on; PimaxXR is not
tested.
This is an experimental beta and compatibility is not universal. Please report
results — working and not — on this fork's
GitHub Issues, with an OFXR flight log where you can. Enable one
by setting logging_enabled=1 under [diagnostics] in ofxr_bridge.ini; logs
are written next to the armed layer under
%LOCALAPPDATA%\OFXR Bridge\RuntimeLayer\v151\.
Upstream results are collected in the
OFXR Bridge Compatibility Chart.