Indie Game Development - "Having fun, making fun"

Saturday, December 27, 2014

Dev Log - Working on the Environment

For the past few weeks I've been working on a host of smaller tasks all aimed at supporting the artists and finalizing the environment.  These include:

A skybox is a series of images of the sky and mountains that player's can see in the distance.  The temp skybox art we were using did not match the theme of the game, so I spent some time searching online for a website that licensed skybox art.  To my surprise there were none.  I then began researching how I could create one myself.  I found a software package named Vue and after a few tutorials was able to create a new skybox.  Our castle now rises up out of the clouds.

Procedural Terrain: 
Next I experimented with creating terrain using a height map.  This terrain would extend from our castle toward the skybox, creating a middle ground visually connecting the two.  This did not prove to be difficult and is actually pretty cool, but I could not pull off the look that we are going for, which is a series of columns rising up out of the fog.  It turns out we can achieve the effect we are looking for by simply modelling the columns we need.  In fact, we can do it with even less polys than the procedural terrain which is good for performance.

Instancing is a method of drawing multiple copies of the same model at a fraction of the cost in performance.  It is great for drawing trees and other objects that you can position procedurally and even animate.  I looked into using it for portions of our environment or for light fixtures.  However, it turned out not to be well suited for the limited number of static objects I was going to use it for.

Mip Maps:
Mip Maps are a way of reducing the texture size used on models that are drawn at a distance.  It can improve both the look and performance of a game.  Luckily, the Sunburn engine I'm using can automatically generate and manage mip maps.  I also tested the environment with a special texture provided by the Sunburn community that displays the recommended resolution of textures based on distance.  Our current max texture size is 1024, which looks pretty good but does become blurred at very close range.  If we have enough memory, I may increase texture resolution so they hold up even at close range.

Normal Maps:
The Sunburn engine supports both normal maps and emissive maps.  An artist had explained normal maps to me in the past, so I had a vague idea about how they worked.  I took the time to research how normal maps are made, and this is going to enable us to create much better looking props while keeping the poly count low.

LOD Models:
While doing some tests, I discovered that all the character's weapons add up to almost as many polys as our environment itself.  Ouch!  I talked to a producer friend of mine about plans to switch to different level of detail models for enemy weapons, and he suggested simply using a lower detail model for enemy weapons all the time.  We will try that out, and if it doesn't look good we can always switch between different detail levels later.

Cover Art:
We will be featuring avatar's on our box art as we did for Kick'n It and Ultimate Dodgeball.  Since we have three different character classes, I would like to show each class on the box cover.  So I searched through all the costumes available for avatars and chose a costume that best exemplified each class.  I then put weapons into their hands and animated the characters into different poses.  The screenshots I took of the characters can now be used to create the box cover.

Wednesday, December 10, 2014

Dev Log - Diving into Audio

I love sound effects in games. Without sound and music, games or movies simply don't hold my attention. I like to start with great music that really captures the action and character of the game. Both Ultimate Dodgeball and Kick'n It had great music. This was a bit of a dilemma for me this time as First Person Shooters rarely have in-game music. I compromised by having a powerful, inspiring soundtrack at the menu when the game loads and the player gets his first glimpse of the level. Then in-game, I switch to different ambient tracks that play based one what part of the environment the player is in. One of these is a mysterious, melancholy tune that I absolutely love, and that I hope players feel works well within the shooter.

I have probably twice as many sound effects in this game as I did with Ultimate Dodgeball. As has been my policy for years, every action or reaction in a game gets its own sound effect. Since I have three character classes and multiple powers, that adds up to a lot of sound effects. But the number of sounds didn't turn out to be a problem. Tracking down real-world sounds like the sound of a dodgeball hitting a wall or the screech of a sneaker on the gym floor is often more challenging than fantasy sound effects such as summoning a fire wall, which can be created from all sorts of different sound clips. The real challenge with doing sound in an FPS is that it is 3d sound.

  In Ultimate Dodgeball, the camera was relatively fixed in the stands while all the sounds came from the action on the court - which was in front of the camera. In an FPS, sounds are being generated all around the player's camera position. Therefore, the sounds need to seem like they are coming from the left, right or perhaps behind the player. Also, while in Dodgeball the distance from the camera to the action didn't change much, in an FPS, some sounds are being generated by action that is close to the player, while other sounds are coming from action that is far away. Therefore, the volume of the sounds needs to trail off over distance. In addition, games often implement a Doppler effect for objects moving quickly by the player's camera. None of these effects are actually difficult in themselves, but it does mean that managing the sound effects is going to take much more effort. And writing that sound effect manager is my next task...