Difference between revisions of "User:Thingy Person"

The Beyond Skyrim Wiki — Hosted by UESP
Jump to: navigation, search
Line 54: Line 54:
  
 
If everything was done right your creature animations must work in game! But there are a lot of things to tweak in behaviors…
 
If everything was done right your creature animations must work in game! But there are a lot of things to tweak in behaviors…
 +
 +
== Root motion ==
 +
 +
Your animations may include root transform which describes creature’s center of mass movement. Skyrim engine handles it in a very special way. Hkx animations actually can contain only Z translations and X and Y rotations of root. X and Y components of translations and Z and W components of rotation are stripped from animations by ck-cmd '''importanimation''' command and is stored in text cache in animationdata\boundanims folder (and in animationsdatasinglefile.txt). Translation and rotation of creature are instead determined by engine. Speed of movement is defined by creature’s movement type. Most of creatures have several animations for movement, which are blended depending on movement speed. In order to make creature movement animation synchronized with its motion one needs to do two things:
 +
: 1. Set walking and running speed in movement types to actual speed values for which respective animations are made.
 +
[[image:custom_animations_2.png]]
 +
: 2. Open your creature’s behavior and find '''hkbBlenderGenerator''' of movement animations. Weights of its children are values of speed to which respective animations correspond. When speed of creature is between weights of two of those animations, resulting animation is blended from those two animations proportionally. So, you need to set those weights to values for which respective animations are made.
  
 
== Custom idles ==
 
== Custom idles ==
  
 
== Behavior editing ==
 
== Behavior editing ==

Revision as of 03:45, 1 June 2022

All credit to Jonahex

Animation events

Tools

1. ck-cmd. Not earlier than May 2022 build is required for custom creature implementation. Can be downloaded from github. Either download latest build from appveyor artifacts or build if from sources.
ck-cmd is command line tool. Following commands are useful for animation implementation:
1) convert. Used for conversion between binary and xml representation of Havok (.hkx) files.
convert <input file path> -o <output file path> -v WIN32 -f SAVE_DEFAULT — to convert xml to Skyrim LE hkx.
convert <input file path> -o <output file path> -v AMD64 -f SAVE_DEFAULT — to convert xml to Skyrim SE hkx.
convert <input file path> -o <output file path> -f SAVE_TEXT_FORMAT — to convert Skyrim LE hkx to xml.
Fun fact #1: SE hkx can’t be converted back to xml. So, save your xmls!
2) importrig. Used to import skeleton from fbx to nif and hkx.
importrig <input fbx path> -a <animation output folder path> -e <nif output folder path>.
Fun fact #2: skeleton hkx will be saved to folder where ck-cmd.exe is located, no matter which output paths you set.
Fun fact #3: most of the time you don’t need animation output, but you need to set animation output folder anyway, command doesn’t work without it.
3) exportfbx. Used to export nifs back to fbx.
exportfbx <input nif path> -e <output folder path>.
4) importskin. Used to import creature or armor skin from fbx to nif.
importskin <input fbx path> -e <output folder path>.
5) retargetcreature. This command copies creature Havok project replacing creature name in all instances where it’s needed and creates esp with idles, sound descriptors and movement types for new creature.
retargetcreature <path to source creature file in meshes\animationdata> <path to source creature Havok project folder> <new creature name> -s <Skyrim LE folder path>.
Fun fact #4: there is no output folder argument. All output is stored in ck-cmd folder. It includes animationdata and animationsetdata folders, animationdatasinglefile.txt, animationsetdatasinglefile.txt and <new creature name> folder with new Havok project.
Fun fact #5: well, actually not all. Esp is stored in your Skyrim LE Data folder.
6) importanimation. Used to export fbx animations to hkx.
importanimation <path to skeleton hkx file> <path to fbx animation file or folder with animations> --b=<path to creature behavior folder> --c=<path to your creature animation cache file, i.e., animationdata\<your creature’s name>project.txt> --e=<output animations folder>.
Fun fact #6: but output animationdata and animationsetdata folders, animationdatasinglefile.txt, animationsetdatasinglefile.txt will be stored in ck-cmd folder!
Fun fact #7: though they won’t be generated if in --b argument <your creature’s name>project.txt contains uppercase letters.
And the final ck-cmd fun fact: if you any of folder paths in commands with slash, commands don’t work.
2. Skyrim Behavior Tool. GUI tool for behavior editing. Download it from github.

Preparation

For any animations work you need Skyrim LE Havok projects and animation cache. So, extract Skyrim – Animations.bsa. It contains all Havok projects in game, animationdata and animationsetdata folders and animationdatasinglefile.txt, animationsetdatasinglefile.txt files. For manual editing of behaviors you can further convert Havok files to xml with ck-cmd.

Custom animated creature implementation

Let’s say you have custom creature modelled and animated, and animations follow one of existing creatures which we will call donor. You need to prepare following files:

1. Skinned mesh in fbx. You will save a lot of headaches if your creature is aligned in +Y direction and skeleton root bone is at origin.
2. Skeleton with collision in fbx.
3. Animations in separate fbxs.

This is what you need to do to implement it:

1. Use ck-cmd importskin command to import skin fbx to nif. Rename root bone in imported nif to NPC Root [Root].
2. Use ck-cmd importrig command to import skeleton fbx to nif and hkx.
3. Use ck-cmd retargetcreature command to copy donor Havok project.

Custom animations 1.png

4. Construct bone pair map. Bone pair map is list of numbers in which item with index n is index of n-th bone mirrored pair. Bone pair map is needed for mirrored animations to work. For example, if your skeleton includes the following bones: root, pelvis, leg_left, leg_right, your bone pair maps is 0, 1, 3, 2. In retargeted Havok project find Characters\<creature name>Character.hkx, find there hkobject hkbMirroredSkeletonInfo, in which find parameter bonePairMap. Replace list there with your bone pair map.
Note that editing something in hkx means first converting it to xml, editing xml and then converting back to hkx.
5. Use ck-cmd importanimation command to import fbx animations to hkx. It’s necessary to set --b argument to donor behavior folder, and --c argument to retargeted animated cache file!
6. Now collect all files and put them to relevant locations:
  • animationdata and animationsetdata folders and animationdatasinglefile.txt, animationsetdatasinglefile.txt files from importanimation command to Meshes folder.
  • Havok project from retargetcreature command to where you store your creatures, probably Meshes\<project name>\Actors\<creature name>.
  • Skin, skeleton.nif and skeleton.hkx to <Havok project folder>\Character Assets\.
7. Now take esp file generated by retargetcreature command and load it in CK. Create race, armor addon, armor and actor records for your creature. In armor addon set paths to skin. In race set paths to skeleton and Havok project, and generated movement types. Check generated IDLE records – paths there may need to be adjusted to where you actually stored your Havok project.

If everything was done right your creature animations must work in game! But there are a lot of things to tweak in behaviors…

Root motion

Your animations may include root transform which describes creature’s center of mass movement. Skyrim engine handles it in a very special way. Hkx animations actually can contain only Z translations and X and Y rotations of root. X and Y components of translations and Z and W components of rotation are stripped from animations by ck-cmd importanimation command and is stored in text cache in animationdata\boundanims folder (and in animationsdatasinglefile.txt). Translation and rotation of creature are instead determined by engine. Speed of movement is defined by creature’s movement type. Most of creatures have several animations for movement, which are blended depending on movement speed. In order to make creature movement animation synchronized with its motion one needs to do two things:

1. Set walking and running speed in movement types to actual speed values for which respective animations are made.

Custom animations 2.png

2. Open your creature’s behavior and find hkbBlenderGenerator of movement animations. Weights of its children are values of speed to which respective animations correspond. When speed of creature is between weights of two of those animations, resulting animation is blended from those two animations proportionally. So, you need to set those weights to values for which respective animations are made.

Custom idles

Behavior editing