Blender 3D︰從入門到精通/Animation Notes and FAQ
This page is under heavy construction. It will probably not be edited better until early May 2012. If someone sends me information on how to convert a OpenOffice odt file to a wikidoc format, then it may be done sooner. Until then this will be quite a work in progress.
Authors & Contributors编辑
I found it quite cumbersome to find all of the little quirks, problems, and tricks in multiple sources whenever I would forget something. Therefore, I compiled all of the things I found important—primarily with character animation. Almost all the information here is consolidated from many sources. Some sources still need to be cited and any help on this would be much appreciated. For that reason I did not intend to make this public but I think there is enough need for this type of information so here it is.
Just as a special aside, I made these notes to help myself with my animation project. Although I have organized them and posted them online for my and others benefit, I will not be dedicating any large amount of time to this website. All of my extra time needs to be allocated to the animation project. However, I do not mind suggestions and am willing to possible use them. I want to make sure that the viewer understands my time is very limited.
There may be many typos or confusing areas of organization. I tried to organize the mess of notes as best as possible but I am sure there is an even better way. Feel free to fix any aspect of this.
Any suggestions or comments feel free to e-mail me at wiki [at] pagodaproductions.com.
Q: I managed to create an acceptable walk cycle finally, now when I reopend the file to add additional animation, It keeps falling back to walk cycle, is their something i am doing wrong. Even after adding the LocRotScale key frame, it still ignores them, and goes back the corisponding frame for the walk. Ugggghhhh!!!
Q: What is the best approach for rigging a character in Blender?
Q: How do I attach a separate object to a bone?
Q: When you try to scale the root bone of the armature(which scales the mesh), the bones move out of the natural placement causing unwanted positioning and distortion. Is there any way around this?
Q: What is a pole vector?
Q: How do I know that my armature is correctly positioned in global space in edit, object, and pose mode with proper bone rolls and axis pointing in proper directions? What are the best methods for building? And what axis is up Y or Z?
Ctrl-C/Ctrl-V Trick One simple way to get the right name is to select the Lattice, go to F9, Link and Materials panel and where it says Ob:Lattice or Ob:Lattice.001 etc., move the mouse over this field and press Ctrl-C (don't click on it, just hover over it). This copies the Lattice name. Then select your object, go to the Lattice Modifier panel, hover the mouse over the Ob: field and press Ctrl-V to paste the name in. Now it should stay there and your Lattice should work in Edit Mode.
H hides bones
Alt+H shows all bones
Shift+H hides everything except the chain
Ctrl+I [Pose Mode] will automatically add an IK contraint
M [Pose Mode] to move a bone to a bone-layer, select it in POSE mode then press "m" and click on the desired layer button. When the bone is selected, you can see which bone layer it is on in the Editing buttons / Selected Bones panel. Whichever of the 16 layer buttons is enabled is the layer the bone will be on.
Shift+M [Pose Mode] You can use the hotkey SH-M to display a floating bone-layer panel in the 3d viewport. Select the armature, change to POSE mode, then change to the Buttons/Editing panel (F9). Under the Armature-Panel, Display Options SH-LMB the 8th button under the Display Options Bone-Layer buttons to enable it. Check out this by BlenderArtists.com.
Alt-N normalize the bone orientation This can fix problems sometimes.
Alt+P clears parent
Alt+S [Pose Mode] in edit mode allows b-bones shape to scale visual changes without affecting the bones.
W [Edit Mode] subdivides bones
W [Pose Mode] will calculate paths to see how a bones movement is mapped out along a path or If you've named your bones correctly ( with .L and .R at the end of the name ) , you can flip the mirrored bone name by pressing "W" and "flip name" . A relevant post on BlenderArtsists.com is available here.
Approaches, Techniques, Tips and Tricks编辑
Constraining IK or FK In the Armature Bones Panel is where you can limit the movement of the bone for IK and Limit Rotation Constraint for FK
Customizing Frame Skipping Steps(F10 playback) allows for a customizable way of skipping frame in increments.
Copying Constraints in pose mode 1. Select all bone(s) you wish to copy the constraints to, from a particular bone 2. Now, select the bone you wish to copy constraints from 3. Ctrl C --> Constraints (All)
You can do CTRL-CKEY to copy stuff from a bone to bones. The options are location, rotation, scale and constraint. Constraint is very handy when you wan to copy a constraint to other bone. The way it works is easy. The WKEY menu get some neat options too: Select constraint target: Will select the target of the bone's constraint currently selected. Flip name: Yep, you can flip name in Posemode too. Calculate/Clear path: This is a visual way to see the action linked to your armature. You can select just some bones and ask Blender to show you the paths of the bones.
It's possible to copy constraints from one object/bone to a bunch of objects/bones. A useful thing to know when doing a repetitive task like rigging all the fingers of a hand. Just select all bones/objects that you want to give a copy of the constraint, and then select the bone/object containing the constraints. Press CTRL-CKEY in 3DView, and select Object Constraints from the popup menu. The idea behind this is to copy the constraints of the active object to the selection.
Rigging Q: What is the best approach for rigging a character in Blender?
A: Apollux Honestly, I don't think that there is a golden set-up that will solve all your problems. For example, when I design a character rig I need to know beforehand what type of actions he will perform.
If you want general pointers, I guess this would do: Allways set your rigs in a half relaxed fashion.. totally relax your hand for a few minutes and see the position of the palm and fingers, that is position you should model and rig-them on the 3D world. Same goes for mouth, legs, arms, etc. etc. etc.
When in doubt over IK or FK always choose IK, since it is quite easy to switch a IK rig into FK when needed and then back to IK.
Bone's axis orientation can't be an afterthought!! It is no coincidence that every self-respecting rigging tutorial for blender mention it... And don't trust blindly on the automatic axis orientation fix command (Ctrl-N), since it can introduce some odd solutions on complex armatures. Always check each bone by hand, even if Blender says they are fixed.
Ultimate rig design is not the in-and-all of character animation. Sometimes I would spent crazy amounts of time preparing a rig for a special squence, and in the end realize that if I had used a simple FK rig tricked by hand during animation I would get the same results in half of the time and half the frustration. Not because it can be done means that it must be done. BlenderArtists post here.
Item Pickup A good use of it is to ask a character to pick up something. By having a bone or empty for each side of the relationship (hand <-> glass), as the hand approaches the glass, you can align the two empties and fire the constraint up (1.00) to stick them together. You add another child-bone in the middle of the hand to tell where the glass will be. Thus moving the hand will move the glass. On the side of the glass just add an empty and make it parent of the glass. Add a copy location to the empty pointing to the bone in the hand we just did. There you go. Of course when the hand rotates the glass will not. For that you will need to add a Copy Rotation Constraint. Before Blender 2.40, the above method was a good way of faking parent relationship without rotation. But now we have the hinge option which does the same.
Problems and Questions编辑
Separate Object/Bone Attachment Q: How do I attach a separate object to a bone?
A: To do that simply Ctrl-Tab into Pose Mode with the armature selected then select the object/mesh you want to parent to a bone then shift-select the bone you want to be the parent and Ctrl-P>"MakeParent to">Bone .
Armature Scaling Problems Q: I have been trying to scale my character which has many similarities to the mancandy and ludwig rigs. However, when you try to scale the root bone of the armature(which scales the mesh), the bones move out of the natural placement causing unwanted positioning and distortion. Both the mancandy and ludwig rigs have this same problem. Is there any way around this?
A: Why are you trying to scale the root bone (to scale the whole model)? Are you doing this in pose mode or object mode? If you are trying to scale the whole model try it in Object Mode. Also check if you are scaling around the cursor instead of median point
Q: What is a pole vector?
A: Vertex Pusher 2) Pole vector is actually a term used in Maya. It refers to the direction a bone is set to point towards in Maya rigging. For example, the direction you want the knees to point towards can be set using pole vectors. Apparently, Blender should be getting this feature soon . Right now you have to add target bones so that the knees will only bend one way (see Ryan Dale's BSoD tutorial), but with the option to use pole vectors you won't need to do this in the future .
BlenderArtists post about bones.
Bone Orientation Q: How do I know that my armature is correctly positioned in global space in edit, object, and pose mode with proper bone rolls and axis pointing in proper directions? What are the best methods for building? And what axis is up Y or Z?
A: 1. Build up all the bones, as you did before. (Every foot, arm, etc. should be a bit bent, and drawn from the proper view.)
2. Select all these armatures, and with Ctrl-J join them into one armature. (Or with parent/child connection, as is necessary.)
3. Select this armature, go to "Editing" (F9), and then turn on "draw axes". Then you can see the axes of the bones. You will see, that the axes are different. Some bones has the Z-axis up, some has the Z-axis to the left, etc.
4. First you should tell Blender that this is the original position of your skeleton/model by pushing Ctrl-A. This is applying rotation. This means, that now all the rotations of the bones will be "0, 0, 0", so if you push later Alt-R (clear rotation), you will get this position. (Turn on numerical menu with N, to see what happens when you make this apply rotation command.)
5. Select the whole skeleton/model again. Go to edit mode. Then push A, to select all the bones. (They should be yellow now.) Then hit Ctrl-N, and you will see all the axises will be changed to stay on the same way.
6. That is, your skeleton now is ready to define the IK solvers, and then the skinning, and finally the animation.
A: Vertex Pusher 4) Yes you should always add in top view[numpad 7]. An armature bone always has its axes set (Y is always up X side to side and Z depth) and you cannot change this like you can with mesh objects, so it seemingly won't matter which view you add a bone while in Edit Mode but in Object Mode your armature object will have a 90 degree rotation around the X axis (if you add it in front view) which can and usually does create problems down the road . If for some reason you want to add bones in front view simply start by adding the first armature bone in top view ad then switch to front view to add additional bones . You can just delete the first bone or rotate it while in Edit Mode .
Blender's default views have the Z as the "up" axis while the armature system is coded with the Y as the "up" (like most 3D apps)
When you rotate a bone in the front view, when the bone is aligned to that view and the Z is the up axis, you will give a roll value the bone because it is rotating perpendicular to its coded up axis ... this can cause you problems in some situations when you want a "neutral" roll value in Pose Mode... in most cases you'll want to recalculate the roll value with Ctrl-N (which will remove the visible rotation and insert a value in the "Roll:" field in the Transform Properties subwindow) and give it a non zero roll value in Edit Mode so that in Pose Mode it is properly aligned and rotated for poses and constraints ...
You won't get that behavior if you rotate in either the top or side views if the bone is aligned to the view ...
It's just that if you have the Y axis (the axis the bone rolls on) perpendicular to the Global Y axis then you will have to recalculate the bone roll angles to get it aligned properly for pose space .
By "bone is aligned to the view" I mean what it is like when you first add a bone in a preset view, i.e. head at bottom and tip up at top in Edit Mode with no rotation applied .
A: Fligh If you look at your left hand, palm down, from above, and assume for this exercise that all four fingers have their X-Axis pointing towards the thumb and have a Roll Angle of zero (same as if you created an Armature in Top View), but the thumb would need a Roll Angle of about 90. So if you rotate the first digit of the fingers around their Local X (R-XX) they would go down perpendicular to the back of the hand, but if you rotate the thumb (Roll Angle 90 and again around the Local X) it would go Left, towards the fingers.
Ahh.... but who bothers to pose bones like that? You just grab the IK Target and move it!. Well the Transform Matrix is divided into four chunks (I think? I'm not sure of this but it helps to think of it [or look at it] this way and if you actually test it in Blender it works), Bone Space (the structure of the bone including Roll Angle), Armature Space (the structure of the Armature = the sum of all BoneSpace), Pose Space (transforms relative to Rest Position = recorded changes in BoneSpace within ArmatureSpace) and World Space (the sum of all the above relative to the (transforms of) the Armature Object.
A: Fligh Anyhow, In Blender, In Top View (always add armatures in Top view) the Z-Axis is Facing you and Y is Up. So when you add the first Bone it lies along the Y-Axis. You cannot change that parallel-to-Y and any future Bones you extrude will use that bones axis as reference. If you add an Armature in Front view the bone's (local) Z-axis will point to the Global -Y (Y-Negative) and can lead to problems later on.
A: Vertex Pusher Well I guess I may have a little something to contribute to this ... but I have been trying to learn the armature system in depth for the past few months and this particular issue came up with a complicated rig I was working with ... and I basically "discovered" that you really shouldn't have any other axis other than the Y as the "up" axis . And precisely because the bone roll angle issue .
It seems that despite how the view ports are configured (with the Z as the "up" axis) the default "up" axis is the Y ... for everything ... This is a bit annoying but if you have, like me, configured Blender to start with the front view open and have the Transform Properties window always open, you will see that everything when created in the front view is actually rotated 90 degrees along the X axis once you tab into Object Mode and that you need to Ctrl-A all objects so created (I guess Blender "out of the box" has the top view open ? ... it's been a while so I can't remember ...) . This isn't all that important for most things but for the armature system this does create a problem - bone roll values that you don't want .
Just as a simple test : Open up Blender and add an armature in the front view . Grab the tip and move it to a corner of the grid so that it is angled 45 degrees . Tab into Object mode . Open up the Transform Properties window . You will notice that your armature is rotated 90 degrees along the X axis . So ... Ctrl-A the armature to have it's "up" axis as Z ... And suddenly you will see the bone rotate along its roll axis . Tab back into Edit Mode, select the entire bone and Ctrl-N to recalculate the bone roll angles ... the bone will rotate back to the way it was ... but with a change in its roll value (-45 or 45 depending on which way it is angled) ... Now repeat the above but this time create the armature in top view ... And you will realize that despite being angle at 45 degrees to the view like above no roll value ... not even after recalculating the bone roll angles (Ctrl-N) ...
Now I am assuming that this occurs because the Y axis is the one used to calculate the bone's roll ... and that if you have anything other than the Y as the "up" axis the roll values get screwed up because now the roll axis (Y) is tangent to the up axis instead of being the up axis . Just turn on "Draw Axes" and look at what the "up" axis is for an individual bone is ... the Y .
And just another bit of proof ... The really great new "limit" constraints (loc,rot and scale) added in the last release ... Try and apply the limit rotation constraint to the first armature (the one with Z up and rotation applied) . Now turn LimitX on with no min or max values and do not turn on the "local" co-ordinate space ... it will fall flat along the Y axis as if created in the top view ... This is occurring because despite the fact that you have applied the 90 degree rotation along the X axis to the object, the constraint is enforcing the global up axis ... which is ... the Y .
Now the only work around that I could come up with was to create an empty and parent a Y up armature to it then rotate the empty 90 degrees to be able to use the Z up view ports and also making sure the mesh also had the proper orientation as the armature . This prevents me from accidentally applying the rotation to the armature and I can use the numbpad hotkeys to navigate the views ... ... Else you could just clear the roll values manually if you insist on having the Z as the up axis ... though you won't be able to get rid of the rotation that is caused by being tangent to the Y axis without odd roll values ...
Sorry for the long winded response, but this has been bugging me for a while ... Hopefully with the refactoring for v2.5 later this year there will be an option as to which axis will be the "up" axis with regards to the various views ..
General Armature Information编辑
Armature Object is like any other object type: It has a center, a position, a rotation and a scale factor. It can be edited. It can be linked to other scenes, and the same armature data can be reused on multiple objects. All animation you do in object mode is only working on the object, not the armature's contents like bones. Link and Materials panel: The AR: field let you rename your armature Datablock. The dropdown is a quick way to select which Armature datablock you want to connect to this armature. You can keep more than one version for the same character. Useful when you have a special move to achieve in a shot, you can turn on an armature for a special purpose. The F button is an option to assign a Fake user to the Armature. Again if you have more than one armature for your character, it's a good idea to turn the Fake on, because if your armature datablock is not used (linked) it's not going to be saved in your .blend files. You can always do batch Fake-assignment of armatures by opening the Datablock browser (SHIFT-F4KEY), go in Armature datablock, select all the armatures you want to keep, and Press the FKEY. The OB: field is just to Rename your armature Object to something more cool and useful than Armature... Armature.001...
Delay Deform: This was useful before as the old system was very slow. What it does is when you do a manipulation to the rig, it waits until you finish to update the view. Can still be useful though.
Weight: This specifies how strongly this bone will influence the geometry around it, relative to the other bones. If two bones crossing each other, both with envelope influence, have the same weight (like 1:1) they will influence the surrounding geometry equally. But if you set one to 0.5, the geometry will be affected more significantly by the other one, with weight 1. For example, in this image, 2 bones using envelope influence try to move the same geometry. The 2 on the left have the same weight, you can see the geometry didn't move. On the right, one of the bones has 0.5 so the bone with weight 1 is winning the tug-of-war!: Deform: This lets you say if you want the bone to deform the geometry at all. Switching it off is like setting the weight to 0, except it's faster this way. Useful when using a bone as a target or a controller, i.e. a bone you just want to use to control other bones, but not the geometry itself. Mult: to deform geometry you can use vertex group and/or Envelope. The ability to mix both of these methods is handy for using one to tweak the other. For example, you might use envelope everywhere but tweak difficult places manually with vertex group. We'll discuss this in more detail later on. There are two number fields to better tweak the effect of B-Bones. The in/out is used to tell the scale of the virtual handle of the bezier curve. In is the Root of the bone, and Out is the Tip. The bigger the value, the bigger the effect of rotation. You can do ALT-SKEY on one or more bones while in Envelope display mode to tweak the envelope size in real time while animating. Useful when for example you move the hand and some part of the character isn't in the influence zone; the result will be that some vertices will stay behind.
Tip: Bake envelope to vertex groups The workflow is very simple. When you are done with the envelope's tweaking and you have gotten the best out of it, delete the Armature modifier and parent the mesh to the armature(CTRL-PKEY). Parent it to "armature" when asked and "Create From Closest Bones". Do ALT-PKEY and redo the Armature modifier. Now all the envelope influence are converted to Vertex Groups. This way you can further tweak influence zone using Weight paint. More info in the following pages. You can edit this white zone in Editmode or posemode by going in Envelope display mode, selecting bones and using SKEY or ALT-SKEY The Mult option will tell Blender to multiply the weight it get from envelope (let say 0.7) with the weight you painted in weight paint (let say 0.5). The result will be 0.5*0.7=0.35 so in fact you just tweaked the envelope influence to 0.3 when it was at 0.7. If you don't want vertices to be part of the zone, you can always paint it with 0, as 0*(something) will always give 0. This way you can give custom shape to your envelope. More on weight paint on next page.
Deform with only things weight painted Deform + Multiply with only things that are weight painted within the envelope radius
Process: Make bones. Make good envelope transformations(including some overlap). Alt+P to make virtual parent(from nearest bones)this will already weight paint parts based on envelope influence
"All faces" tells Blender if you want to paint on all faces in the mesh or just the visible one. "Vertex Dist" tell blender to use vertex distance instead of faces. When active, the painting will only check if the vertex is in the brush, then apply a weight value. If it's off, all vertice part of the faces in the brush will receive weight value. Turning on Vertex Dist can give good results when you have a lot of polys in your mesh. Constraints are calculated from first to last. So if you have two Constraints working on the same channel, let say Location, The last one will most probably win the chance to move the object. But... Most of the constraints have influence slider to tell how much it influence on the stack. If the last constraint have an influence of 0.5 it will mix the result with the one before. Most of the time this little constraint is useful to stick objects to one another. By playing with the Influence you can tell when it will work, when it will remain motionless.
Ludwig's Stretchy Spine In the spine Ludwig model keep in mind the following things. The SpineStretch.null is necessary. It must be set to Hinge and Deform to keep the bones from scaling. IKSpine must have Deform turned off(none selected). Spine 4 or the last bone child in the chain(closest to the neck) must have Deform turned off(none selected). Scaling problem is usually tied(maybe always) tied to an improper child/parent relationship to a bone that is involved with stretching.
Created a mirrored copy without using X-Axis Mirror select the bones that you want to mirror , put the 3D cursor at the center : And make shift + d , and directly , S , X , -1 ...
Other Information You can extrude a new bone from the selection using EKEY. This will create a bone connected to the original one, meaning the Root of the new bone will follow the Tip of the original one. You can also CTRL-LMB to extrude a new bone. It will extrude to where you clicked.
Alternatively, you can connect two existing bones by selecting them one after the other and pressing CTRL-PKEY. You can then choose either 'Connected' (the child bone - the one you selected second - will automatically be moved so that it touches the parent) or 'Keep offset'. aa Using the WKEY menu, You can subdivide your bone or flip the name of the bone between Left-Right (See Naming convention below). You can delete the bone with XKEY You can select a chain of bones (connected together) using LKEY, when you hover your mouse over a bone. In many cases, rigs are symmetrical and can be mirrored in half. In these cases, it is helpful to use a left-right naming convention. This is not only useful for your own sake, but it gives Blender a hint that there is a pair of equivalent bones, and enables the use of some very cool tools that will save you some significant work. It's helpful to name your bones with something useful telling you what it's there for, such as leg, arm, finger, back, foot, etc. If you get a bone that has a copy on the other side, however, like the arm (you have 2 arms right?), then the convention is to call them arm.Left and arm.Right. Other alternatives are also possible, like _L, _LEFT, _left, .L, and .Left. Anyway, when you rig try to keep this left-right thing as accurate as possible; it will pay off later on. You can copy a bone named blah.L and flip it over using WKEY --> flip name. So the bone will be blah.L.001 after you copy it, and flipping the name will give you blah.R. Blender handily detects if the .001 version already exists, and increments the number for you.
Bassam's(slikdigit) Mancandy 1.0 http://freefactory.org/posts/candy-for-everyone
Bassam's(slikdigit) Mancandy 2.0 One of the most complex rig I have available for Blender. It has lattice based stretching. http://freefactory.org/posts/candy-for-everyone
Calvin's 05, 2017 This is an alternate foot roll method to Ludwig's rig.
Clean3D's Mouserig http://blenderartists.org/forum/showthread.php?t=79305
Cognis's AnimTest Interesting use of empty's as a bone.
Daniel Martinez Lara's 3-plender leg This is a complex leg rig. It has many IPO driven bones. http://www.daniel3d.com/pepeland/misc/3dstuff/blender/rig/3-plender_leg_v0-1.zip
Jason Pierce's(sketchy) Ludwig http://jasonpierce.animadillo.com/resource/ludwig/ludwig.html
Martin Georgiev's(Animarto) Walk_anim
Michael Thoenes's Suzanne Rigged http://creationanimation.com/sites/thoenes/animation/3dtutorials.htm
Nathaniel Shaw's Generi
Noodlesgc's (Mike Roberts) W1r3z http://www.esnips.com/doc/276d8bd1-0070-4ee4-bd8c-e787b507d6a9/W1r3z.blend
Nozzy's Driven hand http://blenderartists.org/forum/showthread.php?t=18754
Nozzy's Skinny Guy http://blenderartists.org/forum/showthread?t=30994
Virgilio's Otto 1.6 Interesting constraint to keep the feet on the floor. http://uploader.polorix.net//files/99/otto_v1.6.zip
Woodman5k's Bunny http://web.pdx.edu/~wlf/Bunny.rar
Yagapayanata's Rig(2, 4, 6 legs)