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.
You are viewing a potentially older version of this package.
View all versions.
| Date uploaded | 2 weeks ago |
| Version | 7.3.16 |
| Download link | Skarif-ValheimPerformanceOverhaul-7.3.16.zip |
| Downloads | 2119 |
| Dependency string | Skarif-ValheimPerformanceOverhaul-7.3.16 |
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 (VPO)
FPS mod for Valheim.
CHANGELOG
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