github 3zwr1/AMD-NR---OptiScaler Alpha
AMDNR-v0.1.0

pre-releaseone month ago

DLSS 5 Neural Rendering on AMD, built into OptiScaler so it works in any Direct3D 12 game OptiScaler already hooks. Everything needed is in the archive — the runtime, the weights, and the installer. There is no second download.

This is a first release. It runs well; parts of it are still being worked on, and those parts say so below rather than in a changelog nobody reads.

What this adds that the standalone runtime does not
Residual composition
The model's change is carried to the full-resolution frame instead of its picture. The frame keeps its own detail; the reduced raster contributes the edit and nothing else. This is what makes a low NR resolution usable rather than just soft — the usual complaint about lowering it.

Three controls, all of which act on the edit rather than the image:

Residual strength — above 1 it amplifies what the model changed. The AMD runtime exposes no intensity parameter of its own, so this is the only way to ask it for more, and unlike a contrast or saturation slider it touches only what the model actually did.
Residual limit — a ceiling on how far one pixel may move, applied to the whole colour rather than per channel. A per-channel clamp lets whichever channel hits the limit first decide the hue of the rest, which turns an over-large edit into a wrong-coloured one.
Residual edge fade — rolls the edit off at the frame border, where the reduced raster has no neighbour and the cubic resample rings on the missing data.
The residual is resampled with Catmull-Rom, not bilinear. It is the only thing carried up from the reduced raster, and a 2×2 average destroys the finest of it first — which is precisely what the model exists to synthesise.

Model interleave
Runs the model every second frame and fills the rest by reprojection, for a large frame-rate gain. How the skipped frames are filled is selectable:

Held frame (default) — nothing is gated. Both frame types are pictures of the same kind, so no per-pixel decision exists that could land differently on one than the other. A decision that flips at the cadence is flicker, which is why the guards that were supposed to prevent it were producing it.
Residual temporal — reprojects the model's edit instead of its picture. The geometry on screen is always this frame's; only the correction is a frame behind.
Standard / Extra temporal — the earlier approaches, kept for comparison.
Honest status: the image is good and flicker is largely gone, but interleave changes the frame pacing — model frames cost more than filled ones, and the uneven intervals can read as choppiness even while the picture looks smooth. If it feels worse than leaving it off in your game, that is worth reporting; it is not something you configured wrongly. Setting a frame-rate limit near your interleaved average evens the intervals out and is worth trying.

Residual temporal (without interleave)
Smooths the model's edit over time and leaves the picture strictly alone.

The network re-decides every pixel on each call, and on emissive content its answer moves between calls even when the scene does not — that is the flicker. Averaging the picture to damp it is what makes ghosts, because averaging a picture means showing an old one. Averaging only the correction damps the same jitter and cannot ghost: every pixel of geometry on screen is still this frame's, at full detail.

Reprojection that knows when it is wrong
Three guards, all geometric. None of them looks at colour — a colour test compares a denoised frame against an un-denoised one and answers differently depending on which it got, and that difference is the cadence flicker.

Velocity dilation — each pixel uses the motion vector of the nearest-to-camera pixel in its neighbourhood, not its own. Without it, a road pixel against a car's silhouette reprojects along the road, lands where the car was, and comes back with car colour — a second copy of the car smeared beside it, every frame.
Temporal motion divergence — follows the pixel's vector back and reads the vector that was there a frame ago. A pixel that claims to have come from somewhere that was standing still is contradicting itself, and that contradiction is how a light's trail gets seeded.
Depth disocclusion, ramped rather than binary. A boolean reject draws the outline of the region it rejected, and that outline is its own artefact.
NR resolution 25–150%
Below 100% the model works small and the residual carries its work up. Above 100% it works on a larger picture than the frame. Cost grows with the square, and the menu says so live under the slider — 125% is 1.56× the model's time, which is not obvious from the number.

Also
1–3 neural passes.
Dynamic NR resolution — stepped, holds a frame-time target.
Graphics wait — the runtime's one-pixel-draw wait, with the rasteriser and output-merger state recorded and restored. It refuses outright on any command list whose state is not fully known and falls back to the compute wait, so the worst case is the old behaviour rather than a glitch.
Game profiles and quality presets.
Live readout — what the pass is actually doing: NR frames/s, model frames/s, the cadence you are really getting, and frames that carried no NR at all.
Credits
This build stands on three projects. It is a wiring job over their work, not a replacement for it — if you find it useful, the thanks belong upstream.

DLSS-NR on AMD — danielblnc The neural runtime and weights shipped here are his v0.3.1 release, redistributed unmodified so the package works without a second download. Everything the network actually computes is his.
DLSS 5 AMD project — TheAutomatic Reference and groundwork for DLSS 5 Neural Rendering on AMD hardware.
Several techniques here follow published work: the temporal guards are adapted from AMD's FidelityFX FSR2, the colour clip is Playdead's, the difference-gated temporal mode follows lmxxf's native_output_smooth, and the cube-scaling gamut handling is hhkbble's from the multi-pass side of this fork.

Not endorsed by, affiliated with, or supported by NVIDIA, AMD, or any game publisher. This drives an undocumented feature directly. Use at your own risk.

Reporting
Logging is on by default in this build. OptiScaler.log appears in the game folder — attach it, and say which game and which GPU. amd_presr.log and amd_bridge.log are the useful ones when the neural pass specifically misbehaves.

Join our discord : https://discord.gg/AMDNR

Support the project

Kofi: https://ko-fi.com/3zinr

Don't miss a new AMD-NR---OptiScaler release

NewReleases is sending notifications on new releases.