Tracking the development of the BlenderPeople script suite.
Thursday, June 22, 2006
Addendum to "Call For Help"
If you already downloaded the rig I linked to the other day, regrab it. I made some enhancements after looking at a few that people pointed to.
BTW, I found that the Ludwig rig, though it has very cool finger controls, to not have the right kind of foot controls for BP. Also, the Mancandy rig, though excellent, is more complex than I was looking for.
Anyway, redownload my linked rig if you already got it.
Monday, June 19, 2006
A Call For Help
Well, BlenderPeople is finally at a stage where I could use some help from the world wide Blender community.
With the basic completion of automated walking, fixes to Action Baking and MatchBone, and additions and modifications to the Python API, I'm starting to put it all together. If you follow this blog, this isn't news to you.
So here's the news: I'm looking for YOU to give me the raw animation materials that'll be used in the BlenderPeople demo at SIGGRAPH. If all goes well, I'll be at the awesome Blender/GNOME/UniVerse booth at SIGGRAPH at the beginning of August, and will demo BP on the big screen.
But I need your help. I have too much on my plate right now to put on my animator's hat in a righteous fashion, and I want it to look good.
Here is what I need:
1. Armatures. I'm looking for fairly simple biped rigs. I have one that I've been using, but there's no reason for me to think that it's anything incredible. The rigs for Proog and Emo are a little too complex, so don't bother sending them.
Requirements for the armatures are as follows:
a. must face to the right of the screen in a top view.
b. legs must be IK rigged, with a single foot controller that controls both translation and left-right rotation. Not to say that the foot can't have additional controls, but those two must be housed in the same single bone for autowalking to work.
c. must be a single armature, with all constraints and ik solvers/targets/etc as bones within that armature. No constraining to empties or other placeholder objects.
2. Actions. I need Actions of the following types:
a. Walk cycles (walking in place)
b. Run cycles (running in place) - run cycles that feature people scared or charging in a violent manner are also needed/welcome.
c. Attack - single motion attacks are fine; kicks; sword chops; spear stabs; combination attacks are also fine
d. Dodges - actions that show an armature ducking an attack; jumping out the way; leaning to the side; etc.
e. Blocks - actions showing the actor blocking as though with a weapon
f. Defensive stances - actions that a character who is hanging out, but who is wary; could include looking around, shifting weight from foot to foot, nervously examining weapon, etc.
g. AN ASTUTE READER POINTED OUT -- Do I need actions of people biting the big one? Absolutely. My oversight. Thanks.
Actions do not need to begin from the armature's rest position. just start them in the best position you'd like them to be in. MatchBone will (should) take care of the rest. There is no limit to the length of actions, but they really should be atomic, taking no more than a second or two each.
If you don't have an armature to work with, and you don't feel like making you own, you can download mine from:http://www.harkyman.com/animprop/barearmature.zip
I'm giving no guarantee that I'll be using any of the submissions. I have some crummy ones already, and if all I get is crap, than I'll stick with the crap I made myself. But I'm hoping that a few people out there will really come up with some great stuff. If you submit material to this, it must be your own work (or something that's been given freely to the public), and I will credit you as such on any demo materials that are produced.
You can send submissions and questions to bphelp <-at-> harkyman dot com. That's a fairly mangled email address, but you should be able to figure it out. PLEASE keep submitted .blend files under 300k. If you have something bigger than that, and you think it rocks, email me with text only first, and I'll okay the bigger attachment then. That email address will only stay active for a couple of weeks, and depending on response levels, I'm going to put a tentative deadline on submissions of two weeks from right now.
Thanks for all of your help in advance!
Sunday, June 18, 2006
Putting It Together
Got automatic replacement working, so BP looks in the database to see which armature it should replace each type of character with. With the exception of a display update, it works.
After that, I began experimenting with generating the walk animation. Hmmm. Action Baking isn't working as I expected, and has some restrictions I hadn't counted on. So, I dug back into that and made a few more modifications. It's compiling right now. I'll see how it works out, but my guess is that it will be significantly more useful.
My hope is to have a nice demo ready this coming week that generates a pile of skeletons walking uselessly about!
Friday, June 16, 2006
Action Baking Python API
Toni (antont) had created a rudimentary Action Baking python call for Orange, but I found I needed to modify it (and Action Baking) a bit on my current track. For one thing, the Action Baking code was GUI based -- it would bake whatever Object was currently selected in NLA. That wouldn't cut it for BlenderPeople. I needed to be able to pass an arbitrary object, without counting on the GUI.
So, I had to delve back into Action Baking code, and make some modifications. I also had to modify the Python API (which is something that I don't like to delve into.)
So, that's done now, which means that walking and Baking is now working with full automation!
Don't know how much more work I'll get done tonight, as I'm taking the family out to see Cars in a couple of minutes, and then out for dinner and ice cream!
Thursday, June 15, 2006
Things accomplished so far:
1. Added hooks in the Action Strip Python API for MatchBone and Multiply mode.
2. Created some basic actions for attack, defend, walking and running. As I'm doing it on my laptop, they are bare bones. I'll have to use one of my nicer workstations for making some really nice actions. This is just enough to get it working.
3. Fixed the orders system so commanders can publish different orders from the ones they were following. Also, fixed the cascade that Actors use to determine what to do.
4. Created a new series of tables in the database to accomodate all of the information you need in order to do character animation: armatures and mesh objects for proxy replacement, ones that contain the information on walk and run cycles, and the ones that determine which Actions you've created within Blender go with which Actor activities.
5. Coded the creation of those tables into the BP initialization code.
The way I have it set up, you can create any number of Actions for each activity (one will do if you're lazy like me), then assign each a decimal likelihood, per Actor type. When it comes time to build the animation, BP will choose from the available actions, using the likelihood factor to determine how often each is chosen.
Tuesday, June 13, 2006
Better RSS Support
Just a note -- I've enabled titles on this blog, so those of you tracking things via RSS will now get a nice title in the RSS listing, as opposed to the first few words of the posting itself.
A Big Push
I have a couple of days off from work, and I'm going to try to pull a Ton and emerge next week with character animation working for BlenderPeople.
It may happen. It may not.
I expect that the GUI will be limited for this second phase, as I have little desire to code it once with the really hard-to-manage Draw module, then do it again when Python panels are introduced later this year.
But, the good news is that (almost) all of the pieces are finally in place: Matchbone, action baking, fixes for bone flipping problems, an almost complete Action Strip python API. I'll have to modify the Py API a tiny bit to accomodate Multiply NLA mode and Matchbone, but that should be trivial.
In addition to getting character animation working at a basic level, I'm also playing around with the orders system, so that commanders can "publish" different orders than they follow. Currently, if you give an "attack" order to a commander, it passes right down to its subordinates. I'm modifying things so that a commander can, for instance, have a "target" order to get him to follow another Actor, while giving his troops a "regroup commander" order so they follow him.
The bad news is that all of my character animation modifications and fixes to the Blender sources are on hold for official inclusion. Ton has stated that the character animation code and math are kind of like spaghetti to him, so he's going to have to really review everything and understand it well before he lets it in.
So, you'll have to use a special build of Blender to run BP, just like in the old days.
On the up side, I'm probably going to SIGGRAPH this year and should be showing BP at the Blender booth. Maybe I'll get a few minutes to sit down with Ton and go over the code with him.
And now... off to work!
Thursday, June 08, 2006
Great progress. I said I was done with autowalking before, mostly, but that was because I had fooled myself into forgetting that autorunning needed to be part of the equation too. It took some doing, but it's as done as it's going to be before SIGGRAPH. If I want to hit that goal, I have to move on to the next phase. Now, moving on doesn't mean I can't or won't revisit autowalk/run. Not at all. I constantly improve, polish and tweak the whole code base (except the GUI, which I despise), and making the run/walk better is at the top of my list.
Anyway, here is what you'll need to give BlenderPeople (or the standalone Walker script) in order to get your people to walk:
1. A walk cycle Action.
2. A run cycle Action (optional, but highly
3. Information about each: total stride length, maximum foot height, and the range of frames in the Action that represent each foots influence (eg. 1-21=right foot on ground; 21-41=left foot on ground)
4. Your armature progressing along the walk path. This can be done by you (or already done by BlenderPeople) as keyframes; it can be path animation; it can be your armature pushed across a terrain by constraints and parenting. Doesn't matter.
5. Your threshold in BlenderUnits/second that decides between walking and running. This will depend on the scale of your work, so it may take a bit of experimentation.
Of course, BlenderPeople (and the standalone script) will come with at least one premade walk and run cycle, along with settings, so you can play with it out-of-the-box.
When fed the proper inputs, the script calculates and places all footsteps, within a single Action, and creates a new Action with all of your secondary motion from your walk and run cycles, then blends them in NLA (with new, unofficial Multiply mode!).
The script also just got a great boost in automation from the NLA Python commits I mentioned previously. I used the new NLA Strip API to automate the addition and tweaking NLA strips that I had previously been doing by hand for testing purposes.
So, here's video of autowalk/run. 6MB Quicktime. Please ignore the floppy feet -- they show an artifact in my walkcycle that I was fooling with and never removed. It's also a demonstration of the garbage-in-garbage-out nature of the script -- if you feed it a crummy walk cycle, you'll get crummy walking animation.
As you watch it, keep in mind that the script is switching between walking and running on the fly, looking at the actor's velocity in comparison with the run/walk threshold that was set earlier. Also keep in mind that I know the transition could be smoother.
02/01/2004 - 02/29/2004
04/01/2004 - 04/30/2004
05/01/2004 - 05/31/2004
06/01/2004 - 06/30/2004
07/01/2004 - 07/31/2004
08/01/2004 - 08/31/2004
09/01/2004 - 09/30/2004
11/01/2004 - 11/30/2004
12/01/2004 - 12/31/2004
01/01/2005 - 01/31/2005
02/01/2005 - 02/28/2005
06/01/2005 - 06/30/2005
09/01/2005 - 09/30/2005
10/01/2005 - 10/31/2005
11/01/2005 - 11/30/2005
12/01/2005 - 12/31/2005
01/01/2006 - 01/31/2006
03/01/2006 - 03/31/2006
04/01/2006 - 04/30/2006
05/01/2006 - 05/31/2006
06/01/2006 - 06/30/2006
07/01/2006 - 07/31/2006
08/01/2006 - 08/31/2006
09/01/2006 - 09/30/2006
10/01/2006 - 10/31/2006
11/01/2006 - 11/30/2006