Tuesday, May 24, 2011

I'm back from the dead, and with some good news!

Hello Ludum-Dare-ians and people who randomly found this blog on Google looking for game save tutorial!

I'm back from my slumber, and what slumber it was!
I did get the job at the company I was making those challenges for, I'm even on our company's page (http://www.covii.pt/) as software developer! (though everyone knows there I'm the Senior Graphics Engineer).

Anyway, I've not been completely procrastinating! Since I've worked there for several months I've been programming everyday for almost 8 hours which shows in my code I write for my own projects. However! Even on my own hobby codefront  I did not procrastinate (not entirely anyway).

I am now announcing I'm working on a game. I'm not sure if it's gonna be commercial or not (probably not as the quality of many thing will be shit) but I'm making it with a long lived friend of mine MICL.
He's going to write the story and make music, while I program and work on graphic art.

But the point of this post is not that.

My Litterbox engine is reaching it's 4th anniversary, and so I decided to make another step and make it fully 3D!

But the point of this post is not that either!

The point of this post is:

MY ANIMATION ENGINE

So far I've created a working 2D prototype. but mainly it's a tree-based animation system, where the leaves can be either animations, physics, or anything that modifies a given skeleton. This system was larely based on UDK animation system, and because of it's tree-based structure it's possible to do the following things:

1-Dozens of working animations , only the animations connected to the tree are updated so no wastes.

2-Animation Blending, which allows for composed animations (eg: having a character with a walk animation composed of four different walk animations (eg: NSEW directions).

3-Synchronized animations! Yes, this is one of the golden jewels in the crown of my engine. This means that you can have a 1.5 second running animation blended with a 4.0 second walking animation and the transition will be seamless as long as the movement is synchronized timely as well (eg: in both animations the left foot is on the ground at 50% mark, up on the 0 and 100% mark, etc)

4-Easy to add nodes that depend on the current pose. Just pop an IK node between the root and the result of the animation and you have IK with the starting position of the animation.

5-Bone masking! Don't want your "running animation" affect the hands and torso? No problem! you just disable all the bones you don't want animated!

6-Adding new types of nodes is easy! if you just follow the node structure of the animation tree, you can add nodes or leaves that fill any necessity, from IK, Physics/conscious ragdolls to procedural or keyframed animation!

Here's an example of the tree structure I've mentioned:




So! When can you use this fantastic animation engine?
Well... that's the bad news: you can't.

At least not for now. I've made a 2D prototype that works and now In the middle of porting it to 3D.
I've got the skeleton working in 3D with quaternions using my handmade math lib. I've also got skinning working, but no texture loading and no normals so far.
here's how it looks right now:



























Not really impressive, is it?
Well, it'll change in a couple of days. I've recently (about a month ago) mailed Chriss Hecker for advice on how to keep focused even if I really don't feel like doing anything.
His advice?

"15 minutes"

Every day work for 15 minutes no matter what the mood, no matter how hard you don't want to.
If you really don't want to do anything then hey, 15 minutes is like 1/16th of your free time if not less. After that go do whatever the hell you want.

I've been following this advice for the last month, I've had occasional slips, but usually when I work I end up working far beyond those 15 minutes. (before writing this post I've been working for about 3 hours stopping occasionally to glance at a video running in the background).

So, this is my official statement:

Since Saturday I'll be making a tutorial on how to implement your own 2D or 3D tree-based animation engine with all the features I listed. And I'll be releasing this tutorials in several chapter, one chapter every 3 to 4 days.

I won't fail unless something really unexpected happens (like the second coming of Christ, or having to stay late at work for the entire weekend).

Wednesday I'll release the list of chapters of the tutorial, but I know I'll be starting explaining the basics of vector math and a bit on matrices and quaternions. In the later chapters I'll explain on how to create a working IK system, and how it'll be integrated into the animation system.

By Saturday I should also have my animation system completely working which should serve as a good proof of concept that I'm not just babbling madly.

I'm out!
Mikolaj Kuta