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.
SteadyFrame
Smoother Valheim without changing how it looks or plays: fewer hitches around large bases, less work every frame, fast portal travel.
By Ivvty
| Date uploaded | a day ago |
| Version | 1.2.1 |
| Download link | Ivvty-SteadyFrame-1.2.1.zip |
| Downloads | 973 |
| Dependency string | Ivvty-SteadyFrame-1.2.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.2351README
SteadyFrame
SteadyFrame makes Valheim smoother on the CPU side: fewer hitches while you run around large bases, less work every frame, and fast portal travel.
Its benefits are shorter transitions, fewer streaming hitches and a lighter per-frame grass and mist pass. Average FPS depends on what limits the scene: measured with grass drawn to 200 m, about 5.5% higher at a Mistlands base and 2-4.5% at Meadows bases, no measurable change at a mountain base with little grass. Saving time in streaming and rebuilds gives little extra FPS when regular updates and rendering dominate.
The visual world, terrain and building support use the game's own objects and calculations. Shortcuts either check against the game's own answer or leave that work to the game.
What it does
Portals and dungeons
- Prepares the destination's terrain as you walk up to a portal and loads it first during the transition.
- Creates the destination faster while the loading screen is up; distant trees and bushes fill in afterwards.
- Removes fixed waits (the 8-second floor on portal travel; 2 seconds between teleports becomes 0.5), with the game's area and floor checks kept.
- Optional short fade into and out of dungeons.
- Multiplayer: with SteadyFrame on the host, the destination's buildings are sent while you walk to the portal, and you arrive once the host confirms they are all with you.
Smoother play around large bases
- Skips the game's object create/remove pass while nothing it looks at has changed, and finds objects to unload by zone instead of checking every loaded object.
- Places the rooms of a dungeon that loads near you over a few frames instead of one long frame.
- Rebuilds grass after the ground changes within a few milliseconds a frame, nearest first, instead of all at once (up to a second at long grass distances). Behind a loading screen it still rebuilds at once.
- Keeps ground meshes when a building streaming in or out asks for a rebuild that would change no height.
- The terrain builder no longer pauses 10 ms after each zone while more are waiting, so new ground appears sooner when flying, sailing or running into new land.
- A building piece that arrived over the network is not checked for support (or worn by weather) while objects around it are still being created, so it cannot fall for a floor that is merely not there yet. The game itself waits 30 seconds after a piece appears; this waits at most 120. Pieces you place are checked at once, as in the game.
- Draws grass without asking the engine for the camera and each patch's transform thousands of times a frame.
- Draws grass from the graphics card's memory: the card works out which grass is in view and how far it fades, and each kind of grass is one draw. The same grass; 1-2 ms of main thread less a frame at a base with grass to 200 m. Needs compute shaders; without them grass is drawn the game's way.
- Mistlands mist reads each mist area's position once per update instead of once per particle.
- Less garbage from collisions and world-object data.
Fixes
- A loading screen that never lifted after an object near the destination was destroyed without the game knowing.
- An error when a tar pit that had not finished loading was removed; log lines written every frame or on every chest open.
Requirements
- Valheim with BepInEx 5 on Windows.
Install
- Close Valheim.
- Extract this archive into the Valheim game directory. The DLL should end up at
Valheim/BepInEx/plugins/SteadyFrame.dll.
Settings
Valheim/BepInEx/config/ru.ivest.steadyframe.cfg, changeable with Configuration Manager except section 9:
- 1 - General: Enabled. Turning it off stops everything that can stop at once and the rest after a restart; started with it off, SteadyFrame patches nothing (the game runs as without it), and turning it on takes effect after a restart.
- 2 - Modules: Transitions, Object streaming, Terrain, Structures, Grass, Housekeeping (restart required); Reuse collision data, Mist emission lookups.
- 3 - Transitions: Dungeon fade, Teleport cooldown, Narrow range while loading, Defer distant nature.
- 4 - Multiplayer: Early object delivery, Send boost.
- 5 - Object streaming: Skip idle passes, Unload by zone, Dungeon spawn budget (milliseconds a frame; 0 places dungeon rooms the game's way, all at once).
- 6 - Grass: Rebuild budget (milliseconds a frame; 0 rebuilds grass the game's way, all at once); Draw on the GPU; Lean draw pass; Reuse grass arrays.
- 8 - Terrain: Keep unchanged ground meshes.
- 9 - Verification (in the file only, hidden from Configuration Manager): diagnostics for the shortcuts that replace a computation of the game (idle pass, unload by zone, unchanged ground meshes, grass draw pass, GPU grass, mist lookups, dungeon spawn). With one on, the game's own result is used, any difference is logged, and totals are written every 30 seconds. Off for play. Loading-screen shortcuts (narrowed range, view order, arrival checks) have no such mode: they change when things happen, not what is computed.
Compatibility
- If ValheimCommunityPatch or Valheim Performance Optimizations change the same game code, the overlapping part of SteadyFrame stands down and says so in the log; the rest keeps working.
- With ValheimCommunityPatch 0.35 or later, SteadyFrame uses VCP's API: where both do the same job (object creation and unloading, dungeon placement), SteadyFrame's version runs and VCP's is turned off for the session, and the log says so. This is decided per job at start: with SteadyFrame's setting for a job off (or its version not applicable to this game version), VCP's fix does that job for the session instead, and changing the setting takes effect after a restart. With VCP's idle-pass skip doing the job, objects far out may fill in up to a second after arriving through a portal. VCP keeps its terrain builder (SteadyFrame's Terrain module stands down); SteadyFrame's destination terrain priority, terrain cache and ghost-zone pause go through VCP's API, the pause only while no other player is connected. Housekeeping stands down with VCP, which carries its own version of each of those fixes. With an older VCP, the overlapping parts of SteadyFrame stand down as before.
- SteadyFrame checks for overlapping mods once, at start; a mod that patches the same code later is not noticed.
- Logged: errors, stand-downs and VCP handovers, a line when GPU grass drawing starts, and anything a verification check (section 9) finds.
CHANGELOG
Changelog
1.2.1
- With chunk loader mods (ChunkLoader): Object streaming no longer unloads the zones a chunk loader keeps loaded. They were destroyed and created again thirty times a second: on a server WardIsLove's wards there filled the log with NullReferenceExceptions, and a player joining never got past the loading screen. Objects another mod keeps listed now stay loaded, as in the game.
1.2.0
- With ValheimCommunityPatch: the hand-over is decided per job. Object streaming no longer stands down with VCP 0.39 (its log-spam fix runs beside it), and one SteadyFrame setting switched off no longer takes the whole module down: VCP's fix for that job runs instead. VCP's fixes are only turned off once it is certain SteadyFrame's version runs.
- Started with "Enabled" off, SteadyFrame patches nothing; with FastLoading installed it no longer touches VCP's terrain queue. Switched off in play, the collision, network package, tar pit, projectile and log fixes stop too.
- After a portal arrival, objects are created in small portions also when the Terrain module is off or stood down.
- GPU grass switched off holds no graphics memory and does no work; switched off in play, it releases everything.
- A part of SteadyFrame that no longer fits the game after an update is left out at start, named in the log, instead of erroring on every call.
- Multiplayer: arrival confirmations are only accepted from the host; a host ignores invalid interest points. With VCP, the ghost-zone pause during the host's loading screen no longer holds other players' world generation.
- Removed: Structures / Support lookups. The game's update of 2026-10-28 keeps the owners of a piece's supports itself, and what was left to save measured 0.004 ms a frame at a large base. VCP's version of these lookups is no longer turned off. The log error "UpdateSupport has 2 owner lookups" is gone with it.
- Fewer log lines in play: dungeon placement and grass totals only with their verification on; totals of a verification switched off are not repeated.
- Smaller fixes: an error in the first step of a dungeon placement no longer escapes into the game; terrain cached for a portal's destination is not dropped before you arrive; the zone index no longer grows while Unload by zone is off.
1.1.1
- GPU grass no longer errors or disappears when another mod removes its own grass (seen on logout).
1.1.0
- Grass is drawn from the graphics card's memory, one draw per kind of grass: 1-2 ms less per frame at a base with grass to 200 m. The same grass. Setting: Grass / Draw on the GPU.
- Portal arrivals with a long view distance: buildings behind you are no longer drawn after the distant scenery.
- Grass reuses more of its memory while you run around large bases.
- No error when the game is closed while a dungeon is being placed.
- Servers forget the send settings of players who left.
- Smaller download: the development tools are no longer inside the mod.
- Settings window: the diagnostic verification switches are no longer listed (still in the config file).
- Settings window: the module switches are listed with the rest, so configuration managers no longer hide them as advanced.
1.0.5
- ValheimCommunityPatch 0.35 or later: SteadyFrame no longer stands down where both mods do the same job. It keeps its own object creation and unloading, dungeon placement and building support lookups, including loading only the arrival area under the loading screen, and turns off VCP's copies through its API. VCP's terrain builder stays, and SteadyFrame's destination terrain priority, terrain cache and ghost-zone pause now work through it. Portal hops became faster in local tests (0.8-1.9 s instead of 1.1-2.3 s).
- The terrain builder no longer pauses 10 ms after each zone while more are waiting. In a test with nine new zones the work took 93 ms instead of 141 ms.
1.0.4
- Multiplayer: tamed animals no longer fall out of raised pens after a portal trip. Only buildings, rocks, trees and ground edits are sent ahead now; creatures and items arrive in the game's order. Update SteadyFrame on the server too.
- Multiplayer: no more arriving inside walls that are still on their way. A trip now ends when the host confirms the buildings within 32 m are with you; when you walk up to the portal they are already there, so the trip stays fast. With an older host the trip waits until no more buildings arrive nearby (at least a second).
- Grass draw pass: the camera is read once per frame and each grass patch remembers its transform, instead of thousands of engine calls every frame. Same grass, drawn the same way; largest gain with long grass distance.
- Mistlands mist reads each area's position once per update instead of once per particle. Same mist.
- Building support lookups use a faster cache: less overhead at large bases.
- Measured with grass drawn to 200 m: about 5.5% higher FPS at a Mistlands base, 2-4.5% at Meadows bases, no measurable change at a mountain base with little grass and no mist.
- Dungeons whose zone loads near you are placed a few rooms per frame instead of all in one: 40-90 ms hitches became 4-10 ms frames. Every room is the game's own, in the game's order, and the zone counts as loading until the last room is in. Checked on 26 dungeons: every object identical to the game's. Behind a loading screen they are still placed at once. Setting: Object streaming / Dungeon spawn budget (0 = off).
- Grass patches reuse the 64 KB instance arrays of destroyed patches instead of allocating new ones as you move. Measured over six passes through Meadows bases: frames over 33 ms 98 -> 51, garbage collections 22 -> 10. Setting: Grass / Reuse grass arrays.
1.0.3
- Portal hubs: the destination terrain of the portal you are nearest to is prepared first and kept until you step through. Before, every portal within reach was prepared at once, and most of that work was thrown away.
1.0.2
- Portal object-creation budgets and ready-zone loading remain active with ValheimCommunityPatch. Conflicting scene, spawn-queue and terrain algorithms still stand down.
- Objects no longer stay loaded beyond the required area for a grace period.
1.0.1
- Fixed the error when a tar pit that failed to load is unloaded.
- Grass rebuild no longer stalls with a very small rebuild budget.
- Objects created by other objects while an area loads are unloaded as in the game.
- Safer after game updates and with an unreadable FastLoading config.
1.0.0
- First release. Contains FastLoading 0.6.2; its settings are carried over.
- Fewer hitches around large bases: idle object passes skipped, unloading by zone.
- Grass rebuilds spread over frames instead of freezing the game.
- Ground meshes kept when a rebuild would change nothing.
- Cheaper building support checks and less garbage from collisions and world data.
- Fixed a loading screen that could hang for ever near a destroyed object.
- Fixed an error when unloading a tar pit and log lines written every frame.