Log in
13
August

Well, it took a bit longer than I had hoped…and this post is a bit after the fact since we’ve been busy with moving and getting organized again. But, the ethanol gas-station-finder is ready for your viewing pleasure.

After the original submission, I had a few things to fix…some minor bugs that crept up as I had made last minute changes to the code base. It didn’t help that I only had the simulator to test on at the time. A word of advice to those who are using or thinking about using Google’s MapKit, specifically the MKReverseGeocoder: after a hefty amount of testing, your geocoding service may unexpectedly stop working after a certain time. Evidently, after you have used the geocoder service a certain amount of times (during testing you will likely use it quite often), Google shuts you down for the remainder of that day. After some research, there wasn’t a whole lot of info from Google on this topic, and it’s becoming a bit of a sore spot for some programmers…so hopefully it does get addressed soon.

So that’s all I have for you now, be sure to check out the app!

Well, I have to say, it was an epic journey. I started out knowing very little Objective C about six months ago, and here I am…waiting for the app to be approved. Not bad considering the first four months of which I was finishing up my Bachelor’s degree at Full Sail (for Game Dev). It was all-in-all a positive experience. Being primarily a PC guy, I had to learn how to get around in the mac environment, familiarize myself with XCode, and embrace a whole new style of development (thinking of Interface Builder here). I did have quite the beast of a time with Apple’s provisioning profile/development certificate system. Stuff is a little hairy there, but if you look at enough forums (stackoverflow is great!), eventually you’ll get the answers you’re looking for!

Here’s to my first app! ….Now let’s hope it gets approved without any hiccups :D . Check back soon for a link to check out the app! Here’s the company’s site that’s funding the app, check them out while you’re waiting…

Ray

Well it’s been a great experience these last five months! I never could have imagined that I’d learn so much in such a little time. Honestly, I didn’t know what to expect, I wasn’t sure if I was ready. Now that it’s all behind me I can confidently say that I am ready to press forward — to begin my career in the Video Game Industry!!

To briefly fill you in, a team of 12 programmers and 2 artists began working on Alien Antix in December of ‘09. It was to be a “whimsical platformer” set in an alien environment. The outcome was indeed that, and much more! We ended up with some refreshingly unique aspects and concepts, such as the dancing plants, the enemies, the art, and some of the visual effects.

Of course, all of the experience couldn’t have been without its own difficulties, but the challenges that arose during the development process only further prepare me for what is to come. On the same note, I am aware there is much more to learn, and I accept (and thoroughly enjoy) that every day is filled with opportunities to learn and grow in all areas of life. So now begins the journey into a new world — exciting, challenging, and hopefully ready for what I have in store for it!

Hello again! These are exciting times…and things are getting crazy!! First off, I will say that I will probably not be able to make too many posts over the next five months. Starting this month (12/2009), I have entered Final Project at Full Sail University. This encompasses the last 5 months of the degree and involves creating a full-scale game, with the final product in mind being a sweet demo to show-off to any who may be interested. With that said, I bring you the fruit of last month’s labor, a continuation of research into volumetric cloud rendering from the prior month, culminating in what I consider a fairly decent volumetric cloud…

Volumetric clouds, with self-shadowing yet to come.

Volumetric clouds, with self-shadowing yet to come.

Having stumbled upon a decent render to 3d texture demo from nVidia, I began familiarizing myself with the concepts of frame buffer objects and using a pixel shader to create “geometry” and perform a ray marching algorithm for blending. These techniques are becoming more and more widely used from what I understand, especially as graphics cards continue to become more and more powerful…to the point where 3d textures are well-supported and efficient. There were definitely a fair share of mistakes and challenges along the way, a few of which I have screen shots of:

Turns out only 1/4 of the texture memory was being filled :(

Turns out only 1/4 of the noise texture's memory was being filled :(

A complete 3d noise texture...looking like red carpet!

A complete 3d noise texture...looking like red carpet!

One of the techniques I learned during the journey is called “splatting”, which is a way to draw things to the screen via a 3d texture and a fragment shader. The process is to fill out each slice of a 3d texture by rendering a quad and specifying appropriate 3d texture coordinates. Different 3d textures may be rendered to any number of frame buffer objects to create an animation, such as a wave.

The noise appears as furry extrusions of the cloud surface.

The noise appears as furry extrusions of the cloud surface.

The most difficult part, which I have yet to master, is to find a way to do the entire process in an efficient manner so that it is viable in real-time. Currently, no calculations are done on the CPU at all. There is no actual geometry and blending must be performed by marching a ray through the volume and accumulating the color values from back to front towards the camera. The following picture is before threshold values were tweaked properly to make the dark values blend in completely with the background and to make the rest to lean more towards white and then blending that with whatever is behind it (from the camera’s perspective).

Blending is incorrect, producing glittery areas where the noise values are closest to 1.

Blending is incorrect, producing glittery areas where the noise values are closest to 1.

A very interesting effect that happened along the way was what the following picture portrays: a very cartoonish cloud look. This may be useful someday :)

Sweet volumetric cartoon clouds Batman!

Sweet volumetric cartoon clouds Batman!

And to finish up, the final product was a matter of introducing a much higher influence from the background sky color. This had the effect of making thinner parts of the cloud actually look thin. The thicker parts leaning more towards white — along with a slight blurriness to the noise applied — helped to make the clouds fluffy instead of blocky.

Volumetric clouds, with self-shadowing yet to come (which is why the don't look convincingly 3D).

Volumetric clouds, with self-shadowing yet to come (which is why the don't look convincingly 3D).

31
October

So it’s been about a month…which means I’ve been super busy. The latest project I’ve gotten myself into has been learning about volumetric clouds. And wow has it been a lot of learning! I can’t say that I completely understand everything that I’ve delved into concerning this topic, but I’ll try to explain it all as best I can.

So what exactly does volumetric mean? Simply put, it refers to objects that have volume, that is to say they can be measured. Contrary to other popular ways which are much more CPU-friendly, such as billboarded clouds, volumetric clouds are meant to be truly 3-dimensional, and therefore, much more realistic.

Marching Cubes

I am sure there is more than one way to create volumetric clouds, the method that I am currently experimenting with is called Marching Cubes. Here is a great explanation, by Paul Bourke, that helped me to understand them. Basically, it is a way to visualize a set of 3d data (referred to as a scalar field). This data could be loaded in from a file or it could be generated on the fly by some arbitrary function that you define. Since no two clouds should be looking the same, the procedural approach, meaning generating in real-time, is the approach that will allow for the most variety. Of course, the challenge is to make the generating of the geometry fast enough to allow for interactive frame rates.

The following objects were made with various algorithms used to generate the scalar field values…such as a warped plane, a sphere, or just pure experimentation.

A cave!

A very strange spherical ?cloud?

And an igloo..

Perlin Noise

Yet another challenge to making nice fluffy clouds is coming up with a way to make them look nice and fluffy…or to just make them look like clouds AT ALL. Once I had my head wrapped around the concept of marching cubes, I still had no idea how to generate the proper cloud-worthy data (scalar field) that the marching cubes algorithm builds the geometry from. This is where noise comes in, and Perlin Noise is what I found to be a good place to start.

Eventually I added the concept of noise to my increasing wealth of knowledge, but I needed more…or rather, a different type of noise that would generate the fluffiness I sought. It was then that I stumbled upon a noise library, called libnoise, which I must say is very expansive in its noise-making capabilities. Since I had little motivation to mess around trying to derive exactly the right type of noise from mathematical equations, I found libnoise to be just the right thing. I am still experimenting with it, but I’ve had some more promising results this way.

2d texture applied to a plane

2d noise texture applied to a plane

The above image looks more like clouds, but it was only an experiment with noise textures, this one’s only 2-dimensional…and that’s easy…and lame ;) !

3 gluspheres with noise and alpha blending

3 gluspheres with noise and alpha blending

I broke away from marching cubes for a bit to try using just a regular sphere and then applying noise to it. It starts to look more convincing, but I’m just not feelin’ it. I think this route would be doable, but it doesn’t allow for the immense flexibility and control that marching cubes do.

A cube-shaped cloud created with marching cubes and billow noise

A cube-shaped cloud created with marching cubes and billow noise

This is the very last version I have created using marching cubes. It uses billow noise from the libnoise library and does some simple alpha blending in the pixel shader.

So that’s where my volumetric cloud project stands as of right now. I will be adding posts in the future as I gain (hopefully) progress towards more and more realistic volumetric clouds. Eventually, when I get to the point where I am able to organize the code all nice and pretty, I will put that up for anyone to tinker with.

Till next time!

The month of September is already done! I have to say, this month has been a crazy month, crazier than I think I realize right now. My wife finally had our baby, which we named Autumn Rose, beautiful huh? She’s gorgeous and I am absolutely in love! Also, this month was AI, and that class is now finished, and my robocode robot kicked some serious behind! (still not quite good enough to take first in the FullSail robocode Hall of Fame though..ah well)

This was my first experience with java coding, which wasn’t too bad considering I’m fairly confident with c# and the two are nearly twins. I must say that doing robocode is not for everyone, and at first glance of some example robot code, I thought I might be wanting to choose something else for the research project. But I persevered and eventually decided it was time to learn a little math…ok it was a LOT of math. Some great videos on youtube, notably khanacademy’s videos on trig, geometry, and linear algebra helped me out a ton. I had a decent foundation for all of the math needed, but I had never really applied much of it in game logic before. Needless to say, I am glad I did it! For those interested in trying robocode, here’s a good place to start. If you have robocode and want to check out my robot, head over to my site and go to the games page.

AI is a very interesting and vast subject, including but not limited to: pathfinding, decision making, steering behaviors, and an intense use of data structures. What a great month it was! And onward I go!

30
August

Hello to all! This blog is just starting up what will hopefully be a great adventure into the realm of game development, programming, and my journey through it all. This blog is part of the website subtle-brilliance.com, which will feature any of the programs/games that I have finished enough to let others check out.

So to start off, I should tell you a little about me, where I’m at, and where I’m headed.

I grew up in a small town in Minnesota, joined the National Guard right out of High School, and used the money I got from that to attend North Central University in Minneapolis, MN. There I studied Music for three years, drums being my primary instrument. I got married to a wonderful girl from Pennsylvania during this time, and I must say, I will never regret it! At this point I got sick of NCU for various reasons which I won’t expand on, and my wife and I decided to move to Florida where I could pursue my dream of becoming a game developer. This dream, which is currently what I am working my tail off to pursue, is coming closer and closer to being a reality by the amazingly effective and intense curriculum at Full Sail University. Once I graduate in May, I intend to continue on  in the industry to get the necessary experience needed to start up my own company. All this so that one day I can see that game I’ve been dreaming of designing for the last decade or so on store shelves, being enjoyed by as many people as possible.

So there you have it, don’t expect much more “about me” posts, I just wanted to give my readers the opportunity to get to know me if they so desired.