ValheimPerformanceOverhaul
Comprehensive performance optimization mod. Reduces CPU/GPU load via light culling, LOD system, AI throttling, distance culling, piece sleep management and more. Designed for large bases and busy servers.
| Date uploaded | 3 days ago |
| Version | 2.7.2 |
| Download link | Skarif-ValheimPerformanceOverhaul-2.7.2.zip |
| Downloads | 898 |
| Dependency string | Skarif-ValheimPerformanceOverhaul-2.7.2 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured and includes unstripped Unity DLLs.
Preferred version: 5.4.2202README
Valheim Performance Overhaul
A comprehensive performance optimization mod focused on reducing CPU and GPU load β especially on large bases, busy servers, and zones with many light sources.
Installation
Install via r2modman or Thunderstore Mod Manager (recommended) β everything is placed automatically.
Manual install:
- Install BepInExPack Valheim first.
- Copy
ValheimPerformanceOverhaul.dllintoBepInEx/plugins/. - Launch the game β a config file is generated automatically at
BepInEx/config/com.Skarif.ValheimPerformanceOverhaul.cfg.
What it does
π¦ Light Culling (biggest FPS impact)
- Limits active light sources to a configurable maximum (default: 15).
- Disables shadow casting beyond a set distance.
- Light LOD system: transitions lights through Full β No Shadows β Emissive β Billboard β Disabled as distance increases.
π―οΈ Light Flicker Optimization (new in 2.7.0)
- Fixes fire and torch light intensity at its base value, eliminating per-frame Shadow Map recalculation.
- In vanilla, every flickering campfire forces the GPU to fully rebuild shadow maps each frame for all objects in its radius. Freezing the intensity makes the light static β shadows are computed once and reused until something moves.
- Especially impactful on large bases with many fires, hearths, and torches.
π€ Distance Culler
- Puts distant creatures and building pieces to "sleep" β pauses their Update logic.
- Physics culling for Rigidbodies beyond a set range.
- Configurable exclusions (e.g. portals, tombstones are never culled).
ποΈ Piece Optimization
WearNTear.GetSupport()results are cached with a configurable TTL.- Distant pieces skip their Update cycle entirely.
- Asynchronous WearNTear initialization β spreads load over multiple frames on scene load.
π€ AI Throttling
- Monsters beyond 60 m update AI only every 5 seconds instead of every frame.
- LOS (line-of-sight) checks are cached per-target with a 0.5 s timeout.
- Idle tamed animals inside player bases enter a low-power mode.
π«οΈ Smoke Physics Optimization (new in 2.7.0)
- Replaces complex vanilla smoke aerodynamics with a simple, lightweight approximation.
- Vanilla smoke particles push each other, compute volumes, and simulate accumulation under rooftops. On large bases with many campfires this creates hundreds of per-frame collision checks between particles and building geometry.
- The simplified version uses quadratic interpolation for particle mass and a single upward force β smoke still rises and fades, but at a fraction of the CPU cost.
π¨ Graphics Settings
- Configurable shadow distance, resolution, and cascade count.
- Bloom and screen-space reflections toggle.
- Terrain quality multiplier.
βοΈ Engine Quality Settings (new in 2.7.0)
- Forces low-level Unity
QualitySettingstweaks at startup:- Soft Particles disabled β eliminates per-pixel Depth Buffer reads for particle edges.
- Soft Vegetation disabled β removes the extra GPU pass for grass and bush border blending.
- Particle Raycast Budget reduced (default: 1024, vanilla: 4096) β limits per-frame ray-casts fired by particle systems for collision checks.
- Minor visual change on particle edges; significant GPU and CPU gain on particle-heavy scenes.
πΏ Vegetation
- Grass render distance and density control.
- Detail object distance and density.
π΅ Audio Pooling
- Reuses AudioSource components instead of creating new ones per sound effect.
β»οΈ Object Pooling
- Reuses
ItemDropGameObjects to reduce instantiation overhead when loot spawns.
π§ GC Control
- Prevents Unity's garbage collection from firing during combat or movement.
β‘ JIT Warm-up
- Pre-compiles critical game methods on spawn to eliminate the first-use stutter.
π‘οΈ Frame Budget Guard (new in 2.7.0)
- Monitors frame times in a rolling 120-frame window (~2 seconds) and tracks the 1% Low β the average duration of the worst frames.
- When heavy spikes are detected (configurable threshold, default: 28 ms), dynamically lowers
Time.maximumDeltaTimeto prevent Unity's physics engine from entering the Death Spiral: lag β engine tries to catch up physics β even more lag β multi-second freeze. - Converts hard freezes (e.g. large structure collapse) into brief slow-motion, preserving input responsiveness. Returns to normal automatically once the game stabilises.
πΊοΈ Minimap Optimization
- Configurable texture resolution and update frequency.
β© Skip Intro (new in 2.7.0)
- Skips the Iron Gate and Coffee Stain logo screens on every game launch.
- Saves 5β10 seconds per startup. No FPS impact β pure convenience.
Configuration
All settings are available in BepInEx/config/com.Skarif.ValheimPerformanceOverhaul.cfg.
If you have BepInEx Configuration Manager installed, press F1 in-game to adjust all settings with a GUI in real time.
Key settings
| Setting | Default | Description |
|---|---|---|
| Max Active Lights | 15 | Max simultaneous light sources |
| Light Cull Distance | 60 m | Beyond this distance lights turn off |
| Light Flicker Optimization | true | Fixes light intensity, stops per-frame shadow rebuilds |
| Smoke Physics Optimization | true | Replaces heavy smoke aerodynamics with simple approximation |
| Engine Quality Settings | true | Disables soft particles/vegetation, reduces particle raycast budget |
| Frame Budget Guard | true | Prevents physics Death Spiral during heavy load spikes |
| Skip Intro | true | Skips studio logo screens on startup |
| Creature Cull Distance | 80 m | Creatures sleep beyond this distance |
| Piece Cull Distance | 100 m | Building pieces sleep beyond this distance |
| Support Cache Duration | 5 s | How long structural support values are cached |
| Grass Density Multiplier | 0.7 | 1.0 = vanilla, lower = fewer grass blades |
| Shadow Distance | 50 m | Maximum shadow render distance |
| Freeze Threshold | 28 ms | 1% Low threshold that triggers Frame Budget Guard |
| Particle Raycast Budget | 1024 | Max particle ray-casts per frame (vanilla: 4096) |
Performance expectations
Results depend heavily on scene complexity. Typical gains:
| Scenario | Expected FPS gain |
|---|---|
| Open world, few structures | ~5β10% |
| Medium base (50β100 pieces) | ~10β20% |
| Large base (300+ pieces, 10+ light sources) | ~25β45% |
| Busy server with many players/mobs | ~15β30% |
| Large base with many campfires (v2.7.0) | additional ~10β20% on top |
Compatibility
- β Works standalone β no other mods required.
- β Compatible with most content mods (Epic Loot, Jotunn-based mods, etc.).
- β οΈ If Object Pooling conflicts with a loot mod, disable it in config (
4. Object Pooling β Enabled = false). - β οΈ Light Flicker Optimization removes the visual flicker from fires and torches. If you prefer the vanilla animated flame appearance, disable it in config (
17. Light Flicker Optimization β Enabled = false). - β οΈ Smoke Physics Optimization changes smoke behaviour β particles will no longer accumulate under rooftops. Disable in config if this is important to you (
18. Smoke Physics Optimization β Enabled = false). - β οΈ The mod is in BETA. Test runs have been conducted in various situations, but it is advisable to keep world backups.
- β Does not support crossplay (Steam + Game Pass mixed sessions). Pure Steam servers are fine.
Changelog
v2.7.1
Added
- mini-update (smokePatch).
v2.7.0
Added
-
Light Flicker Optimization β Harmony Prefix on
LightFlicker.CustomUpdatethat fixes light intensity at its base value, eliminating per-frame Shadow Map recalculation for all fires and torches. Significant GPU gain on bases with many light sources. -
Smoke Physics Optimization β Harmony Prefix on
Smoke.CustomUpdatethat replaces the vanilla complex aerodynamics (inter-particle collisions, volume simulation, roof accumulation) with a lightweight quadratic interpolation + single upward force. Dramatic CPU savings on large bases with many campfires. Lift force is configurable. -
Engine Quality Settings β Forces low-level Unity
QualitySettingsat startup:softParticles = false,softVegetation = false, configurableparticleRaycastBudget(default: 1024 vs vanilla 4096). Minor visual change on particle edges; measurable GPU and CPU gain in particle-heavy scenes. -
Skip Intro β Skips Iron Gate and Coffee Stain logo screens on every game launch by patching
SceneLoader.Start. Saves 5β10 seconds per startup. -
Frame Budget Guard β Dynamic stutter protection system. Monitors a rolling 120-frame window, computes the 1% Low frametime, and lowers
Time.maximumDeltaTimewhen heavy spikes are detected. Prevents Unity's physics Death Spiral (lag β engine over-simulates physics to catch up β more lag β freeze). Converts hard freezes into brief slow-motion. All thresholds are configurable. Automatically recovers when the game stabilises.
Changed
- Version bumped to
2.7.0. - README updated with new module descriptions, expanded compatibility notes, and updated performance expectations table.
- Config sections renumbered: new modules occupy sections 17β21.
Notes
- All new modules are enabled by default and can be individually toggled in config.
- Light Flicker and Smoke optimizations are Prefix patches with
return falseβ they fully replace vanilla logic. If you experience unexpected visual issues with fires or smoke, disable the relevant module. - Private game fields are accessed via
AccessTools.Field(cached) andTraverseβ no direct decompiled references, compatible with future game updates.
v2.6.4
Added
- Nothing (maintenance release).
v2.6.3
Added
- Welcome screen on main menu launch.
- Displays a feedback message on first launch.
- Clickable link to Steam profile for bug reports and suggestions.
- "Don't show anymore" checkbox to permanently hide the screen.
v2.6.0
Changed / Fixed
- Removed
NetworkManager(ZSteamSocket-only implementation, broke crossplay). - Removed
ZDOOptimizer(potential desync risk on servers). - Fixed
LightLODManager: removed duplicateScanForLights()call onStart. - Fixed
AdvancedLightManager: removed periodicFindObjectsByTypescan every 5 s (caused micro-freezes). DistanceCullerrefactored: all cullers now managed by one centralUpdateloop instead of oneUpdate()per object.PiecePatches: replacedConcurrentDictionarywithDictionary(main thread only, 3β5Γ faster lookup).AsyncWearInit: added early exit when queue is empty.
v2.5.1
- Initial public release.
CHANGELOG
Changelog
v2.7.1
Added
- mini-update (smokePatch).
v2.7.0
Added
-
Light Flicker Optimization β Harmony Prefix on
LightFlicker.CustomUpdatethat fixes light intensity at its base value, eliminating per-frame Shadow Map recalculation for all fires and torches. Significant GPU gain on bases with many light sources. -
Smoke Physics Optimization β Harmony Prefix on
Smoke.CustomUpdatethat replaces the vanilla complex aerodynamics (inter-particle collisions, volume simulation, roof accumulation) with a lightweight quadratic interpolation + single upward force. Dramatic CPU savings on large bases with many campfires. Lift force is configurable. -
Engine Quality Settings β Forces low-level Unity
QualitySettingsat startup:softParticles = false,softVegetation = false, configurableparticleRaycastBudget(default: 1024 vs vanilla 4096). Minor visual change on particle edges; measurable GPU and CPU gain in particle-heavy scenes. -
Skip Intro β Skips Iron Gate and Coffee Stain logo screens on every game launch by patching
SceneLoader.Start. Saves 5β10 seconds per startup. -
Frame Budget Guard β Dynamic stutter protection system. Monitors a rolling 120-frame window, computes the 1% Low frametime, and lowers
Time.maximumDeltaTimewhen heavy spikes are detected. Prevents Unity's physics Death Spiral (lag β engine over-simulates physics to catch up β more lag β freeze). Converts hard freezes into brief slow-motion. All thresholds are configurable. Automatically recovers when the game stabilises.
Changed
- Version bumped to
2.7.0. - README updated with new module descriptions, expanded compatibility notes, and updated performance expectations table.
- Config sections renumbered: new modules occupy sections 17β21.
Notes
- All new modules are enabled by default and can be individually toggled in config.
- Light Flicker and Smoke optimizations are Prefix patches with
return falseβ they fully replace vanilla logic. If you experience unexpected visual issues with fires or smoke, disable the relevant module. - Private game fields are accessed via
AccessTools.Field(cached) andTraverseβ no direct decompiled references, compatible with future game updates.
v2.6.4
Added
- Nothing (maintenance release).
v2.6.3
Added
- Welcome screen on main menu launch.
- Displays a feedback message on first launch.
- Clickable link to Steam profile for bug reports and suggestions.
- "Don't show anymore" checkbox to permanently hide the screen.
v2.6.0
Changed / Fixed
- Removed
NetworkManager(ZSteamSocket-only implementation, broke crossplay). - Removed
ZDOOptimizer(potential desync risk on servers). - Fixed
LightLODManager: removed duplicateScanForLights()call onStart. - Fixed
AdvancedLightManager: removed periodicFindObjectsByTypescan every 5 s (caused micro-freezes). DistanceCullerrefactored: all cullers now managed by one centralUpdateloop instead of oneUpdate()per object.PiecePatches: replacedConcurrentDictionarywithDictionary(main thread only, 3β5Γ faster lookup).AsyncWearInit: added early exit when queue is empty.
v2.5.1
- Initial public release.