Difference between revisions of "User:Thingy Person"

The Beyond Skyrim Wiki — Hosted by UESP
Jump to: navigation, search
Line 27: Line 27:
 
::: Fun fact #6: but output animationdata and animationsetdata folders, animationdatasinglefile.txt, animationsetdatasinglefile.txt will be stored in ck-cmd 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.
 
::: 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.
+
::: 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 [https://github.com/BrannigansLaw/Skyrim-Behavior-Editor- github].
 
: 2. '''Skyrim Behavior Tool'''. GUI tool for behavior editing. Download it from [https://github.com/BrannigansLaw/Skyrim-Behavior-Editor- github].
  
== Custom creature implementation ==
+
== Preparation ==
Short note on how to import custom creature using ck-cmd so I don't forget anything:
+
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.
  
# Use importrig to export skeleton
+
== Custom animated creature implementation ==
# Use importskin to export skin. Fix root bone name to NPC Root [Root]
+
 
# Do all behavior edits you need on donor havok project
+
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:
## For movement blend generators set weights to actual creature speed from animation
+
: 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.
## Replace skeleton with new skeleton.
+
: 2. Skeleton with collision in fbx.
## In character file write in your new bone pair map.
+
: 3. Animations in separate fbxs.
# Use retargetcreature on donor behavior to copy behavior
+
This is what you need to do to implement it:
# Use importanimation to export animations. Set -c to animationdata<YourCreature>project.txt generated by retargetcreature. Set -b to donor behavior (not new behavior!) folder
+
: 1. Use ck-cmd importskin command to import skin fbx to nif. Rename root bone in imported nif to NPC Root [Root].
# Create race, skin, armor addon, etc in esp generated by retargetcreature. Set actual creature speed to movement type
+
: 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.
 +
[[image: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…
  
 
== Custom idles ==
 
== Custom idles ==
  
 
== Behavior editing ==
 
== Behavior editing ==

Revision as of 03:43, 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…

Custom idles

Behavior editing