Rhaelag wrote: Tue Sep 08, 2026 3:30 pm
It might just be me, but it didn’t work on a 3080 Ti (latest drivers).
Just a quick question, out of curiosity, for those of you for whom it does work: does it have a big impact on your FPS?
New version released~! Installer now checks if you are using correct .dll file from RHI discord. You should use special one prepared for RTX 20-40 series.
If you have already installed whole modification, be sure to overwrite file in main game folder in /host64/ folder, to make it work!
WAR-NR 0.1.8-beta — nameplates fixed, ambient occlusion rebuilt, first screen-space indirect light
TL;DR: the names above characters render correctly again, ambient occlusion no longer darkens spells and fire, and there is a new AO mode that adds bounced light from the screen. Everything is tunable while playing, no restart.
Default shipped with config that have least impact on game aesthetic. But if you want more "real" look, change nr_style = 2 to 1 in war_sidecar.cfg.
What changed since 0.1.6
- Names and health bars above characters render correctly again. In every earlier beta they came out as horizontal stripes instead of text. The code was never at fault: our d3d9.dll was built with MSVC, and DXVK is only built and tested with MinGW. The very same source built with each compiler gives a correct picture from one and broken nameplates from the other. This build comes from MinGW, like DXVK's own releases.
- Ambient occlusion no longer darkens spells, fire and smoke. The layer now carries two more pieces of per-pixel information through the frame: the material of the surface under the pixel (a shader-variant id written into the game's otherwise unused stencil buffer) and how much of the pixel is covered by effect sprites (accumulated in the scene target's unused alpha channel). AO uses both to leave effects alone in proportion to their coverage, instead of guessing from brightness.
- New ambient occlusion mode with indirect light. war.aoMode = 1 (the new default) replaces the two horizon angles of GTAO with a 32-sector visibility bitmask, so gaps between objects stay open, and gathers bounced light from the screen: walls tint the ground at their base, a red banner warms the floor under it. war.giIntensity sets how much, war.giRadius how far. Mode 0 (plain GTAO) is still there for A/B.
- Sampling noise rebuilt. The old noise produced faint concentric rings around objects that drifted like flowing water, easiest to see on flat floors from above. Gone in both modes.
- Tuned defaults. The package ships the settings from a full day of in-game testing: AO radius 80, intensity 0.9, contrast 1.75, quality 1, indirect light 1.6, colour restore and sharpening on. Every key in war-live.conf is live: save the file and the change applies within a second, WAR_d3d9.log confirms it.
- Confirmed in game: depth-aware colour restore (a character in front of a wall keeps its own colour instead of picking up the background's) and the 4x character shadow map, both shipped in 0.1.7 but untested at the time.
Debug views, if you want to see the pieces
war.aoDebug in war-live.conf: 1 = occlusion only, 2 = indirect light (mode 1) or normals (mode 0), 3 = view distance, 4 = material class, 5 = shader variant, 6 = what AO leaves alone (green) and what it touches (red). 0 = back to the picture.
Known issues
- Ambient occlusion still darkens the nameplate text slightly, because the game draws it before the point in the frame where our passes run. Cosmetic; war.ao = False switches AO off entirely if it bothers you.
- The neural rendering style shipped as default (nr_style = 2 in war_sidecar.cfg) has crashed the DLSS host on some setups in the past. It runs fine on the test machine; if the helper keeps restarting, set it to 0.
- Mode 1 with indirect light takes twice the samples of mode 0 at the same quality; that is why the default is quality 1. Quality 2 or 3 if you have GPU time to spare.
config files if someone want to double check.
war-live.conf
Code: Select all
war.ao = True
war.aoRadius = 80 # occluder reach, world units (roughly centimetres)
war.aoIntensity = 0.9 # 0..1 darkness
war.aoPower = 1.75 # contrast, 1 = linear
war.aoFade = 5000 # view distance where the effect has faded out
war.aoProtect = 0.85 # bright pixels above this luminance are left alone
war.aoQuality = 1 # 1 fast, 2 default, 3 high
war.aoDebug = 0 # 0 off, 1 occlusion only, 2 normals (mode 0) / indirect light (mode 1),
# 3 view distance, 4 material mask by class, 5 by shader variant,
# 6 the resulting protection decision (green = AO leaves it alone)
war.aoMode = 1 # 0 horizons (GTAO), 1 visibility bitmask (SSILVB)
war.aoThickness = 50 # assumed surface thickness, world units, mode 1 only
war.giIntensity = 1.6 # indirect light from the screen, mode 1 only; 1 shows walls on the ground, 3-4 grass
war.giRadius = 400 # gather range for bounced light; keep >> aoRadius
war.softParticles = True # fade effect sprites where they cut into geometry
war.softFade = 60 # fade distance, world units (roughly centimetres)
war.materialMask = True # material class per pixel in the stencil buffer
war.maskAoProtect = 96 # classes AO leaves alone, bits by class: UnlitProp | Particles
war.maskSkip = 16129 # classes that do NOT write the mask: Unknown|Ui|UiScreen|ScreenPass|Shadow|Depth|PostProcess
war.maskSkipBlended = True # effect sprites do not write the mask (they are not surfaces)
war.aoBeforeBlended = False # compute AO before the first effect sprite; moves the pass and the
# scene interleaves opaque and effect draws, so leave it False
war.aoEffectAlpha = True # per-pixel effect coverage in the scene alpha; AO skips it
war.aoEffectGain = 2 # 1 = proportional, 2 = sqrt, 3 = cbrt; higher protects faint smoke
war.maskToAlpha = False # class in the alpha of the colour copy for the sidecar
# the stencil carries a shader-variant id; the log lists id ranges
war_sidecar.cfg
Code: Select all
nr_enabled = 1 # 1/0 -- "Enable DLSS Neural Rendering" (ini: NeuralUplift)
nr_preset = 2 # "NR Preset": 0 = Default, 1..3 = Preset #1..#3 (shipped ini: 2)
nr_style = 2 # "NR Style": 0/1/2, labels Natural / Cinematic (shipped: 0; 2 has crashed hosts)
nr_intensity = 2 # "Overall Intensity", slider (shipped: 2)
nr_global_tone = 2 # "Global Tone Intensity" (shipped: 2)
nr_local_tone = 2 # "Local Tone Intensity" (shipped: 2)
nr_local_structure = 2 # "Structure Intensity" (shipped: 2) -- halo around bright characters: try 1 or 0
nr_skin_structure = 1 # "Character/Skin Structure" (shipped: 1)
nr_auto_mask = 1 # 1/0 -- "Automatic / Character Mask" (shipped: 1)