On slow storage such as an HDD, reading open-world textures and models can’t keep up with movement, so objects appear late or the game stutters while it waits for reads.
Why Moving fast on a mount or by teleport, or entering a crowded area, suddenly calls for many new textures and models → Effect Slow storage such as an HDD can’t read at the needed speed, so read requests pile up, and some loads make the main thread wait until they finish → On screen Textures stay blurry for a while, buildings and characters pop in late, and the game stutters or freezes while it waits on reads
While moving or changing zones, When crowds gather
Owner
Primary owner Game team (Client development) · Also External (External)
Game team action items
Use asynchronous streaming so the main thread never waits on reads, prefetch based on movement direction and speed, show low-resolution textures (mipmaps) and simple models first and swap them in later, briefly cap movement speed or use a loading screen when streaming falls behind during fast travel, state in the minimum and recommended specs whether an SSD is required.
External action items
Tell players to install the game on an SSD and to check whether downloads or antivirus scans are running on the same disk.
Ballpark numbers
According to Microsoft, older hard drives read tens of MB per second and NVMe SSDs read several GB per second, while previous-generation games used around 50 MB per second for streaming. A game built around SSD speeds that reads far more than that can easily fall behind your movement when it runs from an HDD.
On the graph
Outliers only · Frame spike count (by storage type), disk read latency
Where to look
While moving fast, record PhysicalDisk\Avg. Disk sec/Read (average time per read) and Current Disk Queue Length in Windows Performance Monitor together with PresentMon frame time. In a development build, check Unreal’s stat Streaming and stat AsyncLoad, or AssetBundle.asset/allAssets warnings in the Unity Profiler (the result was requested before loading finished, so the main thread waits)
Confirmed if
Disk read latency and queue length shoot up when moving fast, and at the same moments frames spike or textures and objects load late. Gone when the same scene runs from an SSD
Ruled out if
Disk idle but textures blurry: “Out of graphics memory (VRAM).” Fine from the second visit to the same place: “Synchronous loading and shader compilation on the main thread”
Check with
The player’s own environment
Learn more
If it freezes only the first time and is fine afterward, it’s closer to “Synchronous loading and shader compilation on the main thread.” If it repeats on every move only on PCs with slow storage, it’s this cause. “Out of graphics memory (VRAM),” where textures get dropped and reloaded because graphics memory runs short, also causes blurry textures, so check disk read waits and graphics memory usage together. Antivirus real-time scanning can also step in every time the game opens a file and slow reads down further.
Sources
DirectStorage is coming to PCMicrosoft Older hard drives read tens of MB per second and NVMe SSDs several GB per second; the asset streaming budget of previous-generation games was around 50 MB per second; open-world games read and discard distant scenery in real time as the player moves
Texture and mesh loadingUnity Synchronous upload reads and uploads in one frame on the main thread and causes a visible freeze; asynchronous upload streams over several frames
Texture Streaming Overview for Unreal EngineEpic Games The streamer raises and lowers texture resolution (mips) to match the camera view, does most of the work on async worker threads, and loads the mips visible on screen first
Profiler markers referenceUnity AssetBundle.asset/allAssets warning: the result was requested before loading finished, so the main thread stops and waits
Stat Commands in Unreal EngineEpic Games stat Streaming (memory use and count of streaming textures), stat AsyncLoad (async loading statistics)
Windows Performance Monitor Disk Counters ExplainedMicrosoft Avg. Disk sec/Read is the average time one read takes to complete (I/O latency); Current Disk Queue Length is the disk queue length at the moment of measurement