Sign in to follow this  
eelke_folmer

seamless world impact

Recommended Posts

Suppose one wants to make a game that provides a seamless world (aka world of warcraft) with no loading times. How does one implement this? Usually the game world is broken into zones etc. And when a player enters a different zone this zone is preloaded. However can someone tell me in a little more detail how this is implemented and what impact this has on your graphic engine/ data engine design? Thanks.

Share this post


Link to post
Share on other sites
There's an opensource wow map viewer out there that you might want to take a look at. (It's called wowmapview, so you can just google for that). Basically the way it works and how I suspect WoW itself works is this:

The entire world is broken up into chunks. In wows case I believe each chunk is comprised of an 8x8 grid of 33x33 heightmaps (or thereabouts anyway). You dont *have* to subdivide each chunk, but doing so makes it so that you can do LOD and partially cull parts of the chunk out via frustum culling.

Only 9 chunks are loaded into memory at any given time, the chunk the player is currently in and the 8 surrounding chunks.

As the player moves out of the central chunk into one of the bordering chunks, the 3 chunks farthest from the player are discarded and the chunk the player just entered then becomes the center chunk. Then the 3 new chunks to make the 3x3 grid are loaded.

In the WoW mapviewer the loading isn't threaded in the background so when the new chunks are loaded it blocks the rendering/execution of the app until they are loaded. I guess the trick would be to have all the loading done in a separate thread and just have that thread slowly load things in as it can.

A better way might be to use some sort of distance check in the mix to see how close a player is getting to a certain border chunk. As the player gets closer more and more of it is paged in bits and pieces at a time, so that by the time the player gets to the chunk its loaded and available for rendering/interaction. If the player gets a certain distance away from it, its can be completly trashed to free up resources.

Would love to hear some more thoughts from others on the subject, and I hope this gives you some ideas.

-=[ Megahertz ]=-

Share this post


Link to post
Share on other sites
What you describe sounds exactly like what I'm doing in my engine :)
So I can tell that it works very well!

The only problem I have right now is that I'm using display lists for the terrain, so there's a couple of milliseconds long pause as the list compiles.

However,if I change (which I intend to do) into a more dynamic option, say vertex arrays, the end user won't ever notice any loading :)

I'm also doing the same for game objects (but I figure this won't work in a MMO... ) so model data gets removed when they're not inside one of the nine "quads", but all relevant data such as flags etc are kept!


I dont use a separate thread either, I simply load a bit of the file every frame... now it isn't needed really, but I figure it'll help as the level data becomes bigger :)


Cheers!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this