Bone Priorities

When you're playing Oblivion, your character is almost always playing more than one animation at a time. Even doing something as simple as exploring a cave with a torch requires at least two animations: a walking animation and a torch-holding animation. The engine uses bone priorities to determine how to blend two or more animations. When transform data is being applied to a bone from more than one animation and these animations are playing at the same time the animation that assigns the highest bone priority to the transformed bone 'wins' and moves the bone in line with that animation. It is this blending which makes it possible for your character to run and attack at the same time, or to hold a torch and cast a spell.

When creating your own animations, therefore, it is important that you take into consideration other animations and how they will interact with your own. If you set your bone priorities too high, they may interfere with another animation which should, logically, take precedence. And if you set them too low, they may not appear to be working because they are being continually overridden by other animations. In general, moving animations should place higher priorities on the leg bones, and lower priorities on the arm and head bones, and attacking animations using the arms and hands should be weighted in the opposite direction. It pays to spend some time testing your animation in-game to see how it works in a variety of actions to get it looking good and playing nice no matter what the player is doing.

How to Find a Bone Priority in an Animation File

NifSkope: To find the bone priority in an animation (.kf) file, open the file in NifSkope and select (left-click) the 0 NiControllerSequence in the Block List window. In the Block Details window, find the Controlled Blocks entry and expand it. Each bone will have its own Controlled Blocks entry (the name of the bone is listed in the Value column). Expand the bone's Controlled Blocks entry and find the Priority listing. The bone priority appears in the Value column.

Finding the bone priority in Nifskope.

Blender: In the Buttons panel, switch to Object (F7) or Editing (F9) and look in the Constraints tab. Beneath the name of the selected bone you should see a box that displays the bone priority.

Getting the bone priority in Blender.

How to Assign Bone Priorities

NifSkope: To assign bone priorities in NifSkope, open the animation (.kf) file and select (left-click) the 0 NiControllerSequence in the Block List window. In the Block Details window, find the Controlled Blocks entry and expand it. Find the entry for the bone you wish to edit and double-click the value beside Priority.

Setting the bone priority in Nifskope.

Blender: To assign bone priorities in Blender, open a scripts window and select Scripts -> Object -> Set Bone Priority. This will set the priority for any bones you have selected in Pose mode.

Setting the bone priority using the script.

You can also set the priority for a selected bone in the Constraints tab in the Buttons panel in either Object (F7) or Editing (F9) mode. Select the number after 'Priority:' and change it. See the sample bone priority data below to get an idea about what you should set it to.

Setting the bone priority manually in the constraints tab.

Additional Notes

Bone Groups

The default _male armature can be roughly divided into two major bone groups: bones above the waist and bones below the waist. Within these groups it is possible to identify rough sub-groups: all bones in the chain beginning with the left clavicle (shoulder bone) descending to the left finger tip bones, including the upper arm and forearm twist bones and the Torch/Shield bone, appear to share the same bone priorities; a similar sub-group exists for the bones from the right clavicle to the right finger tip bones that includes the Weapon bone in place of the Torch/Shield bone. Both sets of leg bones, the tail bones, and the pelvis (along with the Bip01, Bip01 NonAccum, and SideWeapon bones) may be considered a sub-group as well, as they seem to share the same priorities, although in this case the sub-group is functionally the same as the group of 'bones below the waist'. The remaining bones display some variety: the head/neck/spine chain is often broken up with varying priorities based on the animation. The Quiver and BackWeapon bones, of course, are usually grouped with the spine bones.

Animation Groups

Idle animations have the lowest priority (about 20), which is appropriate since the player is not directly controlling the avatar during idles. Movement animations have higher (30) priorities, which allow the movement animations to override the idle animations when the player moves the avatar. Animations involving the casting of spells or melee attacks tend to set higher bone priorities for bones above the waist and lower priorities for bones below the waist. This allows the bones directly involved in the action to override movement or idle animations on the spine, head, and arms while still allowing the player to move the avatar with the higher priorities on the legs. Special bones, like the weapon and magic node bones are roughly grouped by location with the rigged bones. The Torch, Weapon, BackWeapon, Quiver, Bow, and magicNode bones are grouped with the bones above the waist and the Bip01, Bip01 NonAccum, and SideWeapon with the bones below the waist.

Stagger animations have very high bone priorities (70+), although they are occasionally exceeded by other animations. This, of course, makes sense since the purpose of the stagger is to 'override' the player's choice of actions and hence penalize them.

Bows and Spells

Bow and spell casting animations require certain bones that are only present in animations that execute bow and spell-related actions. Bow:0 (two bones), ArrowBone, and ArrowHelper01 in bow animations and magicNode in spell casting animations. Dashes in the chart for other animations indicate that no priority was set for the bone in the animation, indicating it was either not present or explicitly left blank. (I still have to check this.)

Sample Bone Priority Data

Bone Priorities for Default _Male 3rd Person Animations
Animation AnimGroup Cycle Type Bip01 Bip01 Pelvis Bip01 Spine Bip01 Spine1 Bip01 Spine2 Bip01 Neck Bip01 Neck1 Bip01 Head Bip01 L Clavicle Bip01 L UpperArm Bip01 L Forearm Bip01 L Hand Bip01 L Finger0 Bip01 L Finger01 Bip01 L Finger02 Bip01 L Finger1 Bip01 L Finger11 Bip01 L Finger12 Bip01 L Finger2 Bip01 L Finger21 Bip01 L Finger22 Bip01 L Finger3 Bip01 L Finger31 Bip01 L Finger32 Bip01 L Finger4 Bip01 L Finger41 Bip01 L Finger42 Torch ArrowBone Bip01 L ForearmTwist Bip01 L UpperArmTwist Bip01 R Clavicle Bip01 R UpperArm Bip01 R Forearm Bip01 R Hand Bip01 R Finger0 Bip01 R Finger01 Bip01 R Finger02 Bip01 R Finger1 Bip01 R Finger11 Bip01 R Finger12 Bip01 R Finger2 Bip01 R Finger21 Bip01 R Finger22 Bip01 R Finger3 Bip01 R Finger31 Bip01 R Finger32 Bip01 R Finger4 Bip01 R Finger41 Bip01 R Finger42 ArrowHelper01 Weapon Bip01 R ForearmTwist Bip01 R UpperArmTwist BackWeapon Bow:0 Bow:0 Quiver magicNode Bip01 L Thigh Bip01 L Calf Bip01 L Foot Bip01 L Toe0 Bip01 R Thigh Bip01 R Calf Bip01 R Foot Bip01 R Toe0 SideWeapon Bip01 TailRoot Bip01 Tail01 Bip01 Tail02 Bip01 Tail03 Bip01 Tail04 Bip01 Tail05 Bip01 Tail06 Bip01 Tail07 Bip01 Tail08 Bip01 NonAccum
blockattack BlockAttack Clamp 27 27 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - 75 75 75 75 - - 75 - 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
bowattack AttackBow Clamp 25 25 55 55 55 55 55 95 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
castself CastSelf Clamp 26 26 46 46 46 46 46 96 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 - 66 66 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 - 46 46 46 46 - - 46 66 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
handtohandattackleft AttackLeft Clamp 25 25 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 - - 55 - 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
handtohandattackleftpower AttackLeftPower Clamp 55 55 55 55 55 55 55 55 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 - 65 65 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 - - 55 - 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
handtohandblockhit BlockHit Clamp 27 27 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75 - 75 75 75 75 - - 75 - 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
handtohandequip Equip Clamp 25 25 55 55 55 55 55 55 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 - 35 35 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 - - 55 - 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
handtohandrecoil Recoil Clamp 25 25 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 - - 55 - 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
handtohandstagger Stagger Clamp 70 70 70 70 70 70 90 90 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 - 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 - 70 70 70 70 - - 70 - 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70
handtohandunequip Unequip Clamp 25 25 55 55 55 55 55 55 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 - 35 35 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 - 55 55 55 55 - - 55 - 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
idle Idle Loop 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 - 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 - 20 20 20 20 20 20 20 - 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
jumpstart JumpStart Clamp 30 30 30 30 30 30 30 30 30 30 30 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 - 30 30 30 30 30 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 - 20 30 30 30 - - 30 - 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
walkforward Forward Loop 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 - 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 - 30 30 30 30 - - 30 - 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30

Last updated July 20, 2011

© 2009-2011 Dave Finch