Skyrim version Overview map in a voxel/cube world?

Started by
9 comments, last by odrega 11 years, 6 months ago
I am curious as to what procedures people would take if they were to attempt this. I have always liked the concept of the Skyrim map but I am not sure if that is possible/stable for us to do this with a voxel world. The idea would be the following:

gallery_1_8_147350.jpg

gallery_1_8_22149.jpg
- 85 degree angle view
- Zoomed 75+ blocks from the base land level ( so around the 180 - 250 range )
- only top blocks would be rendered ( unless the cave is visible to the top world )
- key locations and possibly players will be visible via a marker of some type ( special icons for each )
- The map would be dynamic with lighting and environment effects such as clouds.

The idea would be to simply lock the players movement, do a far pan zoom, increase the view rendering, reduce what is rendered, and just manage side scrolling and loading of information as that is being done.

My question(s):

  1. Does this sound like it would be a nice system
  2. Do you think it is reasonable for a voxel based game
  3. How would we go about doing it? create a simple mesh of the land and load it up for them to view or simply do a live cam with increased rendering range?
  4. Any other comments or suggestions are welcome.

Thanks in advance. Just wanted to run this idea by you guys to see what your thoughts were.
Advertisement
1.) By 'nice system' what do you mean exactly? System for what? A system for displaying an overhead map of the gameworld?
2.) Absolutely. See 3.
3.) A very simple approach I would take at first is by storing the world in an octree and traversing it near/far rendering more voxels for closer detail that needs higher resolution, and less voxels for objects much further away. Being at a locked angle, you can also have the mountains cull some (not a ton, but it's something) of the voxels they're hiding relatively easily. This thread comes to mind - http://www.gamedev.net/topic/591926-marching-cubes-octree-and-lod-seams/
Well i just meant, do you think the skyrim system has a place in a voxel world or would it be more reliable, and fitting, to do the traditional flatmap rendering of such? I really like the idea of having a render of the world as it currently is and showing key locations or biome information.. maybe even some user information such as owned cities or regions. I just dont know how complex that would be compared to the normal system. (obviously more complex but to what degree I dont know)

I will read that thread when I get home and see what information i can extract to get a test up. I know telanor is going to hate me for this but I think it is worth exploring ( as a system ). Thanks again. If anybody else has any ideas or suggestions please feel free to share them as well. Ill post if, and when, we get a screenshot or if I need more help.
Have you seen these map viewers for Minecraft? I've used some of them for generating png-file maps of the game world in a private Minecraft server I was running to play with two people I know. I generated the explored portions of the map then sent a copy to each of us, and re-generated the map every so often when we explored further (this was before in-game maps). I'd even generate maps of the mines we dug.

You're basically just interpreting the data of the world (which you already have) in a different way and rendering it differently.
All you have to do in addition is have your game be able to mark locations of interest (as part of the world data) and render those on the map also. You could even have the map render the area names over the map.
I've never seen the map zoom in skyrim in action, but from the look I would guess, that they use some kind of LOD for the terrain mesh and texture. So, if you don't have a lod system for your voxel world, you will have a hard time to get it done in realtime. Even worse, if you really zoom out quite far and your cube size is relative small, then you will have fun with subpixel rendering and z-buffer effects.

Therefore I would think about a fix camera high and angle and an orthogonal projection. This way you could render tiles and save them on a texture and update them only from time to time.
@Ashaman73 this is a very interesting concept. Ill talk to telanor and see what he thinks about that process. Thanks again for another great suggestion.

@Servant Yes, we use dynmap for our minecraft server and love all of the features that it supports. The goal would be to get a more... realtime version of the process. The players want to know this information in game and not through a server that does outward rendering. So, while possible, I want to try and get as much information in the actual game as we can. The information displayed will be regions owned, waring locations, and key points of interest on the map. We could, in time, support the players personal wavepoint or markers they have created. Anyway, thanks for the advice so far.

I've never seen the map zoom in skyrim in action, but from the look I would guess, that they use some kind of LOD for the terrain mesh and texture.
They do exactly that.

Even before Skyrim, Bethesda had their whole world map rendered into different levels of detail, stored into meshes and textures inside the game files. The LOD system picks up the different levels it needs and loads the models accordingly. So nothing is processed real time in that respect, its just pre-made low poly/low res models/textures loaded as the game needs them.

For Skyrim they just picked up the least detailed level and assembled it into a 3D map. Make terrain LOD, get a sweet and free ingame map. Pretty clever smile.png

@riuthamus. I guess that if you want exactly the same on a voxel world, you'd need to generate the map on the fly, depending on what you're doing. If players can change the terrain, then it should be updated every time the player open ups the map. If it doesn't, you might get away with just generating it once on a "building world/loading game" screen before the game starts.

Or you could just set up intervals at a fixed time in which the map updates and just let the players wait for their stuff to appear on the map. Normal players aren't that picky with the technical details if the game keeps them entertained nevertheless.

As far as for the implementation, no idea, i'm not that experienced yet. All I know is what caldiar said, octrees could get you easily different interpretations of your world in different resolutions (more exactly, different cube sizes). By zooming in, you go into lower levels of the tree, by zooming out you go into upper levels. Though if you don't already have your map stored in a octree, changing the whole world representation may not worth the hassle.

I *think* that it may be too hard for the CPU to do all of that (massive traversing of octrees if the map is big enough), but I'm not sure, as I said, I don't have any relevant experience.

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

Aren't these 2 different problems? Apples and oranges?

Skyrim has a fixed map.

The map screen doesn't actually zoom out. The menu screen where you select the MAP option scrolls out of view while the map fades in, giving it the feel of zooming out. It's just a very low polygon version of the terrain, with a basic diffuse, normal, and spec map on it. Both of them either kept in ram, or are small enough to load in half a second. Every location you've discovered then gets an overlay icon on the HUD.

---

Off the top of my head (knowing nothing of your program's architecture), for a changing voxel world, I'd have a low detail overworld map that was made up of tiled models. Each model would be a low detail version (8 to 1, 16 to 1, 32 to 1, whatever) of everything in it's zone. When enough changes are made to a zone, I would update it's associated overworld tile. (no need to update after every change, because at that small resolution (8/16/32 to 1) you wouldn't see the changes anyways!

Since you only want to render the top tiles, I would probably start with a small grid model for every overworld tile, then have a diffuse and heightmap texture that get updated. Then you just render out your same grid model for every zone, with a unique texture set for each. You can try different resolutions of grid model to see what gives you the best results.

For the texture generation, I'd just do a for loop over all the top most tiles in the zone, and get their average color and height then RTT those values right into the texture.

I think this would give you an overworld map that was a good rough approximation of your game world.

Disclaimer: I pulled this right out of my ass based on the first post. :)
Prefiltered voxel octrees would seem ideal in this case. They more or less automatically solve the LOD problem.
Well, i did not think this would get so many comments and suggestions! I am overjoyed!

1) The overview map would not be zoomable. You would only be able to view, pan left and right, top and bottom. The idea is to give them a more world based view of what is going on. We have already created he minimap ( radar type thing ) that lets you see where you are and displays wavepoints and such. We want to make this overview map a tool for seeing borders of regions ( owned land of other nations/countries ) and a way to track where you are in the world compared to other players.

2) Our game is 100% multiplayer. There is no single player, the Singleplayer option is just a multiplayer server with a server player count of 1! So loading screens will not exist except for when entering a server. Everything else must be done on the fly and in real time.

3) We are using dx11, and C#. The actual code itself is rather strong... i just am not sure of the best process for creating the overall look and theme I want. I will start out with the ocrtree and see where we can go from there. All of your suggestions are very much appreciated and I will let you know if we make any headway with this process. Thanks again

This topic is closed to new replies.

Advertisement