Game World Concept, Design, Creation, and Management

Started by
10 comments, last by fireking 20 years, 5 months ago
Hi, I am currently, a small-time game developer. Technically that means I''m working on a game, but I''m not with a well established game development company nor publisher. I have a few people helping me with the game (non-code related work), and the progress is moving along fairly well. We are currently in the stage of design and concept, and I''m programming a few things along side this process to get a feel for what''s to come. The current task at hand is to figure out how we are going to create/generate/and display our world. More importantly, creating it. The world for the game is rather large, and a world map has already been created. We''ve taken steps to research several geography related topics, such as "biomes" and termperate zones "the north pole is cold, africa is hot". Thing''s like this are being taken into consideration during the design of our world. I''ve spent several weeks researching on the internet on how some commercial games that have already been released generated/created their worlds. It''s hard to tell which games used actual models/meshes, mathematically generated content, or a combination of the two. I''ve found very little information about specific games that use a specific method (my guess is they dont want to reveal how they''ve accomplished something, its a threat to them within their industry). Makes sense. But I''m stuck somewhere in between. I need to know how to create and manage such a massive world, while considering memory management and effeciency, considering servers that will host each portions of the world, how it will all connect together in the end. It is a mind boggling task to take this in all at once. In the mean time, I''ve been researching several different terrain generation methods, and how to create terrain naturally, instead of using some random values all over the place. Methods such as fault formation, mid point displacement, hill or circles generation, valley creation, and other similiar are the basics of generating terrain naturally. The world for this game is fairly large, so I''m currently trying to find the exact way that we''re going to store it. Here are the things that are set in stone. World Map -We have a world map, its a 1024x1024 image. There are 3 different versions of the map. One version contains 6 different colors, specifying the temperature. For instance, a color (r=255,g=0,b=0) might mean that this area is hot and near the equator. Another version contains the Biomes defined by colored areas on the map as well. For instance, a forest is specified on the world map by a color (r=0,g=255,b=0), anywhere this color is drawn on the world map is where a forest lies. Another version contains the plant/vegitation, defined by colored areas. We have not set a limit to how many different versions of the world map can exist. We might discover that there is a need for more world maps so that we can specify other things (one thing I see in the future would be weather and creature placement). I''ve already tried to do a few things, but I''m starting to think that its definatly not the way to go. We tried taking the world map, and splitting up into 32x32 chunks. Resize each chunk to be 1024x1024, fix the resolution loss (easily accomplished in photoshop), then save as an image that contains greyscale color. Generate the terrain using a terrain generation method (such as mid-point displacement), and combine it with the exported image from photoshop. This works fairly well, but is very time consuming. I dont think agrees with the "big picture" either. We need to be able to create the entire world for the player to explore. The method that I was originally going to use was loading of floating-point files. All terrain data would be stored in several files, made up of float point values for each height within the x,y grid. This would be fine for smaller worlds, but I''m beginning to believe its not going to be effecient enough. For rendering, I planned on using a paging system. Depending on the terrain block that you were currently located in, the 8 surrounding terrains would be rendered. There would be a total of 9 terrains in memory at all times. This seems fine, but again I''m beginning to believe its not going to work in the scheme of things. There are no zones, and no scene transitions as of now. I would like to keep it that way if at all possible. But I''d rather figure out how to actually generate the world before I worry about rendering it. The world will not be static either, but the world does have to have a starting point. This starting point is the original world. Throughout game play, the world will be changed of course, and saved on the server. The original plan allows for this to happen, but currently the original plan isnt working as well as I had planned (no pun intended). Ok, so after reading everything I''ve written here, you might be able to understand where I''m coming from, and give me some tastey insight to the secret behind large worlds, how they are designed, generated, created, and rendered. Clearing up a few things: I''m developing a 3d Engine using Open GL, we are using Visual Studio .Net C++, the game is an MMORPG (my second one, first time ever doing 3d though). Thank you for your time.
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
Advertisement
im probably wrong, how about random access files, so it gets data for the current area that you are in, that is if the computer can read so much data in so time
Yeah, but I''m talking about going back to square one. What would even be in the file in the first place? See what I mean? I''m questioning the entire process, from the very start. It would be nice to know how games like shadowbane, and everquest, and other large mmorpg''s accomplish this. Even if I just knew how the actual world geometry data was stored for one of those games, it would help.

I''ve looked all over the net and haven''t been able to find anything of any flavor for storing worlds. (you''ll find tons of articles on tile engines (which still dont tell you about managing large worlds, just small maps), articles about heightmaps (which i can already do), and several other older techniques.
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios
Don''t know if you allready know this one:
(from the makers of dungeon siege)

http://www.drizzle.com/~scottb/gdc/continuous-world.htm
look up the quake bsp format and modify that i think that would work for you.
all i can think of is maybe a file each for height, x,y, texture

and maybe pull data out of that

i reakon just create a quick class to read and write the map data, that is until you think of a better way or it is going too slow
First, I''m no expert but hopefully I can help point you in the right direction. I highly recommend you check out the following article:
http://www.gamedev.net/reference/programming/features/superfrustum/

second, check out:
http://research.microsoft.com/~hoppe/svdlod.pdf
and also check out the related video:
ftp://ftp.research.microsoft.com/users/hhoppe/mpg/svdlod.mpg
The above comes from Hughes Hoppe''s most EXCELLENT 3d home page:
http://research.microsoft.com/~hoppe/

Beyond those, I recommend buying a good book on roam terrain engines.

I am also working on a 3d game. I am just starting and I have not yet gotten to the point of moving to generating terrain. So your questions have me asking my own questions of how I am going to generate and render terrain. I think I will research this problem in my context and report my questions and answers in this thread.

part 1)

How will I generate terrain content quickly? My engineering background will show here...

My first pass idea would be grab matlab and make a matrix for my world. I would populate this matrix with guassian distributed random data. This matrix would be the height map for my world.

Now the problem with this is it is much too erratic, with there being radical changes from point to point. To combat this, I would suggest running a 2d filter over the terrain. By changing the bandwidth of this filter I could achieve rockier or smoother terrain.

But I wonder if this will hold up to realistic scrutiny. I may go try it and report back.

Edit, added:
some results:
I tried this in matlab and I found that one, the level of filtering needs to be high to make it look good at all. And two, it just doesn't feel like earth. The results come across more as an alien world.

Maybe I should add some form of wind and water erosion to my model.

Another thing is tryng to put the whole world into one tile takes up too much main memory (duh!). So I need a method to make subtiles and then guarantee they meet up well at the edges. How to do this... tbd.

I should add that when I am done with my terrain model, I would probably like to take the terrain and treat it as a convex control point hull for either a series of Bezier or NURBS patches. This will smooth terrain further and allow me to render the terrain to polygons with arbitrary precision.

But this begs the question, do I render it to some arbitrary high level of detail and store that to a format that contains edge collapses/vertex splits so that arbitary level of detail is handled this way? Or do I keep it as bezier/NURBS and build bez/nurbs rendering into my engine? Further, if I do use bez/NURBs for my terrain engine, how inefficicient will it be to do collision detection to make it seem like game characters are walking on this terrain?


[edited by - red_mage on November 17, 2003 3:41:26 PM]
Check the "little" thing at www.nevrax.org, I think that engine is able to support large worlds.

Guyver
red_mage, keep going with your research in this thread, i just wanted to let you all know that im reading everything you''re giving me...

it doesnt answer the question, but its helping, so keep it coming

and thanks!
--FirekingOwner/LeaderFiregames Development &Blackdragon Studios

This topic is closed to new replies.

Advertisement