Zone capabilities
by Michael Morris · in Torque 3D Professional · 12/07/2011 (11:42 am) · 12 replies
Good morning,
I'm still learning what T3D can do, so I apologize if my question seems overly basic. Also, I plan on breaking out the FPS tutorial this weekend so if my question would get answered there, just say so.
Anyway. Is there any sort of level or zone caching feature built into the T3D engine, to reduce or eliminate load times? For example, have the current zone plus all adjacent zones loaded into memory (we'll call the total zones loaded in memory as being the Zone Range). When the player changes zones, the game updates the Zone Range by adding new zones in the range, and removing anything out of the range from memory, preferably in the background while the player is playing. The idea is that the player is not presented with a loading screen when changing zones.
Is this supported out of the box at all?
I'm still learning what T3D can do, so I apologize if my question seems overly basic. Also, I plan on breaking out the FPS tutorial this weekend so if my question would get answered there, just say so.
Anyway. Is there any sort of level or zone caching feature built into the T3D engine, to reduce or eliminate load times? For example, have the current zone plus all adjacent zones loaded into memory (we'll call the total zones loaded in memory as being the Zone Range). When the player changes zones, the game updates the Zone Range by adding new zones in the range, and removing anything out of the range from memory, preferably in the background while the player is playing. The idea is that the player is not presented with a loading screen when changing zones.
Is this supported out of the box at all?
#2
Another example would be something like Morrowind or Oblivion, both of The Elder Scrolls series. If you load the world map up in the editors, they are most definitely made up of square blocks of land which get loaded into memory only when needed ahead of time rather than the world being one very large "mission zone".
Of course, now that I'm thinking about it, maybe Morrowind and Oblivion simply limit rendering content to what the configured view distance allows rather than having internal code that said "load the immediate area and all adjacent areas"...
I think my first question just opened up about ten more. I think I see now why careful world and level design is so important for game projects. I think I might post some more topics in the Game Design section first, and do some more research. I appreciate your response, however.
12/07/2011 (3:51 pm)
I think mission file is the term I'm looking for, but maybe not. WoW would be a good example for this topic, although my interests are not strictly related to MMO's. With the WoW example, when I mention zones, I'm talking about the zones on a map which create an entire continent. While you get loading times when traveling to a different continent (likely due to moving to a different server instance), you do not get loading times traveling from zone to zone.Another example would be something like Morrowind or Oblivion, both of The Elder Scrolls series. If you load the world map up in the editors, they are most definitely made up of square blocks of land which get loaded into memory only when needed ahead of time rather than the world being one very large "mission zone".
Of course, now that I'm thinking about it, maybe Morrowind and Oblivion simply limit rendering content to what the configured view distance allows rather than having internal code that said "load the immediate area and all adjacent areas"...
I think my first question just opened up about ten more. I think I see now why careful world and level design is so important for game projects. I think I might post some more topics in the Game Design section first, and do some more research. I appreciate your response, however.
#3
I'm in the development of an RPG my self none MMO but it will be pretty big.
12/07/2011 (4:39 pm)
I'm trying to make a simular decision. On one hand this engine has to load pretty long when you start adding content. Currently I am seeing the load time exponentially increase when adding elements to the forest library since it loads this into memory every mission load. This is something I will research into to make this load once and only once lowering the mission load time. The other choice i have is to make large maps. Where you can easily have LOD on your objects to cause items to not render until you have a good enough distance to see it. I'm in the development of an RPG my self none MMO but it will be pretty big.
#4
As far as I'm aware, 'loading' a mission, from the point of view of the server, simply involves deleting all the currently loaded objects (in the 'Mission Group'), then executing a .mis file which creates a bunch more objects. With a bit of work, you could work on some sort of partial level loading - maybe breaking down small zones into separate .mis files with their own unique named SimGroups, and loading and deleting them as the player moves around.
Streaming geometry isn't supported out of the box, and it's not a simple feature - but it's doable!
12/08/2011 (4:22 am)
Quote:Of course, now that I'm thinking about it, maybe Morrowind and Oblivion simply limit rendering content to what the configured view distance allows rather than having internal code that said "load the immediate area and all adjacent areas"...I'm fairly sure that any game with a map as large as that of Oblivion or Morrowind will be streaming level objects, not just culling them out of the render. To actually have an entire large world's worth of objects in memory (RAM, I mean), even without them being rendered, would be infeasible.
As far as I'm aware, 'loading' a mission, from the point of view of the server, simply involves deleting all the currently loaded objects (in the 'Mission Group'), then executing a .mis file which creates a bunch more objects. With a bit of work, you could work on some sort of partial level loading - maybe breaking down small zones into separate .mis files with their own unique named SimGroups, and loading and deleting them as the player moves around.
Streaming geometry isn't supported out of the box, and it's not a simple feature - but it's doable!
#5
view Occlusion Blocker - www.garagegames.com/community/blogs/view/16623
i can see a huge use for something like this, ESP if we can bury it in a terrain.... no need to render anything you cant see right?
no, this wont take care of the loading times. but it might be an easier solution to not have to render stuff like the forests and what not until u get to it.
12/08/2011 (6:29 am)
while the loading and streaming geometry would be something to work with... how about a possible easier solution for now? (just thinking in baby steps)view Occlusion Blocker - www.garagegames.com/community/blogs/view/16623
i can see a huge use for something like this, ESP if we can bury it in a terrain.... no need to render anything you cant see right?
no, this wont take care of the loading times. but it might be an easier solution to not have to render stuff like the forests and what not until u get to it.
#6
12/08/2011 (7:01 am)
Indeed, Morrowind et. al. streamed chunks of terrain. Atlas revived would be a start.
#7
Adding a preloader for an adjacent area would take up resources and raise the min spec needed, but i'm sure somebody in this community is smart enough to do that.
Also, morrowind land mass is tiny in terms of what torque is capable of, if i remember correctly morrowind was some 2km x 3km. Even oblivion was not that much bigger.
The issue to some degree is how detail you want the terrain iteslf with torque, assuming you have enough power a 4096 heightmap gives you the ability to make an expand of terrain that would take a pretty large team of people to populate. you could rewrite the terrain LOD system to be more agressive i guess.
12/08/2011 (7:21 am)
Can we at least acknowledge that the WoW system uses hundreds of servers and 1 server per mission area, i'm pretty sure it wouldnt be that difficult to reduce the loading speed between servers if each mission is a dedicated server.Adding a preloader for an adjacent area would take up resources and raise the min spec needed, but i'm sure somebody in this community is smart enough to do that.
Also, morrowind land mass is tiny in terms of what torque is capable of, if i remember correctly morrowind was some 2km x 3km. Even oblivion was not that much bigger.
The issue to some degree is how detail you want the terrain iteslf with torque, assuming you have enough power a 4096 heightmap gives you the ability to make an expand of terrain that would take a pretty large team of people to populate. you could rewrite the terrain LOD system to be more agressive i guess.
#8
12/08/2011 (12:51 pm)
Quote:Can we at least acknowledge that the WoW system uses hundreds of servers and 1 server per mission area, i'm pretty sure it wouldnt be that difficult to reduce the loading speed between servers if each mission is a dedicated server.That supposes the existence of dozens of dedicated servers, which I personally don't have access to, so I didn't bring it up ;P.
Quote:The issue to some degree is how detail you want the terrain iteslf with torque,Conceivably, you could put quite a lot of map into a single Torque terrain, making streaming the terrain itself, and all the difficulty included in that, less important. But of course you start to run into our old friend floating-point precision errors, which will put the real limit on your world size until you start jigging around with the engine to avoid it.
#9
12/08/2011 (1:44 pm)
How does streaming terrain introduce floating-point precision errors? Is it an attribute to streaming terrain in general, or is it some sort of limitation to the T3D engine itself?
#10
I started thinking that the camera-centric world (where the world is moved around the camera) would be difficult to pull of in a multiplayer scenario because the world would have to be simulated for each player independently. T3D's world-centric world (where the camera moves and the world is stationary) seems better suited to multiplayer games in general but limits the distance you can move before your simulation starts having fits. Or am I looking at this all wrong?
12/14/2011 (10:05 am)
Compression contributes to floating point errors, unless you don't compress your floating point numbers. The problem that you run into with T3D is that, the farther you are from the world origin the worse the precision errors become. Nature of the beast and all.I started thinking that the camera-centric world (where the world is moved around the camera) would be difficult to pull of in a multiplayer scenario because the world would have to be simulated for each player independently. T3D's world-centric world (where the camera moves and the world is stationary) seems better suited to multiplayer games in general but limits the distance you can move before your simulation starts having fits. Or am I looking at this all wrong?
#11
Its all about reference points, in the standard model (Torque World Space) there is an implicit reference point at <0,0,0> and so the actual global space is Point + <0,0,0> which is handily enough just Point. Also because all clients etc. share the reference point, you don't need to send it across.
However for larger global spaces, each local 'world' space simply specifies its reference point <0,0,0> in some higher precision (or even lossless number format) global space, when two worlds collide you just have to remember to use the reference points to convert between them.
The key point is to notice that its only when you need to reference between worlds that any of this matters, for things inside each world, its all just the same as the all share the same reference (the origin).
A camera space system is simply a model where the reference point is changing every frame. Thats usually way too often, however relocating a local machines reference point every now and again (based on how far the camera/area of interest has travelled) is a useful way of avoiding precision issues.
Another way of thinking about it, is that each 'world' is just a object space matrix of some 'global' space.
12/15/2011 (8:48 am)
Richard: Its all about reference points, in the standard model (Torque World Space) there is an implicit reference point at <0,0,0> and so the actual global space is Point + <0,0,0> which is handily enough just Point. Also because all clients etc. share the reference point, you don't need to send it across.
However for larger global spaces, each local 'world' space simply specifies its reference point <0,0,0> in some higher precision (or even lossless number format) global space, when two worlds collide you just have to remember to use the reference points to convert between them.
The key point is to notice that its only when you need to reference between worlds that any of this matters, for things inside each world, its all just the same as the all share the same reference (the origin).
A camera space system is simply a model where the reference point is changing every frame. Thats usually way too often, however relocating a local machines reference point every now and again (based on how far the camera/area of interest has travelled) is a useful way of avoiding precision issues.
Another way of thinking about it, is that each 'world' is just a object space matrix of some 'global' space.
#12
@Blood
Yeah, I think just changing the movement speeds down to something less than 40mph (man, the default speed is fast) might make it seem larger. I like the idea of a vast, endless-seeming expanse of land, but it's tons of work to get that populated in any kind of meaningful way. The forest editor helps a lot but there's still quite a pile of work left.
12/19/2011 (2:19 pm)
Well, yeah - but the server has to keep track of who is where in some sort of common reference. How do you keep everything relative when they're far enough apart that your floats are down to the last 10th? The only thing that comes to mind is to throw bigger numbers at it. <shrug> I'm just not getting it, so I think I'd better look for some good reading material on this.@Blood
Yeah, I think just changing the movement speeds down to something less than 40mph (man, the default speed is fast) might make it seem larger. I like the idea of a vast, endless-seeming expanse of land, but it's tons of work to get that populated in any kind of meaningful way. The forest editor helps a lot but there's still quite a pile of work left.
Torque Owner Richard Ranft
Roostertail Games
The level object Zone is used to assist in culling "unseeable" geometry from the render bucket.
The mission file, or level file, is the whole of what you see when playing. Only one mission file can be loaded into memory at a time, but in theory it is possible to run multiple instances of the dedicated server with other level files loaded simultaneously. You would still have a short load time because you would be changing server instances, similar to moving between continents in WoW.