Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
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.
| Last updated | a week ago |
| Total downloads | 3973 |
| Total rating | 2 |
| Categories | Mods Tweaks Misc Tools Server-side Client-side Utility Ashlands Update Bog Witch Update |
| Dependency string | Skarif-ValheimPerformanceOverhaul-2.7.2 |
| Dependants | 11 other packages depend on this package |
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.