NVIDIA NR runtimes 310.8 and 310.9.16: what they contain, what each setting does, what they cost

Written by Claude Opus 5.5 (Claude Code, high effort) on behalf of GrimsVerk, who skimmed it. The research, the test-build code changes, the measurements and this text are Claude's work.

More pages: static analysis (full technical) · ControlMask how-to · noisy-domain NR feasibility · source patch of the research build: research-build-source.patch

Witcher 3 v5.01 · 4K output, DLSS RR + FG, path tracing · a ReShade colour preset active · RTX 5080, driver 617.14 · OptiScaler-NR v0.3.8 research build: settings and runtime versions switched live, so every comparison of a subject is the same frozen photo-mode frame · captures: picture before and after NR from the fork's screen capture, mean of 4 presents · 2026-10-16/17

In short

The three model and runtime combinations

There are two different neural networks. The old one ("honest tench") is in both DLLs, byte for byte the same weights. The new "small" network is only in 310.9.16 and is its default. So there are three combinations to compare.

GPU memory by working scale

Model cost by working resolution

GPU time of the NR model alone (the fork's timer around NVIDIA's evaluate call), 4K output, the frozen tavern frame, two shuffled rounds of about 14 s each. The game's own frame rate is not part of this. The cost is almost exactly a fixed part plus a part proportional to the number of pixels the model works on.

What a fixed cost in milliseconds does to fps

fps = 1000 / frame time, so the curve is steep at high fps and flat at low fps. Adding the same few milliseconds moves a 120 fps frame much further down the curve than a 30 fps frame. That is why a model does not cost a fixed percentage of fps: its cost in ms is fixed, its cost in fps depends on where you start. Each coloured step starts at a frame rate without NR, goes right by the model's fixed cost in ms (the same length everywhere), then drops to the curve: that drop is the fps you lose, and it is much bigger at 120 fps than at 30 fps.

With DLSS frame generation the model runs once per rendered frame, and every rendered frame is presented together with one generated frame, so presented fps is about 2 × rendered fps (the generated frame is interpolated from NR's output). The table assumes that and nothing else; real games add small overheads.

Compare pictures

Wipe: drag across the picture. Flick: hold the button or the space bar to show B. Crops are 1:1 pixels (4K); "Full frame" is scaled to 1920×1080.

Every setting and its effect

Change against the default of the same runtime, all at working scale 1.0, mean |difference| in 8-bit units. The noise floor is the "Default again" row: anything at or near it is no visible change. Detail difference = the fine (high-pass) part of NR's edit that differs from the default's edit, as a fraction of the default's fine edit (0 = the same fine edit). Shift = mean brightness change, Sat = mean saturation change, Contrast = change of the luminance spread. Flicker = mean frame-to-frame change in the frozen scene (lower is calmer).

Working resolution: detail lost against full size

Each model at working scale 0.33 to 1.0 with guided residual enlargement (Transfer 5), compared with the same model at 1.0 in the same frame. "Detail lost" is the fine part of NR's edit that is missing or different compared with the full-size edit, as a share of the full-size fine edit. The dotted line is the noise floor (the same setting captured twice).

Detail against model cost

Each model is measured against itself at full size, so every model sits at 0 at scale 1. This chart shows what shrinking costs each model in detail and saves in ms, not which model is better. How far the new small model is from the old one at full size is in "Old against new" below (about 0.2-0.5 on the same scale).

ControlMask: per-pixel control of NR (new, research build r8)

NVIDIA's runtime accepts a per-pixel mask, DLSSNR.ControlMask: red = how much of NR's result is used (intensity), green = the local tone input, blue = the local structure input. The fork never sent one. The research build now builds it on the GPU every frame from depth, brightness and motion, at the model's working size, just before NVIDIA's evaluate. Cost: about +0.13 ms at 4K (measured, model timer, small model). All pictures: The Witcher 3, 310.9.16 small model, same frozen frame per scene.

Does each channel do what NVIDIA's code says? (mean |difference|, 8-bit; the noise floor row is the same setting captured twice)

Settings (OptiScaler.ini, section [DlssNr])

Old against new

How this was measured

Measurements and pictures by a research build of GrimsVerk's OptiScaler-NR fork. Pictures are high-quality JPEG; metrics were computed on the lossless captures.