Final Project - CSE 167 - Student: Allen Ding

CSE167 Final Project - Procedural Terrain Generation
Download
Fall 2004

Project Aims
For my final project, I wanted to do something that to do with procedural graphics. I narrowed it down to wanting to create a procedurally generated terrain after looking/inspired in some books and on the web, although I was also very interested in doing some procedural plant modelling. I was hoping to create a project that would allow me to create some fancy and interesting if not realistic terrain.
Implementation
I read about many, many terrain generation algorithms. Since I did not have that much time to spare, I decided on a relatively simple method for generating fractals, the plasma/midpoint displacement algorithm (mine was based on the one I read in game programming gems I, there are dozens of tutorials on the web). I was hoping to use some other methods, like using particle deposition, lattice, noise functions, etc if I had time, but I ran out of time, so no such luck.

Basically the MPD algorithm creates a 2D array of height values. It involves 2 steps: the diamond step and square step.

My explanation of the algorithm isnt that clear and leaves a little to be desired, but you can find out on the web anywhere about it if you dont already know, or want to understand it better. A lot of this stuff is in 'Game Programming Gems', www.vterrain.org, gamasutra.com, and some research papers. Really cool & advanced stuff is in 'Texturing and Modelling: A Procedural Approach'.

In addition to the basic algorithm that I managed to implement, I also implemented a few other features in my project (w/ explanations):

Stuff I wanted to do but did not have time to:

Success/Failure of Aims
I was quite pleased with the results that the MPD algorithm gave. Although the terrain isnt exactly mindblowingly lifelike (eg, hard to get stuff like coast and flat plains with a hill somewhere), the results were very interesting. With lighting, it can sometimes look really cool I think. I was surprised that the textures looked quite decent, because I wasnt sure that they would apply well to procedural terrain.

I was unhappy with my LOD scheme, and hope to change it to be better some time. At the moment, the terrain meshes are powers of 2, but I think if they were arbitrarily sized, I would be able to generate much better progressive meshes. I do wish I had more time to get more things implemented, like in the list above.

All in all, I am pretty happy, esp. now that the quarter is over :)

List of figures