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.dll into BepInEx/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
QualitySettings tweaks 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
ItemDrop GameObjects 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.maximumDeltaTime to 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
See CHANGELOG.md for full version history.