Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
ValheimPerformanceOverhaul
Performance optimizations for large bases, world streaming, rendering and creature updates.
| Date uploaded | 21 hours ago |
| Version | 8.3.1 |
| Download link | Skarif-ValheimPerformanceOverhaul-8.3.1.zip |
| Downloads | 1391 |
| Dependency string | Skarif-ValheimPerformanceOverhaul-8.3.1 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2333README
Valheim Performance Overhaul — 8.3.0
VPO adds configurable optimizations for large bases, world streaming, dungeon generation, rendering and distant creatures. It includes an in-game settings menu, optimization presets and a compatibility guard for overlapping mod patches.
Performance depends on the scene, hardware and other mods. This release does not promise a fixed FPS increase or the removal of every loading freeze. Rendering options can trade visual quality for performance.
Installation and controls
Install with dependencies through Gale, r2modman or Thunderstore Mod Manager. For manual installation, install denikson-BepInExPack_Valheim and copy BepInEx/plugins/ValheimPerformanceOverhaul.dll from the package into your Valheim installation.
When updating, remove older copies of VPO, including a manually installed ValheimEngineOptimizer.dll. Keep one VPO plugin DLL. Restart the game after replacing the DLL.
| Control | Function |
|---|---|
| F6 | Open the built-in settings menu. |
| F7 | Toggle a batching anchor at the player's position. |
| F1 | Edit settings if a separate Configuration Manager is installed. |
vpo_perf |
Print optimization counters and GPU timing availability to the game console. |
What's new in 8.3.0
- Sector Scene Cache: skips repeated full scene scans while sectors are unchanged. New objects, sector changes and pending loads keep the normal processing path; a periodic audit covers changes without known events.
- Structure Dependency Cache: reuses support results only while observed neighbors, collider geometry, transforms and ownership remain unchanged. Construction, destruction and terrain support invalidation reset the cache. The game's support formula remains in control.
- Dungeon collision broad phase: rejects clearly separated room boxes before the exact physics test. Room ordering and random seeds remain unchanged. Dungeon generation still runs synchronously and can still cause a loading hitch.
- Base renderer batching: batches eligible stationary building renderers in small spatial groups, while retaining their original objects, colliders, active states and individual material overrides. Moving, animated and interactive parts are excluded. A vertex budget limits additional geometry memory.
- Shadow budget: optionally limits shadow distance and the number of point-light shadows through the native lighting system. This reduces shadow quality; it does not turn on cold furnaces or their effects.
- GPU adaptive resolution: uses the native scaled framebuffer when valid GPU timings are available. The default internal scale is 75–100%, with slow adjustments and CPU-bound-frame protection. The UI stays at display resolution. If GPU timings are unavailable, the controller does not reduce resolution.
Fixes and changes
- Fixed incomplete Ukrainian configuration caused by apostrophes in translated BepInEx section names. Persisted identifiers are now English, while the F6 interface and descriptions remain localized. Legacy localized settings are migrated.
- Protected kilns, smelters, blast furnaces, cooking stations and fireplaces from generic particle/LOD optimization. Their production scripts retain control of active effects. Furnace lights are excluded from generic light culling.
- Added a targeted guard for water
_MainTex_STreads inMaterialFaderand a readable-geometry fallback for NavMesh sources. Unsupported mesh formats or unavailable GPU readback retain the vanilla source and produce a diagnostic. - Fixed the AI optimizer registry ID, generated LOD activation/transforms and LOD cache versioning.
- Removed the second ZDO sort that overwrote the game's per-peer ordering and forced-send priorities.
- Removed global interception of
GC.CollectandResources.UnloadUnusedAssets, global PhysX solver changes, and skipping of complete character physics or liquid-depth updates. - Deferred vegetation spawning is disabled. The game completes zone generation atomically to avoid recording partially generated vegetation as finished. This release does not contain the old terrain RAM/LRU cache.
Presets and configuration
| Preset | Intended behavior |
|---|---|
| Potato | Stronger quality/performance compromises for low-end systems. |
| Normal | Balanced optimizations, ordinary terrain distances, shadow limits and GPU adaptive resolution. |
| High | More visual detail; the new shadow cap and adaptive resolution are disabled by the preset. |
Configuration: BepInEx/config/com.Skarif.ValheimPerformanceOverhaul_WATER.cfg.
The new options are in 11. Large Scene Optimizations. On the first upgrade, matching previous Normal defaults are migrated to the revised distances and frame-budget settings. Non-default numeric values and High are preserved. The previous config is backed up with the suffix .pre-8.1.0.bak; that suffix identifies the migration introduced during development.
Most switches apply during gameplay. Changes to already modified prefabs, generated LODs or completed static batches can require a world reload or game restart. Disabling a batching switch stops new batches; it does not rebuild existing ones immediately.
Other modules
VPO also includes configurable GPU upload settings, texture mip streaming, compatible-material instancing, camera caching, distant non-combat AI throttling, path-request limits, visual creature LOD, tamed-animal idle behavior, smoke/torch options, pooling for selected hit effects, minimap throttling and Steam send-rate settings.
The save module respects Valheim's existing background save implementation and preserves synchronous shutdown saves. GC latency mode and JIT warm-up are best-effort runtime features. Raising process priority or upload buffers is not a guaranteed speedup. Texture streaming affects assets prepared for streaming.
The compatibility guard can disable overlapping subsystems and includes rules for Expand World, CLLC, ValheimRAFT and PlanBuild. It reduces known conflicts rather than guaranteeing compatibility with every modpack. Some settings are client-only; host/ownership checks govern world simulation features. Dedicated-server behavior has not been fully validated for this release.
Diagnostics and world pregeneration
Enable Log Large Scene Diagnostics for periodic counters and timing breakdowns of dungeon generations longer than 50 ms. Compare the same base, camera and weather before and after changing options; counters are not FPS measurements.
vpo_perf
vpo_chunky_start <radius> # Host/server only; maximum radius 40
vpo_chunky_stop
vpo_chunky_status
Chunky generates zones in advance and pauses below its configured FPS threshold. Each individual zone/dungeon generation remains synchronous, so pregeneration can itself produce hitches.
Support
Discord: skarif_q · Steam: Skarif_W · Ko-fi
Русское описание
Valheim Performance Overhaul 8.3.0 добавляет настраиваемые оптимизации больших баз, загрузки мира, генерации подземелий, отрисовки и далёких существ. Есть меню F6, профили и защита от известных конфликтов модов. Фиксированный прирост FPS и полное отсутствие фризов не гарантируются: результат зависит от сцены и оборудования, а часть графических настроек снижает качество ради производительности.
Установка и управление
Установите мод с зависимостями через Gale, r2modman или Thunderstore Mod Manager. Вручную: установите BepInExPack Valheim и поместите ValheimPerformanceOverhaul.dll из архива в BepInEx/plugins.
При обновлении удалите прежние копии VPO, включая вручную установленную ValheimEngineOptimizer.dll. Оставьте одну DLL мода и перезапустите игру.
- F6 — встроенное меню.
- F7 — переключение якоря батчинга базы.
- F1 — настройки через отдельно установленный Configuration Manager.
vpo_perf— счётчики оптимизаций и доступность замеров GPU в консоли игры.
Основные изменения
- Кэш секторов сокращает повторные полные обходы неизменившейся сцены, сохраняя обработку новых объектов и незавершённой загрузки.
- Кэш зависимостей опор проверяет соседей, геометрию, трансформации и ownership. Изменения построек/terrain сбрасывают результат; формула прочности остаётся игровой.
- Генератор подземелий отбрасывает заведомо непересекающиеся комнаты перед точной физической проверкой. Генерация всё ещё синхронная и может вызывать фриз.
- Подходящие неподвижные детали базы объединяются небольшими группами с ограничением памяти. Игровые объекты, коллайдеры и индивидуальные состояния сохраняются; подвижные, интерактивные и анимированные части исключаются.
- Бюджет теней ограничивает их дальность и число локальных теневых источников через родную систему. Это уменьшение качества теней.
- Адаптивное внутреннее разрешение использует родной framebuffer и доступные GPU timings. По умолчанию диапазон 75–100%; интерфейс сохраняет разрешение экрана. При недоступных замерах или явном упоре в CPU модуль не снижает разрешение.
- Исправлены украинский конфиг, ID кэша ИИ, активация/координаты LOD и повторная сортировка сетевых объектов. Ключи cfg теперь стабильные английские; F6 и описания локализуются, прежние значения переносятся.
- Печи, плавильни, доменные печи, кухни и камины защищены от общего оптимизатора частиц/LOD; их скрипты управляют рабочими эффектами. Свет печей исключён из общего куллинга.
- Добавлены защита чтения
_MainTex_STводы в MaterialFader и восстановление readable-геометрии NavMesh. Если формат меша или GPU readback не поддерживается, остаётся ванильный источник с диагностикой. - Убраны глобальная подмена PhysX, запреты GC/UnloadUnusedAssets и пропуск полного физического обновления персонажей/глубины жидкости.
- Отложенный спавн растительности отключён: завершение генерации зоны остаётся атомарным. Старого RAM/LRU-кэша terrain в этой версии нет.
Настройки
Файл: BepInEx/config/com.Skarif.ValheimPerformanceOverhaul_WATER.cfg. Новые опции: 11. Large Scene Optimizations.
Potato сильнее снижает качество; Normal использует обычные дистанции terrain, бюджет теней и адаптивное разрешение; High сохраняет больше деталей и отключает новые ограничения теней/разрешения.
При первом обновлении совпадающие прежние штатные значения Normal мигрируют, нестандартные числовые значения и High сохраняются. Перед сохранением создаётся копия cfg с суффиксом .pre-8.1.0.bak — это обозначение миграции, появившейся при разработке обновления.
Для уже изменённых prefab, готовых LOD и статических батчей может понадобиться перезагрузка мира или игры. Выключение батчинга останавливает новые объединения, но не отменяет готовые сразу.
Дополнительно сохранены настройки текстур/GPU upload, кэш камеры, ограничение далёкого небоевого ИИ и запросов путей, визуальный LOD существ, сон приручённых животных, настройки дыма/факелов, пул отдельных VFX, миникарта и сеть. Асинхронное сохранение использует родной поток Valheim и сохраняет синхронный выход. JIT/GC зависят от runtime; приоритет процесса и размер буфера сами по себе не гарантируют ускорения.
Защита совместимости учитывает известные конфликты, но не гарантирует работу любой сборки. Часть функций работает только на клиенте; функции симуляции учитывают host/ownership. Работа этой версии на dedicated server полностью не проверена.
Log Large Scene Diagnostics включает периодические счётчики и замеры этапов генерации подземелий дольше 50 мс. Команды vpo_chunky_start <радиус>, vpo_chunky_stop и vpo_chunky_status управляют предгенерацией на host/server. Предгенерация переносит работу заранее, но отдельная зона всё равно может вызвать фриз.
CHANGELOG
v8.3.1
- nothing
v8.3.0 - 2026-10-15
Added
- Sector scene caching, structure dependency caching and a conservative dungeon-room collision broad phase.
- Spatial batching for eligible stationary building renderers with a geometry-memory budget.
- Optional native shadow limits and GPU-timed adaptive internal resolution.
- The
vpo_perfconsole command, optimization counters and dungeon-generation stage timings.
Fixed
- Ukrainian configuration initialization, language-independent setting identifiers and migration of older localized values.
- Generic particle, light and LOD optimization interfering with cold kilns and other production objects.
- AI registry identifiers, generated LOD activation/transforms, and LOD cache versioning.
- Conflicting second-pass ZDO sorting and unsafe ownership of statically batched game objects.
- Targeted water MaterialFader compatibility and readable NavMesh geometry fallback.
Changed
- Updated Normal terrain distances and frame-budget defaults; previous matching defaults migrate once with a config backup.
- Removed global GC/asset-unload suppression, global PhysX solver overrides and skipping of complete character physics/liquid-depth updates.
- Disabled deferred vegetation generation to preserve atomic zone completion.
- Replaced outdated README claims with current behavior, controls, quality tradeoffs and known limitations.
- Packaged the current build as
BepInEx/plugins/ValheimPerformanceOverhaul.dll, with plugin/file version 8.3.0.
Validation and limitations
- Release build: no errors or warnings; 108 Harmony target/injection checks, 18 field checks and three exact IL redirect checks.
- Geometry broad phase checked against independent SAT on 20,000 randomized box pairs; config migration and GPU-resolution policy checks passed.
- Dungeon generation remains synchronous. FPS gains, all loading hitches and dedicated-server behavior have not been validated in-game for this release.
v8.2.6
- nothing
v8.2.5
- nothing
v8.2.4
- nothing
v8.2.3
- nothing
v8.2.2
- nothing
v8.2.1
- nothing
Changelog
[8.2.0] - 2026-09-18
Added
- Added configurable vegetation spawn time budget per frame (
0.5–10.0 ms) with profile-specific values for Potato, Normal, and High presets. - Added distant-terrain LOD improvements with configurable camera far-clip distance and terrain LOD transition multiplier.
- Added configurable fog-distance multiplier with environment update integration to reveal distant terrain and islands more clearly.
- Added fast, allocation-free clear-area checks for vegetation spawning using cached area bounds instead of per-point reflection calls.
- Added safer player animator reset and restoration helpers for runtime configuration changes.
Changed
- Replaced the terrain mesh heightmap cache and its LRU memory-management implementation with direct terrain LOD and camera-distance controls; terrain regeneration is no longer intercepted to read/write cached meshes.
- Removed terrain-cache configuration entries and replaced them with distant-terrain, camera far-clip, terrain LOD blend, vegetation budget, and fog-distance settings.
- Updated runtime configuration synchronization and conflict-guard mappings for the new terrain, fog, and vegetation modules.
- Optimized vegetation time-slicing: nearby sectors and initial world loading can use the configured maximum budget, while task processing uses tighter frame-budget thresholds and smaller safety margins.
- Improved vegetation spawning lifecycle handling by removing delayed retry-frame termination, preserving task state across slices, and avoiding Ghost-mode object instantiation for networked vegetation.
- Updated vegetation clear-area processing to copy private area center/radius data once and perform fast bounds checks during placement.
- Added camera far-clip application during camera initialization and refreshed terrain LOD settings when configuration changes.
- Tuned automatic optimization profiles: vegetation budgets are set to 1.5/3.5/6.0 ms, camera distances to 2200/3000/3500 m, terrain LOD multipliers to 1.0/1.25/1.5, and fog multipliers to 1.0/1.5/2.0 for Potato/Normal/High profiles.
- Tuned frame-budget physics deltas and retained conservative frame-throttling behavior for low-FPS systems.
- Updated animation handling so combat, bow drawing, dodging, minor actions, staggering, and blocking are never accelerated or switched into unscaled animation behavior.
- Movement animation compensation is now limited to walking, running, and swimming, with a maximum speed adjustment of 1.35; normal animation speed is restored outside those states.
- Updated runtime toggles to restore vanilla animator behavior when the frame-budget or unscaled-animation options are disabled.
- Adjusted compatibility handling to disable the new terrain mesh patches and manager rather than the removed terrain cache module.
Fixed
- Removed the slow-motion effect from player movement animations during frame-time compensation without affecting combat animation timing or combo transitions.
- Prevented combat animations from being interrupted or modified by the optional unscaled-animation logic.
- Fixed animation state initialization by resetting spawned player animators to Unity's normal update mode and speed.
- Improved distant terrain visibility by extending the camera horizon, delaying terrain LOD transitions, and preventing incompatible default-layer culling behavior.
- Reduced excessive fog obscuring distant mountains and islands while preserving a safety floor for fog density.
- Fixed vegetation spawning checks in clear areas without relying on the removed reflective
InsideClearAreadelegate. - Fixed networked vegetation handling so Ghost-mode generation does not leave unintended instantiated objects behind.
- Improved vegetation task behavior when heightmaps are temporarily unavailable by keeping the task alive until the data becomes available.
- Avoided applying GPU instancing to terrain, water, and particle shaders that do not support the standard instancing path.
Improved
- Lower runtime memory use and terrain-generation complexity by removing the 717-line terrain mesh cache implementation and its associated mesh-data copies.
- Improved camera and terrain rendering consistency in large-world scenes through coordinated far-clip, LOD, layer-culling, and fog settings.
- Improved vegetation spawn throughput near the player while retaining frame-time control for distant sectors.
- Improved compatibility diagnostics and module isolation for terrain, fog, and vegetation Harmony patches.
Removed
- Terrain mesh cache module, LRU cache, cache invalidation hooks, cached heightmap mesh data, and cache memory-limit configuration.
- Legacy terrain-cache references from
Plugin,RuntimeConfigDispatcher,AutoOptimizationProfile,ModConflictGuard, and generated combined output. - Player animation mode switching that could affect combat states; replaced with combat-safe movement-only compensation.
[8.1.0] - 2026-09-17
Added
- Improved chunk pregeneration flow for better zone spawning stability
- Server/host validation before world pregeneration starts
- Retry logic for zone generation using ghost spawn mode to avoid unstable generation attempts
- Additional safeguards to prevent invalid LOD generation for terrain and system prefabs
- Local player animator synchronization for pause and attack states when unscaled animation mode is enabled
- Startup intro/logo skip logic for smoother menu navigation
- Legacy config cleanup support with one-time purge flags
Changed
- Reduced chunk generation delay and tuned FPS thresholds for better low-end compatibility
- Switched pregeneration queue from
Vector2itoVector2sto match the game zone system - Updated reflection targets from
PokeLocalZonetoSpawnZonewithIsZoneGeneratedverification - Increased heavy frame skip threshold and refined frame budget safety margins
- Adjusted throttling values to reduce false positives on weak but stable PCs
- Disabled spherical layer culling to prevent landscape disappearance near screen edges
- Restricted GPU instancing to compatible shaders only
- Improved LOD layer inheritance and shadow behavior for generated meshes
- Updated render optimizer to target the dedicated small-props layer instead of the default layer
- Refined compatibility and spawn validation logic for terrain and world-generation systems
Fixed
- Zone generation failures caused by outdated reflection targets and invalid game API usage
- Early LOD disappearance and conflicts with terrain/render systems
- Animator desync during pause and attack sequences
- False-positive performance throttling under normal low-FPS conditions
- Terrain, water, and particle shader compatibility issues in GPU instancing
- Intro/startup scene issues that could delay the main menu
Improved
- Stability of world pregeneration and zone creation
- Overall compatibility with lower-end hardware
- LOD filtering for terrain and system prefabs
- Render reliability in large-world scenes and camera culling scenarios
Removed
- Deprecated reflection-based generation paths replaced by safer runtime checks
- Old config cleanup patterns in favor of the new non-invasive runtime handling
[8.0.0] - 2026-09-16
Added
- Framework identifier system to exclude system libraries (Jötunn, BepInEx, Harmony, MonoMod, ServerSync, etc.)
IsIgnoredFramework()method for filtering system frameworksDisableModuleInMemory()method for safe in-memory module disabling without config file modificationUnpatchClass()method to physically remove installed Harmony hooks from memoryGetPatchTargetTypes()method to extract real game type targetsIsEligibleForStaticBatch()validation system with multi-level checks- Prefab batch eligibility cache (
s_PrefabBatchEligibilityCache) to prevent repeated GetComponent calls - Alternative biome support (AltBiome) with parent biome linking and vegetation blocking
- Vegetation surround check system for intelligent spawn point selection
- Collider refresh after network object scale changes
LegacyConfigCleanerfor automatic cleanup of old config files on first launch- PlayerPrefs flag system for one-time cleanup (
VPO_Legacy_Configs_Purged_v1)
Changed
- Conflict detection logic now point-based - checks specific methods (UpdateAI, PlaceVegetation, SaveWorld, etc.) instead of substring search
- Replaced string-based
_disabledTargetTypeNameswith type-based_disabledTargetTypes - AsyncSaveModule simplified - now relies on built-in
ZNet.IsSaving()andm_saveThread - NetworkOptimizer migrated from Reflection to Steam API (
SteamNetworkingUtils.SetConfigValue()) - Smoke fade timer logic reordered for proper state transitions
- Batch eligibility validation now includes checks for:
- Moving systems (doors, containers, ships, wagons)
- Collectible resources (plants, trees, ore)
- Animated objects and cloth simulation
- Valid mesh presence
Vector2i _zoneIDchanged toVector2s _zoneIDin vegetation spawning- Harmony patch application moved from ZSteamSocket constructor to
RegisterGlobalCallbacks() - Plugin GUID:
"com.Skarif.ValheimPerformanceOverhaul_NEW"→"com.Skarif.ValheimPerformanceOverhaul_WATER"
Fixed
- Heightmap
_setDirtymethod signature:Action<Heightmap, bool>→Action<Heightmap, int> - Heightmap
Poke()method signature with new int parameter before bool - Smoke fade timer duplicate state transition logic
- Biome-aware vegetation spawning with AltBiome parent validation
- Data rate configuration in network module using proper pinned memory handling
Removed
SetConfigValue()andDisableModuleAndConfig()methods - replaced with non-invasiveDisableModuleInMemory()- Async file operations from AsyncSaveModule (SaveStreamAsync, full synchronization control)
- Patches on
GetSaveClone()andPlayerProfile.Save() - Reflection-based access to private ZSteamSocket fields
- Experimental StructuralBatcher class (ENGINE/.cs)
[7.3.16] - 2026-09-09
Added
- Configuration parameters (2 new params)
Fixed
- Lox idle behavior
Improved
- Batching system
[7.3.15] - 2026-08-28
Fixed
- Self-analysis conflict mode
Changed
- Template system updates
[7.3.14] - 2026-08-27
Fixed
- Teleport terrain loading
[7.3.13] - 2026-08-27
Fixed
- Self-analysis module
[7.3.12] - 2026-08-27
Added
- Batching functionality
[7.3.11] - 2026-08-26
Changed
- Pre-release preparations
[7.3.10] - 2026-08-26
Changed
- Pre-release preparations
[7.3.9] - 2026-08-26
Changed
- Pre-release preparations
[1.0] - 2026-08-26
Added
- Initial project release
- Core mod features