Tuesday, January 24, 2012

Animation Update: Attachments and additive animation

I recently implemented an attachment feature for the animation system. It allows an object to be attached to any bone of any other object, and is how I intend to implement weapons, hats and other decorations that a character might have. These were created in Softimage, which has a great model-referencing system that allows me to composite scenes to make new assets that are based on or interact with existing assets.


The other thing this video shows is the new additive animation feature, which for instance allows a character to overlay an animation on top of other animations. This is used to make the recoil of the weapon affect the character. Additive animations are a great way to add life to a character because they stack with each other in a way that makes sense visually, allowing you to create small bits of animation that don't need to be replicated in everything else being applied to the character.


These animations are still just placeholders, I know they aren't that great.. I'm mainly interested in making the tech work at this point and will revisit the animations themselves when I have a better idea of exactly what the system will support.

Sunday, January 22, 2012

My humble opinion on what Microsoft needs to do to make Windows Phone 7 successful

A few days ago, I had a nice long talk with an old friend who has been working for Microsoft on one of the  Windows Phone 7 teams. The conversation eventually led to musing about what what a great product WP7 is, and what might help help it reach its potential. A few things came up, but one thing in particular really stood out for me which, after thinking about it more, I wanted to elaborate on further. The question was, how can Windows Phone compete more effectively against Android?

My view: Microsoft needs to eliminate as much friction as possible between Windows Phone 7 and the people who want to tinker with it, because that is in my opinion the ultimate reason why people go with Android - whether or not they realize it. It has a reputation for being "free and open" for people to do what they want with it. While that isn't entirely true, it is a reasonable way to describe the state of affairs with the only other relevant platform, the iPhone. When asked, even the most non technical people I know who chose Android mention something along these lines as being part of the reason they went with it.

With Android, any kid with a compiler can make games and show off to their friends. There is no $100 fee just to be a hobbyist, fan, and ultimately an advocate of the platform. This is essential to building grass roots support for the platform. People being able to "use their devices as they see fit" is a common theme I hear when they talk about Android, with an acknowledgement the carriers are still able to weasel their tendrils of control even here but at least the platform is an improvement over iOS where people have to resort to jailbreaking just to get their device to do what they want.

Obviously, the average Android user is just a regular, non enthusiast phone user who isn't the sort that would consider jailbreaking an iPhone. I think it is fair to say however that they are at least aware of how Android provides users more freedom than iOS will ever allow. This freedom is valuable to people, and when it is available on a platform, it is recognized even by non technical people as a benefit. This is what happened with Android. What people seem to forget is that this is exactly why the desktop version of Windows became so successful. Freedom for developers to make the platform great, with great support from Microsoft in the form of tools that make it easier to make great applications.

If Windows Phone wants to maximize its potential, someone at Microsoft needs to decide at a very high level that anything that might make any user or developer feel like the phone isn't entirely theirs needs to be eliminated. Make it possible for me to make the phone truly mine. If this becomes reality, I am certain the platform will gain more fans and success than anyone would ever imagine. It's a great phone, but the handcuffs need to come off. I'm not suggesting getting rid of the managed code space for most users because I feel this is an essential part of making the phone secure from malware, but everything else is on the table including allowing those users who want to expose themselves to native code to do so. Let people do what they want with their phone, but keep the default environment safe and secure as it is today. If people want to flip the switch and turn on the danger, that should be their call.

The bottom line is, whose phone is it anyway? If I can say "mine" then then I will be able to develop and tinker without additional cost as they do on Android. I will be able to update (and restore from backup) my phone OS when *I* want to, not when the Carrier mandates it (if they bother at all). If it is my phone, I will be able to do what I want with it. People like to have control of the things we buy. We don't yet have full - or at least as much as Android - control on Windows Phone 7. I am convinced if we had it, the phone would see tremendous growth and success in the marketplace.

Just my humble opinion.

Saturday, January 21, 2012

Animation blending and aim poses in the engine

I've been working on an animation system that uses the "Animation Tree" approach to defining how multiple animations should work together. It's a fairly typical method of defining how the animations a character might be used; Unreal, Unity and pretty much every game engine of any complexity has to manage animations and from what I have seen, this requirement is usually met with some sort of animation tree system which allows you to break down the complexity of the total set of animations to more manageable groups of nodes that can be considered in small inter-dependent groups.

The first nodes I created were pretty basic and set the framework for the nodes going forward: play an animation on the entire skeleton. Play one sub node, play all sub nodes, that sort of thing. The past few days have become much more interesting because I created animation nodes that are used to blend between different animations using different logic to control the blending.

The first blend node just does a weighted blend between a set of animations. The second one remaps an XY input to control blending between 9 animations on a 3x3 grid; this one is used to control "aim sweep" and other similar motions where the character needs to have a specific pose based on some game state - typically where they are pointing their weapon or otherwise focusing their attention.

The end result is I now have a system where I can make the characters walk and chew gum at the same time. Or walk with the lower body and aim with the upper body, as seen in the videos below.



There are quite a few animation nodes that need to be made, but so far I am really liking how this is working and I feel pretty good about this being a functional solution for controlling animations.

Friday, January 20, 2012

Aim pose tests in Softimage

Recorded a quick video showing some aim pose testing in Softimage using real time input from a joystick to control blending between 9 different aim poses.

Thursday, January 19, 2012

Character test

I've spent most of the past month working on the character animation system for the next game. There was a bunch of stuff I had to ramp up with the tools and some of the pipeline code, but after a good push I have been able to demonstrate proof of concept of most of the things I need to do with the production side of the character systems including motion capture (mocap), character rigging to use the mocap, and a workflow that should minimize any single points of failure in the assets from breaking everything. Moving away from large, monolithic Softimage scenes that contain lots of things to more manageable, smaller scenes that use referenced models is almost sure to save me time in the long run if history is anything to go by.

Recently, I converted what I call my "preview" realtime shaders that are used in Softimage's realtime display mode from HLSL to CGFX (they mimic what the runtime HLSL shaders do, and determine what data is exported). It took me a while to decide to CGFX, because I had hoped that Softimage would let me work with DX9's HLSL as well as it does CGFX, but the reality is that Softimage is much better behaved with CGFX than HLSL. It took half a day to convert the shaders, but now that they are done it's already clear how much better off I am with them. The main benefit is that with CGFX I can actually select and manipulate the geometry; with HLSL the Softimage UI becomes half broken in that it shows you the model (usually) but none of the interaction UI is visible.. despite it responding to input. This is of course difficult to use, and switching to CGFX so I can use the OpenGL display mode almost immediately improved my attitude about using realtime shaders in Softimage. It is mostly functional and I can get my work done.

Speaking of work, I've been on a shader and pipeline sprint lately to try to get the runtime to look as much like what I see when I texture models in 3DCoat. There were some pipeline changes required (as usual..) but at this point I think things are looking pretty good. While the model below is of dubious artistic quality, it does at least render pretty much how I modeled and textured it. It's a skinned mesh being rendered with a Light Pre-Pass (LPP) renderer whose main purpose is to give me something to test the entire content pipeline. The character pipeline is nearly done and I hope to finish up the last bits very soon and start working on runtime character animation and behavior systems. Once it's done, the engine should provide the features I need for creating and animating the characters and props within Squad Miner.

Another thing I did recently was some tests with cleaning up mocap data. The video below shows the result of some very noisy motion capture data that has been cleaned up a bit and made to loop. It's not perfect, not by a long shot, but it was my first time at it and it was some good practice.



Tuesday, January 17, 2012

New tool release: Essential Geo for Softimage

Essential Geo is an addin for Softimage that provides a dozen basic building blocks for modelling that some people might find useful. More info and download links here.

I created this tool because I wasn't satisfied with the set of primitives included in Softimage. I found myself repeatedly making the same low level shapes and wishing I could tweak them after they had been extruded, beveled or other changes had been made. These tools allow me to do this which has been helpful in the creative process of making game content. Many of the buttons and dials seen in Atomic Sound were made with these shape builders and over the past year I continue to use them on a regular basis.


I'd be interested in making a substantially larger collection of these if it could become a product people would be willing to buy, but unless it is obvious there is enough demand for it to justify taking time away from the core mission of Bounding Box Games then that probably won't happen. Until then, hopefully people will find it useful the way it is.



Thursday, January 12, 2012

Free Tools from Bounding Box Games

Since starting Bounding Box Games, I've created a number of tools that help me make the games. Some of them are pretty general purpose tools that other people might find useful. They were not created with the goal to be products, they are literally the things I made to help me get my work done, to fix an annoyance of some sort or in some cases they are the result of an experiment that might be useful to others.

In the interest of sharing and to get a bit of shameless self-promotion I've decided to start spending a little bit of time making some of them available. While I need to stay focused on making games, I am hopeful that sharing these tools will be worth the effort. Perhaps it will help in some way, I really don't know what to expect though. I also set up a PayPal account for anyone who likes these tools and wishes to kick a few bucks our way to help keep things going over here.

The first tool is a plug in for Microsoft Expression Encoder that publishes videos to YouTube. Enjoy!