Sunday
Dec022012

Steampunk Gatling Gun Redux with Quixel's dDo

Several years ago I created a steampunk gatling gun for a modeling and texturing class in college. I decided that it might be a good model to test out the new beta version of Quixel's dDo, considering it had a fair number of separate materials. I stuck with the same base texture, but I let dDo do the rest with only minor tweaking. The thing that took the most time was creating the colormap from the original texture (maybe about 40 minutes), but if I had incorporated dDo into my workflow back when I originally created the model it would have taken almost no time at all. I also took some time to render out an ambient occlusion map, which I had never done with the original model (I hadn't learned how to do that at the time). Getting the object space normals rendered out also helped. By the time I got everything into dDo it probably only took me about 20 minutes to get things looking the way they do now. It could probably use some more work, but I honestly can't believe just how good it looks from the minimal amount of work that it took. Below are some comparison shots with the original model and textures. Click to view full size images.

Saturday
Oct062012

Advanced Unity Terrain Creation

I've been working on some art tests for an open-world exploration game and I thought I would share some the resources I have found that help in creating some extremely detailed and realistic terrains in the Unity 3D engine. The main point is custom shaders. Unity's built in terrain shader leaves something to be desired, but there are ways to work around it.

At some point I might get around to creating an actual tutorial, but until then here are some useful links for those of you who would like to get results similar to the images seen above:

  • World Machine - The program I used for generating the terrain.

  • World Machine to Cryengine tutorial - This one is very long and detailed. Even if you aren't using Cryengine I highly recommend watching this to learn how to make effective, realistic terrains before even worrying about importing into a game engine.

  • World Machine to Unity tutorial - This one is much shorter, but specifically references using World Machine and importing into Unity with custom splatmap support.

  • Tom's Terrain Tools - These are a set of tools specifically for Unity that help with importing custom splatmaps generated outside of Unity.

  • ATS Colormap Terrain Shader - This was my starting point for creating a better terrain shader in Unity. Most of the credit for the shader really does go to the creator of this. I simply made a few additions that reduced the visible tiling and improved the support for multiple terrains. The biggest thing here is the addition of a colormap, normalmap, and individual normal maps for each detail texture.

This whole process requires a TON of tweaking and testing. A great deal of artistry is required to get it to look just right. The shaders and terrain generators won't do everything for you, but they get you a much better starting point than if you were to use the built in terrain tools in Unity. If you want to get started coding your own shaders I would recommend you open up some existing shaders and just trying to make a few small adjustments. By doing this I was able to eventually understand what each component was doing and start to work towards the exact look I wanted.

 

Thursday
Aug302012

Beast Feast - Ludum Dare 24 Jam Postmortem

 

So... I programmed a game in less than 72 hours. It's totally playable and, dare I say... decent. I was recruited for this Ludum Dare by the one and only UndergroundPixel at almost the last possible minute and we quickly got to work. The theme was evolution and our idea was simple: You are a monster that drops bombs that kill other monsters that you then eat to evolve. I honestly expected that we would come up with something more complex and slim it down as we ran out of time, but we genuinely delieverd on our original idea. Probably a result of starting with something so simple.

The first thing I set out to do was create some really solid 8-direction controls with basic acceleration, deceleration, and smoothing. Some people might disagree with this decision in an attempt to retain the "retro" feel of the game, but I wanted it to feel more deliberate and not just a thrown together binary system. I spent probably the first couple hours getting it just right, though that is more a result of my very basic programming skills.

After that I quickly adapted some of the movement code for the first enemy AI. I spent a TON of time getting the little orange guy just right. We wanted him to have a certain amount of random motion, but at the same time we wanted him to pursue you if you got too close. To acheive this I gave him a small radius in which he is more "attracted" to you. Otherwise he moves with trajectories of varying degree, reorienting himself in your general direction after hitting walls. The key was making him somewhat unpredictable so that even in later levels he might pose a challege among large numbers of enemies.

When I was finally happy with the little orange guy I started iterating on him to create big red and the croc man. With big red I made him much more aggressive and accurate. To counter act that difficulty increase I made him stop every few seconds and get "angry", stomping up and down... a chance to prepare yourself for his next charge. With croc man I just turned that following behavior up as close to 11 as I could while still making him defeatable.

To mix up those enemies a bit I threw in some more standard fare. Some random 4-directional movers and random vector movers (purple slug and pink slug). The bouncing ghost was going to have a more fluid bouncing motion, but I kind of ran out of time with him and he just became a 4-direction mover with periodic pauses. Oh well.

After all the movement was done I played around with the spawning rates to get a decent difficulty curve, but all of that ended up being tied directly to your "evolution" level. The spawn rates go up if you are doing well (evolving) and go down if you are doing poorly (devolving). The challenge then is to work your way up to the highest evolution level (50 meat) in the shortest time possible. I really like the way this turned out because you can never really lose, you only get set back from your end goal. I think the best time I ever managed was about 145 seconds.

The animations for the evolutions caused me some considerable headache later in the process, but I eventually got things straightened out. I topped things off with the bomb mechanic which I knew would be simple to do from my experience doing the remote bombs in Protobotic (which will hopefully be out soon). After that it was just minor graphical polish (the moving crowd, start and end screens, and enemy animations) and we were at the finish line. There was one bug at the last minute that made you unable to restart the game after completing one round, but we pushed through it and made the deadline without stressing too much.

There have been some great suggestions after posting the game including having ranged enemies, powerups, and leaderboards; but the truth is that we purposely avoided those things from the beginning so as not to get bogged down. We acheived our goals and now we might actually take some time to flesh out some of those suggestions.

Check out our Ludum Dare entry for yourself here. Play the embedded version here on my site or on Kongregate. Props to UndergroundPixel and his friends for all the art, sound, and other design work.

Friday
Jul272012

Parallax Scrolling explained in a GIF

I made this animated gif a while ago to help explain the concept of parallax scrolling to someone. Feel free to share or use it for whatever you want!

Monday
May282012

More Synatomic concepts