You are viewing a potentially older version of this package. View all versions.
Ivvty-ValheimVisuals-1.4.1 icon

ValheimVisuals

Valheim Visuals: a set of graphics settings I like, made into a mod — water tessellation, reflections, normal maps and AO turned up within the game's own declared ranges.

By Ivvty
Date uploaded 2 days ago
Version 1.4.1
Download link Ivvty-ValheimVisuals-1.4.1.zip
Downloads 600
Dependency string Ivvty-ValheimVisuals-1.4.1

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2351 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2351

README

ValheimVisuals

A set of graphics settings I like, made into a mod.

Valheim's own shaders support more than the game uses: its water supports tessellation and refraction but is set to 4 of a possible 32 and 0.01, building normal maps are applied at intensity 1.0, and snow and rain are lit as flat sprites. This mod tunes those existing effects. Optional bicubic upscaling and the opt-in screen-space lighting use small bundled shaders; the game's world and material shaders are not replaced.

What it changes

Vanilla Default here
Shadow distance 150 m 300 m
Shadow resolution High Very High, cascades weighted towards the player
Anisotropic filtering level unset 16×
Ambient occlusion G-buffer only, 10 samples Medium with downsampling, from depth so grass and leaves are occluded too; intensity 0.1
Screen space reflections off off (switch available: High resolution, 128 ray steps, intensity ×2)
Depth of field game's switch only blur size, focus, aperture and quality controls
Reflection probe cubemaps ~128 px 512 px
Water tessellation 4 of 32 16
Water refraction 0.01 0.05
Water metallic 0 0.8
Water detail distance 120 m 350 m, the game's far sea moved to the same distance
Normal map intensity ×1 ×1.4 on the game's materials that have one
Particle lighting by facing 0 0.5: snow and rain catch firelight
Grass radius 140 m 200 m

On by default: contact shadows, GTAO ambient occlusion and caustics (the waves' light on the shallow sea bottom, section Caustics); optional, off by default: screen-space indirect light — effects the game does not have, drawn by the mod's own shaders (see below). A new water surface is a separate mod, ValheimWater; this one stands its water settings down while ValheimWater draws the sea.

Colour grading, exposure, fog and world loading distance are left as the game ships them. LOD overrides are optional and off by default. Nothing that affects gameplay is touched (torch shadows, which the stealth system reads, stay as they are).

Requirements and install

  • BepInEx for Valheim. Configuration Manager is optional but recommended.
  • Install with a mod manager, or put ValheimVisuals.dll into BepInEx/plugins. Client-side: the server neither needs nor notices it.

Settings

Every value applies live. The config is grouped by module (Shadows, Surfaces, PostFx, DoF, Vegetation, Reflections, Materials, Water, Particles, Rendering), each with an Enabled switch; a switch turned off hands the value back to the game rather than writing a remembered one. General.Enabled switches the whole mod off; the Compare key (Right Arrow by default) restores everything the mod changed for this session only, for a before-and-after comparison.

Additional controls

All of these overrides start disabled or set to Vanilla, so upgrading does not change the existing look.

Setting What it does
PostFx.UseTaaSpread, TaaSpread TAA jitter diameter, 0.1–1.0 pixels. Requires Antialiasing = Taa. Lower is sharper but may shimmer more.
PostFx.Vignette Vanilla, explicit Off, or On, with intensity, smoothness and roundness controls.
PostFx.DisableSsr Explicitly disables screen-space reflections, including those in the original profile. Takes precedence over SsrEnabled.
Reflections.DisableEnvironmentReflections Suppresses reflection probes and the sky reflection fallback; pauses the game's periodic probe refreshes. Direct-light highlights remain.
Rendering.UseRenderScale, RenderScale Custom 25–100% internal 3D resolution, with UI at screen resolution. Follows window resolution changes. 75% means 75% of each dimension, not 75% of pixel count.
Rendering.Filter Vanilla, Bilinear, Pixelated, or Bicubic (Catmull–Rom). Works with either the game's scale or the custom percentage; only affects rendering below native resolution.
Rendering.UseLodBias, LodBias Overrides the game's global LOD bias, 0.25–5. Higher values retain detailed models farther away.
Rendering.UseTreeLod, TreeLodMultiplier Multiplies LOD distances for loaded TreeBase trees, 0.25–4, in addition to global bias. Does not alter rocks, buildings, world loading distance or distant vegetation managed by other mods.

Screen-space lighting (opt-in)

Three passes of the mod's own on the game's deferred camera, each with its own Enabled (off by default). Every opaque shader of the game writes the G-buffer they read — grass and leaves included — so they apply to everything solid on screen. Screen space means they only know what is on screen: what is off screen or hidden behind something does not cast, occlude or bounce.

Section What it does Settings
ContactShadows Short sun shadows the shadow map is too coarse for: stones on the ground, plank edges, the foot of a post, grass at its roots. Written into the game's own sun shadows, so only direct sunlight is darkened. Needs the game's shadows on. Length 0.35 m, Distance 80 m, Strength 0.8, Thickness 0.1 m
Gtao Ambient occlusion that darkens only the sky light and reflections, not the sun or torches: room corners, eaves, roots, the foot of a wall. Thin things (grass, posts) hide only what lies within Thickness behind them, so there are no dark halos. Replaces the post-processing occlusion: PostFx.AmbientOcclusion and the game's SSAO setting are overridden off while it is on, and come back when it is off. Radius 1.5 m, Strength 1, Thickness 0.5 m, Quality 2
IndirectLight One bounce of light between surfaces: sunlit sand lighting the shaded side of a wall, firelight off walls onto the floor, colour from grass on the trunks beside it. The game otherwise lights everything with direct light plus one flat sky colour. Intensity 1, Radius 4 m, Thickness 0.5 m, Quality 2

Thickness is how deep a surface on screen is assumed to be: the depth buffer has nothing behind what it shows. GTAO and the indirect light need an HDR camera (Valheim's is) and draw nothing otherwise. With the post-processing module off (PostFx.Enabled = false) the mod cannot switch the game's own SSAO off, and both occlusions would apply.

SsrEnabled = false retains its original meaning: stop enabling/tuning SSR. Use DisableSsr = true to force it off. Likewise, Reflections.Enabled = false hands control back to the game; it does not disable the game's reflections. To suppress both reflection sources, enable both explicit disable switches while keeping their modules enabled. Custom shaders from other mods can implement additional reflections outside these controls.

The game's built-in scaling path only supports resolutions below native. Values above 100% would require a separate supersampling implementation. Bicubic adds GPU work compared with bilinear; its effect is reconstruction quality, not new image detail. Windows/Proton and native Linux shader bundles are embedded in the DLL. If the shader cannot load on a platform, filtering falls back to bilinear with a log warning.

Performance

The extra effects cost GPU time. On a Ryzen 5 5600X and RTX 4070 SUPER at 2560×1440, screen-space reflections were the largest cost (about 4 ms) and ambient occlusion the next. SSR is off by default: water never shows it and most of Valheim's surfaces are too rough to, so PostFx.SsrEnabled is there for anyone who wants it anyway. The AO default (Medium, downsampled) is the cheaper setting measured, and PostFx.AmbientOcclusion = false is the next thing to turn off for headroom. At 1280×720 contact shadows measured 0.045 ms, GTAO 0.11 ms and the indirect light 0.14 ms per pass (each drawn many times, the difference divided: the game reports no GPU timings; the repeated part is the trace or gather, not the copies, blurs and final composite); four times the pixels at 1440p costs roughly four times as much. Measured on one machine, so results elsewhere will vary.

Compatibility

Works alongside texture replacement mods (normal-map intensity is re-applied to the game's materials they change later; materials on another mod's own shaders are left alone). Do not combine it with a mod that replaces the water shader outright.

The water settings also stand down while ValheimWater draws the sea (it replaces the shader they tune).

Leave the LOD overrides off when another mod manages the same LOD groups. WeatherOverhaul ownership is respected: the environment reflection switch also yields while WeatherOverhaul declares ownership of reflection probes. SSR remains a separate post-processing control.

If another mod replaces the camera's post-processing profile, ValheimVisuals yields instead of repeatedly replacing that profile. Changing a PostFx setting or toggling the module off/on permits it to acquire the new profile. Mods that continuously write the same effect parameters can still conflict; configure each shared effect in one mod.

Building and checking

dotnet build -c Release uses the checked-in shader bundles. Rebuild them with tools/Build-Shaders.ps1 (Unity 6000.0.75f1 with Windows and Linux build support). No downloaded Unity packages are needed for this shader project. The Unity project's ShaderChecks.Run checks the built bundle, the screen-space passes included, on a synthetic frame. dotnet run --project tests/Checks/Checks.csproj checks value ownership and scale boundaries. Build tests/Runtime/Runtime.csproj, then run tools/Test-Runtime.ps1 for menu-only integration checks in an installed game. The runner refuses to interrupt an existing game, uses a separate save directory, restores the installed DLL and config, and leaves results under tests/results. It does not load a world or character. tools/Run-Stand.ps1 loads a world (backed up first, saves blocked and compared afterwards) and photographs the screen-space lighting around a stone wall on a sunlit shore (-Extra '-stand-screen-cost' adds its cost); results go to Documents/ValheimVisualsStand.

More

The FAQ covers what to switch off when something looks wrong, the depth-of-field controls, and texture packs.

Problems and feedback

Write to me on Discord: https://discord.com/users/683075123816824940. Attach BepInEx/LogOutput.log from the game folder, or from the profile folder with a mod manager (r2modman: Settings → Browse profile folder), and say what you did when it happened. A screenshot with the Right Arrow comparison (the game's own values against the mod's) helps with anything visual.

CHANGELOG

Changelog

1.4.1

  • Fixed black patches of ground with terrain mods (Badger's HD Terrain): stronger normals and particle lighting now touch only the game's own shaders.

1.4.0

  • New: caustics, the waves' light rippling over the shallow sea bottom and what lies under the water (section Caustics, on by default).
  • Stronger normals and the particle lighting now also reach materials the game loads during play (locations, dungeons, texture mods); before, only a settings change picked them up.
  • Caustics cost nothing where they cannot show: in dungeons, high above the sea and without light.
  • With the water settings off, or ValheimWater drawing the sea, the mod no longer goes on changing the water's detail distance.
  • Caustics fade under the moon, under clouds and in cloud shadows instead of shining as in full sun.
  • No more empty squares in the sea at the edge of the loaded area: near and far water now meet where the loaded water ends.
  • Reflections follow the scene within about a second instead of up to six (Reflections.RefreshSeconds).
  • Caustics follow the waves: no more caustics on sand a wave has left dry.
  • Settings window tidied: grouped and ordered, the main switches first, fine-tuning after them.
  • New "AO even far": ambient occlusion no longer darkens the distance more than the foreground (off by default, to try).
  • Contact shadows and GTAO ambient occlusion are on by default (a fraction of a millisecond on the GPU).
  • The Preset setting is gone (Off/Physical repeated Enabled). The Right Arrow key is now "Compare key": the game's own look and back, for this session. A config with Preset = Off keeps the mod off through Enabled.

1.3.1

  • Optional screen-space lighting, each off by default: ContactShadows (short sun shadows written into the game's own sun shadows), Gtao (ambient occlusion of the sky light only, with thickness so thin things cast no halo; replaces the post-processing occlusion while on) and IndirectLight (one bounce of light between surfaces on screen).
  • With AugaLite installed, the post-processing (antialiasing, ambient occlusion, vignette, reflections) and the depth of field values were lost at the first portal trip or dungeon entrance, and switching the mod off and on did not bring them back. AugaLite's teleport screen copies the game camera for its portal animation, and the copy took over the game's record of which camera has the effects; the mod followed it to the hidden copy and gave the real view back the game's own profile. The mod now finds the camera through the game camera itself.
  • The water settings stand down while ValheimWater (a separate mod: a new sea surface and caustics) draws the water.
  • Fixed a dark ragged band along the sea's horizon: the water detail distance (400 m) moved only the waves, while the game's flat far sea still started at 120 m, covered every trough in between and left the crests sticking out of it. The far sea now starts where the waves end, and the distance is capped at 350 m (about as far as the zones that carry the waves are loaded; the default is now 350).

1.3.0

  • Optional TAA jitter spread and vignette controls, including an explicit vignette Off mode.

  • Separate explicit switches to disable SSR and environment reflections, with reversible probe/sky suppression.

  • Custom internal render scale from 25 to 100%, plus bilinear, pixelated and Catmull–Rom bicubic upscaling.

  • Optional global LOD bias and a separate multiplier for loaded tree LODs. Both leave the game's settings alone by default.

  • Preserve later external changes when releasing settings. Yield if another mod replaces the post-processing profile, and restore current graphics choices after changing the game's settings while overrides are active.

  • Correct AO descriptions: current defaults use Medium samples with downsampling; the depth path still requests DepthNormals.

  • Mountain snow no longer breaks into small patches of shimmering noise. The game's terrain shader decides snow or rock per pixel from a biome weight that GPU rounding leaves at either 0 or 0.0000001, so neighbouring pixels flip between the two and reshuffle every frame. Surfaces.FixSnowSpeckle (on) lifts the terrain's biome colours by 0.01% so the weight cannot cross zero; the shader and textures are untouched.

  • With WeatherOverhaul installed, the water and reflection modules stand down wherever WeatherOverhaul declares it owns the water surface or the reflection probes, and come back when it stops. Without it, nothing changes.

1.2.4

  • Screen space reflections are now off, existing configs included: they cost the most FPS and could stutter, for almost no visible change. PostFx.SsrEnabled turns them back on.

1.2.3

  • The Thunderstore package depended on BepInExPack_Valheim 5.4.2202, which predates the pack's fixes for the game's Unity 6 (5.4.2333 and later), so a new mod manager profile could get that old pack. It now depends on 5.4.2351. Nothing changes in the game.
  • README: where to report problems.