Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


#ActualAllEightUp

Posted 11 September 2013 - 04:18 PM

There are actually 3 sides to this question which when answered will tend to suggest the best solution. What quality are you attempting to achieve is one question. Another question is how much memory you are willing to use. And finally, how much performance hit will you accept. So, say you are working on a Tomb Raider game, typically you have Lara running around and maybe 1 or 2 mobs on screen at a time. You likely want very high animation quality and you can eat up a significant portion of CPU time to get that high quality, additionally you can use a fair amount of memory in the process (though it should not be needed as I'll explain in a bit). Now, look at a game like WoW of course, potentially hundreds of toons running around all with different animation data, you need only "fair" quality high performance and the least possible memory. So, in general, it is going to be the style of game and your target which will generally drive your choices. You have three basic choices, each with upsides and downsides.

The most common choice is to pre-process the animation at some framerate and compute all the joint matrices, store all those into memory. This choice gives you among the best performance level but at the cost of more memory for better quality or less memory for less quality. With simple interpolation between two keys, you can get a bit of the quality back even if you sample down at the 10-15 fps range.

The next choice is an inbetween solution where you pre-process the curve data from the animation package into something like a piecewise cubic curve approximation of the original curve. The reason this is inbetween is that the original curves from animation software are often fairly complicated mathematically, this pre-processing brings the curves down to something more simplistic. Now, the performance is not "as" good as the first case but it is still well within reason for many characters on screen. The memory and quality again go hand in hand but compared to the first version the memory is greatly reduced and depending on your curve fitting, the quality can be extremely good. (NOTE: this is typically the solution I use for most things.)

The final choice is to perform as little translation as possible and use the original DCC content as close as possible. Performance wise, this generally stinks due to how DCC solutions organize the data for flexibility of editing with less focus on performance. But, it is of course the best possible quality. Memory wise, the second solution is generally a bit better if you use a good curve fitting system which can compress large gradual changes to channels very well. But if there are a lot of changes in the derivatives in the curves, they tend to be fairly close. If you are doing cinematic cut scenes, sometimes this solution is the way to go in order to get very high quality, the second solution has some annoying compression artifacts which are difficult to correct. (For instance, if you ever played Final Fantasy X, the cutscenes would look nice except that the hands tended to jitter a bit, that is a compression artifact on long bone chains.)

Hopefully this gives you a bit of an overview. I don't mean this to be comprehensive coverage so ask questions if you want further details.

#1AllEightUp

Posted 11 September 2013 - 04:18 PM

There are actually 3 sides to this question when when answered will tend to suggest the best solution. What quality are you attempting to achieve is one question. Another question is how much memory you are willing to use. And finally, how much performance hit will you accept. So, say you are working on a Tomb Raider game, typically you have Lara running around and maybe 1 or 2 mobs on screen at a time. You likely want very high animation quality and you can eat up a significant portion of CPU time to get that high quality, additionally you can use a fair amount of memory in the process (though it should not be needed as I'll explain in a bit). Now, look at a game like WoW of course, potentially hundreds of toons running around all with different animation data, you need only "fair" quality high performance and the least possible memory. So, in general, it is going to be the style of game and your target which will generally drive your choices. You have three basic choices, each with upsides and downsides.

The most common choice is to pre-process the animation at some framerate and compute all the joint matrices, store all those into memory. This choice gives you among the best performance level but at the cost of more memory for better quality or less memory for less quality. With simple interpolation between two keys, you can get a bit of the quality back even if you sample down at the 10-15 fps range.

The next choice is an inbetween solution where you pre-process the curve data from the animation package into something like a piecewise cubic curve approximation of the original curve. The reason this is inbetween is that the original curves from animation software are often fairly complicated mathematically, this pre-processing brings the curves down to something more simplistic. Now, the performance is not "as" good as the first case but it is still well within reason for many characters on screen. The memory and quality again go hand in hand but compared to the first version the memory is greatly reduced and depending on your curve fitting, the quality can be extremely good. (NOTE: this is typically the solution I use for most things.)

The final choice is to perform as little translation as possible and use the original DCC content as close as possible. Performance wise, this generally stinks due to how DCC solutions organize the data for flexibility of editing with less focus on performance. But, it is of course the best possible quality. Memory wise, the second solution is generally a bit better if you use a good curve fitting system which can compress large gradual changes to channels very well. But if there are a lot of changes in the derivatives in the curves, they tend to be fairly close. If you are doing cinematic cut scenes, sometimes this solution is the way to go in order to get very high quality, the second solution has some annoying compression artifacts which are difficult to correct. (For instance, if you ever played Final Fantasy X, the cutscenes would look nice except that the hands tended to jitter a bit, that is a compression artifact on long bone chains.)

Hopefully this gives you a bit of an overview. I don't mean this to be comprehensive coverage so ask questions if you want further details.

PARTNERS