Diablo/Torchlight based game engine questions

Started by
1 comment, last by Flicklizic 11 years ago

Well, I'm building a game engine using directX10 and I need to discuss some ideas and conclusions.

Some informations:

- My game is something like diablo/torchlight style mixed with DotA, usign a third camera view from top to bottom.

- Currently I'm using a quadtree to split the terrain and cut some unnecessary draw calls (frustum culling).

- Each chunk of terrain has its own materials: 2 alpha textures, 8 diffuse textures and 8 normal textures, the alpha texture determine where I should use each texture (I use some logic to cut some unnecessary process at the pixel shader).

- For lightning Im using the Light Pre-Pass system, so I render all the geometry 2 times (only normals first).

- All the meshes are well stored and indexed, so when I need to draw the scene, first I look for all meshes of the same type, put all information from them into an Instance Buffer and then just do 1 draw call for them.

1) Just a conclusion, as I will always be facing almost the same number of triangles because Its a third camera view from the top to the bottom and the camera zoom is fixed (maybe a little zoom will be allowed but almost 99% there will be no zoom) I dont need to worry about LOD, correctly?

2) Now Im using some heightmaps to store the height for the vertices from each terrain, they are stored like a texture, this way Im getting +- 1Mb for each terrain chunk, but I need a better way to do this, just using the heightmap dont allow me to do things like this:

sc2_diablo3_easter_egg.jpg - The terrain isnt continuous, to do this I need to store the x, y and z float information that is expensive...There is a bette way do archive the same result?

3) They use alot of meshes or just bump/parallax occlusion techniques?

diablo-3-gameplay.jpg

-Look to the ground

Diablo-3-6.png-Ground too

4) A quad tree still is a good idea for this or there is a better way?

5) Each time that I need to load an assert I load it using virtual memory, this is correctly? (all my assert data (texture, meshes, etc) are edited custom file types).

Sorry for my bad english, tutorials, books and examples are welcome too!

- Flick

Advertisement

1) Just a conclusion, as I will always be facing almost the same number of triangles because Its a third camera view from the top to the bottom and the camera zoom is fixed (maybe a little zoom will be allowed but almost 99% there will be no zoom) I dont need to worry about LOD, correctly?


Yes, in this case LOD seems irrelevant.

2) Now Im using some heightmaps to store the height for the vertices from each terrain, they are stored like a texture, this way Im getting +- 1Mb for each terrain chunk, but I need a better way to do this, just using the heightmap dont allow me to do things like this:
- The terrain isnt continuous, to do this I need to store the x, y and z float information that is expensive...There is a bette way do archive the same result?


Keep the good old height based terrain engine and use standard models to pimp it, e.g. cliff models and single floating islands.


3) They use alot of meshes or just bump/parallax occlusion techniques?
-Look to the ground

Most likely only normal mapped textures and extra meshes.

4) A quad tree still is a good idea for this or there is a better way?


Which data structure suites best depends on a lot of factors, but a quad tree is a good start.

5) Each time that I need to load an assert I load it using virtual memory, this is correctly? (all my assert data (texture, meshes, etc) are edited custom file types).

You load it into memory, then you pass it to the video driver, which decides itself if it keeps it in standard memory or uploads it in video memory. Once the data has been uploaded, you don't need the memory any longer, this is valid for textures, geometry, shaders.

What I mean by loading using virtual memory is that I dont use normal functions like fopen, I use memory mapping to load the asserts into the memory and then create the "buffers" for each one and give the acess to the GPU.

But really thanks for the replies, they showed me the right way.

- Flick

This topic is closed to new replies.

Advertisement