Appearance
How a world loads
What gets downloaded before somebody is let into your world, in what order, and why it is deliberately not all of it.
The short answer
A world does not load to 100% before you enter. It loads 100% of a set that was chosen.
A world is tens of megabytes of geometry, most of which is behind you, around a corner, or three hundred metres away. Waiting for all of it turns a four-second entry into a forty-second one. Waiting for none of it drops the player into a field of grey boxes that pop in for the next half minute.
So the client sorts everything your world references into three waves.
The three waves
Wave 1 — the door will not open without it
Everything within 60 metres of the spawn point, and the collision for it. Plus the player's own body.
Sixty metres is roughly "the room you are standing in, and the street outside it". It is the distance at which a missing object is a hole you could walk into rather than scenery you notice later.
Collision is fetched ahead of the geometry it belongs to, and that inversion is the whole point:
Geometry you can see but not stand on is a bug report. Geometry you can stand on but not see is a world that is still loading.
Those are not the same failure, and they must not have the same priority.
Wave 2 — the door opens at 85% of it
What can be seen from the spawn but is further out, up to 250 metres, in order of how big it is on screen.
Gated on a fraction rather than on completion, because the last 15% of a skyline is not worth eight more seconds of a static screen.
Wave 3 — you are already playing
Everything else, by distance from wherever the player actually walks. Other players' bodies. The world's sound library. Higher levels of detail.
And a ceiling over all of it
Twenty seconds. After that the door opens regardless of what is still missing.
That is not a tuning number, it is a promise. Everything else on this page can be argued about; a player on a bad connection getting into your world is not negotiable. A slow line makes a world pop in. It never makes a door stick.
What decides the order
Each asset gets a score, and it is a product of three things rather than a sort on any one of them:
| what kind it is | collision beats geometry beats textures beats sound |
| how close it is | to the spawn, and after entry, to the player |
| how shared it is | an asset used by 200 objects unblocks 200 objects |
The three pull in different directions — a collision blob is tiny and critical, a hero mesh is enormous and visible, a 2 KB texture shared by half the world is neither but holds everything up. Sorting on any single one starves the other two. Multiplying them means an asset has to be unimportant on every axis to end up last.
Why the percentage is trustworthy
The bar measures bytes against what has to land before the door opens — not files, and not the whole world.
Counting files is what makes a bar reach 90% and then sit there through the one 30 MB mesh that was the actual wait. Measuring against the whole world would make the bar reach 40% and open the door, which teaches players that the number means nothing.
So: 100% and the door opening are the same moment. The bar also never slides backwards — when better information arrives and the plan grows, it holds rather than flinching, because a bar going backwards reads as failure even when it is just honesty.
Why a second visit is fast
Every asset is addressed by the hash of its own bytes, so a cached asset can never be stale and is never re-checked. Before it asks for anything, the client compares the world's plan against what is already on disk locally.
A returning player usually opens on a bar that is already most of the way across, because it is.
What you can do about it
- Put your spawn where your world is. Everything is measured from it. A spawn point 400 metres from the build makes the whole build wave 3.
- Reuse assets. Twenty copies of one crate cost one download. Twenty slightly different crates cost twenty.
- Keep the entry area honest. What is inside 60 metres of the spawn is what people wait for.
- Write tips worth reading. Set them in World settings → Entry — the wait is the one part of it you can make enjoyable. See world.loading for the same settings from a script.
See also
- world.loading — the screen itself
- limits — what a world may hold
