Showing posts with label procedural content generation. Show all posts
Showing posts with label procedural content generation. Show all posts

Monday, April 8, 2013

Solar Sojourn - Framework Work

I've been focusing heavily on my Solar Sojourn project over the last few days. This project is a continuation of my DirectX scene from last semester, and will be used for my coursework for my procedural terrain generation module this semester.

While I had a working graphics framework at the end of last semester, it was becoming very unwieldy and I wasn't happy with it. The main work I've done this semester has been to reorganize the framework into a more useful method. This was helped significantly with the work I did for my Building Breakout project last month. Based on experimentation, examples from the Rastertek tutorials, and my knowledge of object oriented development, I've finally settled on a class set up that I'm happy with.



Obviously the end product will have more shaders and possibly more graphic sub classes, but this should give the framework's general idea.

I've been working hard over the past week to get the basics of this framework implemented in the project code. Unfortunately, it's been a lot more work than I expected, and I've been very busy with Dare and other projects. Right now, I have a project that builds, exits, and displays a black window of whatever size has been set, but it doesn't yet render objects. I'll be posting an update as soon as I have more.

Of course, in the module labs I have been practicing other code that will eventually be incorporated in the project. This includes procedural terrain mesh generation based on noise, perlin noise, midpoint displacement, smoothing, and other techniques. We've also practiced post-processing techniques such as blur and glow, which will be essential in making the bright light from the sun believable.

I'm really excited to get working on the meat of this project, since I am hoping to build my dissertation on it.

Monday, March 25, 2013

Dissertation - A New Idea

Previously, I posted here that I was interested in continuing my AI project from last semester as my dissertation for my master's degree. I am still considering this, but today I read an article that really sparked my imagination and interest.

The article covers a talk given today at GDC 2013. You can read it here on Develop. The main point of the talk was that Warframe developer Digital Extremes used AI strategic mapping (Tac and Influence maps) to determine enemy spawn frequency and locations in procedurally generated levels. This seems like an area with lots of interesting possibilities, and would go very nicely with my procedurally generated level backgrounds in my Solar Sojourn project.

I'll be talking to some of my advisers tomorrow about this idea, as well as my previous idea for a fuzzy logic controller plugin generator. I'll definitely share more information as soon as I make a decision!

Sunday, March 24, 2013

Solar Sojourn - The Design

Earlier this year, I mentioned that I would be creating a game centered around dynamically generated terrain for the coursework for one of my modules. I planned to build on my scene created for last semester's DirectX module, which consisted of a ship flying around the solar system. I planned to allow the user to land on specific planets and explore them.

I've decided to modify and simplify that idea a bit. Instead of freely flying around space, the user will simply select a planet from a menu (though I hope it will be a graphically beautiful menu, showing the planets rotating around the sun in space). The main gameplay will be on the planet. I've decided on a Star Fox style shoot-em-up, where a series of enemies attack the player. Like Star Fox, it will essentially be a rails shooter where the player only has freedom of movement in a limited plane that is constantly moving forward.

Each planet will be a different level. Levels will be fairly simple, with the ground and scenery dynamically generated while the enemies and collectibles will be planned out. Each planet will have different atmosphere and gravity settings, with unique hazards to each. For example, some planets will have high winds or a corrosive atmosphere, or a deadly sunrise.

I still have quite a lot of work to do for this project, and I'm still in the early planning stages now. I'll post updates here as I progress. Look forward to it!

Tuesday, January 29, 2013

Procedural Terrain Rendering: Project Planning

It's that time again - starting a new semester, everything is fresh and new, and new coursework is on the horizon. One of my projects this semester will involve procedural terrain rendering. Since I already have a project from last semester that's all about exploring the solar system, this semester I decided I'd build on that and allow the user to land on planets. This will allow me to dynamically generate the terrain for each planet, using a set of parameters specific to each planet. I'm hoping this will allow me to show off the ability to write good polymorphic code, making this an excellent portfolio piece.

Screenshot from RasterTek tutorial for height maps
My scene last semester still needed some fixing up. In particular, for me to be happy using it I would need to fix the following features:

  • Complete Program Restructure: I'm dissatisfied with the RasterTek framework for such a large project, and want to set it up in a way more intuitive to me. This will also show that I can do more than copy/paste from a tutorial site.
  • Particle System Fix: My particle system is currently slightly broken - the particles do not billboard correctly and some work needs to be done on ordering them properly when one is spawned. Additionally, they need to fade out gracefully rather than suddenly winking out of existence.
  • Mouse-Assisted Camera Control: As it is, the camera is a pain to deal with. Adding mouse options to the controls would really help.
  • Select-able Planets: In order to land on a planet, the user will have to be able to select the planet. Luckily RasterTek has a tutorial for this. I could even have a probe or laser sensor shoot out to the target on click.
Additionally, if I have time I'd really like to add some or all of the following:
  • Additional Moons/Dwarf Planets: After the program restructure it shouldn't be too hard to add the rest of the moons and dwarf planets to the solar system.
  • Lighting effects (bloom, glare, lens flare): The sun doesn't seem bright enough in the current scene without some effects. More special effects will make the scene much nicer.
  • Re-sizing and re-positioning of planets for realistic representation: I'm not sure on this one, as I want it to still be possible to easily explore the system. Perhaps if the planetary orbitals were also added, and if there was some indication of where nearby planets were - maybe a minimap?
  • Asteroid Field: I didn't have time to implement the asteroid field last time. This could actually tie in to the procedural generation, as I could generate asteroid shapes on the fly.
  • Planetary Rings (Saturn, etc.): A simple disk with a partially transparent texture could represent planetary rings.
  • Coordinate Readout: This could help the user find their way around.
  • Representation of Planetary Orbit (line): Another aid in helping the user find their way around and see the different planetary orbits.
  • Planetary information display: It would follow the theme to have planetary information displayed to the user on their screen. A fancy target-lock would be really awesome, with text on the screen with information about the planet. I know a professional voice actor who might be willing to voice this as well.
State of the scene at the end of last semester
I am hoping to get these objectives done in the first half of the semester, leaving the second half to do the module work. That's all well and good, but I need plans for the actual terrain generation. This plan will have to grow and change over time, since I'll be learning more about my capabilities as I go through the module. For now, I've got some ideas for basic features:
  • Mountainous Terrain based on Parameters: For each planet, some sort of mountainous terrain will be generated based on the provided parameters
  • Planet color/texture: Each planet/moon will have it's own color or texture
  • Navigation on Planet Surface: The user will have to navigate on the planet surface somehow. Most likely this will start as first person perspective.
  • Gravity: Gravity WILL be in effect on the planet, and the user will be in a ground vehicle, so it will limit their travel. Gravity will be different for each planet!
In addition to these base goals, I would like to add some more interesting things:
  • Gaseous Planets: It would be cool to be able to fly down through gaseous planets. However, this might be too difficult.
  • Asteroids: It would be excellent if dynamic asteroid generation was possible. Since asteroids are very small compared to planets, perhaps the user can select the asteroid belt as a whole and fly around through it, only then seeing the asteroids up close enough to see the dynamic geometry generation. When in the main space view, they can just be spheres or a few "lumpy" asteroid models.
  • Water: Landing on Earth, it would be quite likely to land near water. Water effects would make this much more realistic.
  • Plant-life: Likewise, some plant life would make an Earth landing much more realistic.
  • Volcanoes: These are quite common on some planets, so these would be great geometry to look at, as well as some special effects involving lava.
  • Precipitation: In addition to rain on Earth, some planets have their own precipitation of various types (acid rain on Venus for example).
  • Ice: Some planets have ice of various types (Mars for example).
  • Sun/Moons: Seeing the sun or moon (or planets) from the planet surface would be interesting too, especially if time passed normally while there and the time the user landed actually dictated the time of day on planet.
  • Rover device: Rather than a purely first person perspective, it might be cool to see a little animated rover running around on the planet surface.
  • Gameplay objectives: Adding in samples to be taken or some other kind of objective would make the game more interesting.
I'm sure many more ideas will come to me as I go through the module.