You are viewing a potentially older version of this package. View all versions.
Skarif-ValheimPerformanceOverhaul-2.6.4 icon

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 2 days ago
Version 2.6.4
Download link Skarif-ValheimPerformanceOverhaul-2.6.4.zip
Downloads 493
Dependency string Skarif-ValheimPerformanceOverhaul-2.6.4

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2202 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured and includes unstripped Unity DLLs.

Preferred version: 5.4.2202

README

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:

  1. Install BepInExPack Valheim first.
  2. Copy ValheimPerformanceOverhaul.dll into BepInEx/plugins/.
  3. 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.

πŸ’€ 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.

🎨 Graphics Settings

  • Configurable shadow distance, resolution, and cascade count.
  • Bloom and screen-space reflections toggle.
  • Terrain quality multiplier.

🌿 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.

πŸ—ΊοΈ Minimap Optimization

  • Configurable texture resolution and update frequency.

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
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
Shadow Distance 50 m Maximum shadow render 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) ~20–40%
Busy server with many players/mobs ~15–30%

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).
  • ⚠️ Despite the fact that I conducted test runs in various situations, the mod is in BETA. Although the mod technically cannot break the world, it is advisable to make backups.
  • ❌ Does not support crossplay (Steam + Game Pass mixed sessions). Pure Steam servers are fine.

Changelog

v2.6.4

Added

  • nothing

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

2.6.0

  • Removed NetworkManager (ZSteamSocket-only, broke crossplay)
  • Removed ZDOOptimizer (potential desync risk on servers)
  • Fixed LightLODManager: removed duplicate ScanForLights() on Start
  • Fixed AdvancedLightManager: removed periodic FindObjectsByType scan every 5s (caused micro-freezes)
  • DistanceCuller refactored: all cullers now managed by one central Update loop instead of one Update() per object
  • PiecePatches: replaced ConcurrentDictionary with Dictionary (main thread only, 3–5x faster)
  • AsyncWearInit: added early exit when queue is empty

2.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.CustomUpdate that 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.CustomUpdate that 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 QualitySettings at startup: softParticles = false, softVegetation = false, configurable particleRaycastBudget (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.maximumDeltaTime when 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) and Traverse β€” 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 duplicate ScanForLights() call on Start.
  • Fixed AdvancedLightManager: removed periodic FindObjectsByType scan every 5 s (caused micro-freezes).
  • DistanceCuller refactored: all cullers now managed by one central Update loop instead of one Update() per object.
  • PiecePatches: replaced ConcurrentDictionary with Dictionary (main thread only, 3–5Γ— faster lookup).
  • AsyncWearInit: added early exit when queue is empty.

v2.5.1

  • Initial public release.