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
βοΈ In-Game Settings Menu (New in 3.0.0)
- A built-in configuration menu accessible directly from the Valheim Main Menu.
- You no longer need external configuration managers to tweak VPO settings!
π§± Decor Batching (New in 3.0.0)
- Automatically combines meshes of decorative building pieces (Misc category) in a grid chunk to drastically reduce draw calls.
- Huge FPS boost on extremely detailed, decoration-heavy bases.
π Network Optimizations (Crossplay Safe!) (Returned in 3.0.0)
- Steam Socket Uncap: Increases P2P data limits (solves desyncs on huge bases). Safely checks for Steam API and disables itself gracefully on Game Pass / Crossplay to prevent crashes.
- Adaptive Throttling: Intelligently drops ZDO sends to clients with high ping (>400ms) to prevent choking their connection.
- Smart ZDO Sorting: Prioritizes players, portals, and ships over AI during network sync.
- Smart Zone Ownership: Automatically transfers AI control to the player with the lowest ping in the zone.
π«οΈ Smoke Physics Optimization & Memory Leak Fix
- Replaces complex vanilla smoke aerodynamics with a simple, lightweight approximation.
- Fixes a critical vanilla memory leak where smoke objects were never destroyed after fading, piling up invisibly and killing FPS.
AddForce and mass calculations are heavily throttled for maximum CPU savings.
π¦ Light Culling & LOD
- 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
- Fixes fire and torch light intensity at its base value, eliminating per-frame Shadow Map recalculation.
- Making the light static means shadows are computed once and reused until something moves. Huge GPU gain.
π€ Distance & Piece Culler
- Puts distant creatures and building pieces to "sleep" - pauses their Update logic.
- Piece Sleep Manager: Puts static building pieces (
WearNTear) to sleep after 2 frames of inactivity.
- Asynchronous WearNTear initialization - spreads load over multiple frames on scene load.
WearNTear.GetSupport() results are cached with a configurable TTL.
π€ 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.
π οΈ Engine Quality Settings
- Forces low-level Unity
QualitySettings tweaks at startup:
- Soft Particles disabled - eliminates per-pixel Depth Buffer reads for particle edges.
- Soft Vegetation disabled.
- Particle Raycast Budget reduced (default: 1024, vanilla: 4096).
πΏ Vegetation & Graphics
- Grass render distance and density control.
- Configurable shadow distance, resolution, and cascade count.
- Bloom and screen-space reflections toggle.
π΅ Audio & β»οΈ Object Pooling
- Reuses
AudioSource and ItemDrop / Projectile GameObjects to reduce instantiation overhead.
- Operates with zero garbage allocations on the hot path using pre-compiled Expression delegates.
π§ GC Control & β‘ JIT Warm-up
- Prevents Unity's garbage collection from firing during combat or movement.
- Pre-compiles critical game methods on spawn to eliminate the first-use stutter.
π‘οΈ Frame Budget Guard
- Monitors frame times in a rolling 120-frame window and tracks the 1% Low.
- When heavy spikes are detected, dynamically lowers
Time.maximumDeltaTime to prevent Unity's physics engine from entering the Death Spiral (lag β over-simulation β freeze).
β© Skip Intro
- Skips the Iron Gate and Coffee Stain logo screens on every game launch. Saves 5β10 seconds.
Configuration
All settings are available in the Main Menu VPO Button or in BepInEx/config/com.Skarif.ValheimPerformanceOverhaul.cfg.
Key settings
| Setting |
Default |
Description |
| Decor Batching |
false |
Combines meshes of decorations to reduce draw calls |
| Network Optimizations |
true |
Enables Steam Uncap, Smart Sorting, and Adaptive Throttling |
| 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 + fixes memory leak |
| Engine Quality Settings |
true |
Disables soft particles/vegetation, reduces particle raycast budget |
| Frame Budget Guard |
true |
Prevents physics Death Spiral during heavy load spikes |
| Creature Cull Distance |
80 m |
Creatures sleep beyond this distance |
| Piece Cull Distance |
100 m |
Building pieces sleep beyond this distance |
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% |
| Massive base with decor batching & smoke fix |
additional ~15β25% on top |
Compatibility
- β
Works standalone - no other mods required.
- β
Compatible with most content mods (Epic Loot, Jotunn-based mods, etc.).
- β
Crossplay Compatible! Network optimizations automatically detect if you are running on Steam or Game Pass and adjust safely.
- β οΈ If Object Pooling conflicts with a custom projectile mod, disable it in config.
- β οΈ Light Flicker Optimization removes the visual flicker from fires. Disable if you prefer vanilla aesthetics.
- β οΈ Smoke Physics Optimization changes smoke behaviour (won't accumulate under roofs). Disable if this breaks your chimney designs.