Jump to content
  • Advertisement
Sign in to follow this  
Danathus

Proposing an Open-Source Dynamic Physically-Simulated Character Animation Library

This topic is 3023 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey everybody, I've done some work lately with ODE (the Open Dynamics Engine, a physics library) and CAL3D (Character Animation Library 3D, a graphics engine-independent skeletal animation library) to create some ragdolls for an application using the Delta3D game engine. It occurred to me that this could be pushed further to realize a dream I've had for some time of creating a dynamic physically-based character animation system. I started wondering what might be out there already in this direction, and having done some research, all I came across was something called "ODECAL" that was purportedly a ragdoll library based on top of ODE and CAL3D, except that it was apparently ONLY mentioned in some book that I can't find the text for online (so there's no website, it's not hosted anywhere, etc)...and something called DANCE, which looks really cool and can be found here http://www.magix.ucla.edu/dance/. The problem with DANCE is that its creators absolutely PROHIBIT commercial use, as it's meant to be exclusively for academic research. Well, that won't do for my purposes at all -- what I want to see is something both open-source and free for either commercial or non-commercial use. I'm admittedly still probably under-read on my open-source licenses, but I think I like the sound of LGPL, since the philosophy of "if you improve it, give back" resonates well with my philosophy. Basically what I want to see is (until I am convinced otherwise -- I happily encourage anyone to tell me things I don't know) an open-source LGPL'ed library based on top of CAL3D (unless there's a better graphics engine independent character animation lib out there?) and...probably PAL for physics? Has PAL been well-accepted as a standard intermediary for physics engines? If anyone has seen any sort of library like what I'm looking for, please LET ME KNOW! Otherwise, I am looking to start such a thing -- probably hosted at source forge. I don't have a good name for the thing yet (DANCE is a fantastic name, but it's sadly already taken) but am totally open to suggestions. Mainly, right here I'm looking to find like-minded souls, gauge / drum-up interest in this sort of library, inquire as to the common pool of knowledge about what's already out there, see who else might be interested in such a project, and maybe bounce back and forth some design ideas. Whaddayasay?

Share this post


Link to post
Share on other sites
Advertisement
I'd also love to see something like this. I've used CAL3D before in past projects and aside from the pain in the butt exporters, the API itself is fairly clean and simple to use. But combining CAL3D and a physics library would be a great replacement for Euphoria, at least for those who can't afford it.

Share this post


Link to post
Share on other sites
I would find such a project quite interesting as well, but at the moment I have way too much to do working on my bachelor thesis.

Anyways, here are a couple of links to articles that might be of interest:

http://www.cs.ubc.ca/~van/papers/#2007-siggraph-simbicon
http://www.cs.ucla.edu/~pfal/papers/cag01.pdf
http://homepages.inf.ed.ac.uk/tkomura/casa05.pdf
http://graphics.cs.williams.edu/papers/DynamoVGS06/
http://www.kuffner.org/james/papers/komura_vrst2004.pdf
http://grail.cs.washington.edu/projects/charanim/
http://www.cs.ucla.edu/~vector/files/SCA07_Control.pdf
http://graphics.cs.brown.edu/games/Dynamo/SIGGRAPH06/sig06-world-space-sketch.pdf
http://www.cs.ucla.edu/~pfal/papers/siggraph2001.pdf
http://www.cs.ucla.edu/~pfal/papers/phdthesis.pdf
http://graphics.cs.ucr.edu/papers/zordan:2007:IDR_DRAFT.pdf
http://grail.cs.washington.edu/projects/styleik/styleik.pdf

Share this post


Link to post
Share on other sites
Hey again all, my apologies for the delayed response.

I'm ready to start getting moving on this project. My thoughts are that it be hosted on SourceForge. If anyone has a better idea, please shout it out. The license should be unrestrictive except, I think, for encouraging collaboration on developing the library. This area is admittedly under-researched on my part, but unless anyone provides a good argument for a different license (if you have one, PLEASE do speak up), my thoughts are that the project be started under the LGPL license. Otherwise I fear indefinite procrastination due to not knowing what license to use, and that would be a shame!

Again, my current thought is to base the library on the well-established open-source library CAL3D. It's too early to be sure that this will go smoothly, or if we'll find a need to make considerable changes to CAL3D, or even a need to define a separate character animation system if it turns out that CAL3D simply won't work...though I don't expect that will be the case (and indeed I hope not). Since I personally only have direct experience with ODE, if I'm to start the project myself, that would be where I would begin...though I would plan soon to switch code over to be based on PAL, since it seems to be the most extensible move. If anyone thinks there's a better way to do things regarding dependencies, do please speak up.

As for what exactly would be included in the project, my thoughts are that it at its core would be an intermediary interface between the character animation library and the physics library, with data structures reflecting the bones and model found in the character animation library and the joints and geometry found in the physics library. Without all of the design details worked out exactly, the idea I have is to have this layer act as a kernel through which all information relating to animation can flow, and which can act as a filter.

For example, it should be feasible to set up a system where canned animations are played, but filtered through the kernel before being visualized by being written back to the CAL3D structures. What the kernel would do with this information is communicate with the physics library as appropriate to establish that the animations can be performed as requested -- you can think of this process as redirecting the movement through the physical world before executing it proper. If bone geometry collides with a wall while attempting to perform the animation, the final animation presented would be altered accordingly, while still attempting to continue to play to its completion (unless the application, upon learning of the change, chooses to discontinue the animation). The end result would be, for example, trying to punch through a wall but instead being stopped by it.

Pumping animations through this kernel, when properly tuned, should similarly allow one to easily enough play any number of standing animations that will automatically adjust to standing on arbitrarily shaped terrain under a model's feet, bending knees and ankles as needed in order to continue to maintain balance. (In practice though I'm sure this will also require some sort of feedback AI generating animations to be blended in). This filtering should of course be adjustable, as there may be times when you want to use completely physically-based animation, times when you want completely canned animation, and times when you want them to interplay, in yet unanticipated very specific ways I'm sure.

In addition to that, we'll need some means for specifying exactly how one wants to build the physical representation of the body. Though it's easy enough to generate, I'm sure in most cases we do NOT want a one-to-one correspondence between CAL3D bones and physical bones, and going with a default assumption that every joint is a ball-and-socket joint won't do either! So we'll need some way to build a physical bone/joint hierarchy, probably stored in an easy-to-edit and easy-to-merge text format (xml I expect). Once this file format is well-established I expect it will be appropriate to build a nice wysiwyg tool for taking a CAL3D model, examining its bone structure, and building a physical bone structure from that -- and exporting in our established file format.

Finally, the top-most level of the library (and arguably the funnest part) will be the artificial intelligence interface -- logical patterns for generating animations procedurally. We'll have PID controllers and the like for controlling characters to maintain constraints via feedback loops, and I imagine that probably the first example in this department (once the rest of it has all been sufficiently implemented) will be a little dude standing that you can push on, but who will react in order to simply maintain his balance. Here we can have fun also mixing in some randomness for more lifelike animations...and indeed, at this level writing character animation logic may be analogous to writing short shaders to flavor animation. More sophisticated environment interaction will be an interesting research problem, and will probably best be handled at yet a higher level of AI processing, perhaps to be tackled in a separate library all of its own.

Now all that being said, before we get this thing a proper home, I'd prefer to have its name squared away...so I'd like to begin a discussion to that end. I personally am big on acronyms, and two potential names that I've come up so far are REACT (Robust Emergent Animated Character Technology) and DASH (Dynamic Animation Simulation Hierarchy). If we choose to play directly off of DANCE (a good name, but alas already taken by those maddeningly-selfish researchers! Prohibiting commercial use? Damn them and their selfish altruism!) my first thought is PRANCE (*PRocedural* Animation aNd Control Environment).

Thoughts?

Share this post


Link to post
Share on other sites
Here's a news update for anybody still following.

Currently I am favoring the name REACT (Robust Extensible Animated Character Technology), a variation of one of the afore-mentioned name possibilities. I am also leaning towards the MIT license. Though I might perhaps like a license that explicitly encourages people to contribute back to the project, there's really no way to force people to do so, and I have beef with some aspects of the LGPL (largely that the dynamic-linking aspect won't hold up well for most embedded systems such as many game console platforms). The MIT license is simple, and imho a bit more clearly worded than the BSD license.

Now, the only remaining issue before beginning the project proper is determining the most favorable site to host the project at. Right now I'm looking between sourceforge and google code projects. They each have their strengths and weaknesses...I'm just not yet sure.

Suggestions/commentary?

Share this post


Link to post
Share on other sites
I would agree with the notion that an MIT/BSD-style License would be preferable compared to LGPL. Personally I'd choose BSD over MIT but the difference is quite small.

I don't really like the name REACT (seems a bit nonsensical), but I don't have any better suggestion either.

Anyways, the interface of Google Code seems much cleaner than Sourceforge, and SVN is standard, so I'd go for Google Code.

PS: How would CAST (as in theater) do as a name? (Character Animation & Simulation Toolset)

Share this post


Link to post
Share on other sites
Actually the dynamic linking limitation was relaxed in LGPL version 3.0 . But I would agree that BSD is better than MIT as far as open-source licenses go. Subversion is also offered as an option on Sourceforge.net also.

Share this post


Link to post
Share on other sites
PAl as I heard is not really that useful yet. My experience is with PhysX, it's an interesting project and similar to something I'm planning to R&D once I can clear my work too.

Share this post


Link to post
Share on other sites
Quote:
Original post by Void
PAl as I heard is not really that useful yet.

Did you try it? Abstracting away the actually used physics library is always better. Especially in something like a character animation library. Ideally the user should be able to use any physics library in conjunction with the character animation library.

Quote:
My experience is with PhysX, it's an interesting project and similar to something I'm planning to R&D once I can clear my work too.

Dunno about PhysX, but Bullet seems nice (and is open source)

Share this post


Link to post
Share on other sites
Hi,
I also have interest in working on something similar and seeing what can be practicallz achieved with current technology and processing power, although i was planning to limit this to a theoretical (make use of dead time) mind exercise (http://www.gamedev.net/community/forums/topic.asp?topic_id=500206) because unfortunate of lack of time... but in any case im keeping an eye on this ...

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!