Jump to content

[Skyrim] Permanent fix for crushed meshes or unresponsive bones


canderes

Recommended Posts

After playing with havok for hours and hours I finally understand why some bodies have serious or minor crush issues. When a custom ragdoll and skeleton are created using the havok content tools there are ragdoll mappings that must be assigned before export. Since we aren't able to recreate everything for a particular skeleton (not able to recreate any havok destruction data) the new bones must be pasted to the vanilla skeleton, unless you plan on using your own skeleton.hkx out of the exporter.

 

So what is going on? Those new bones don't exist in the unused bone list and are being pulled down by gravity.

 

If you go the route of pasting bone data from your custom skeleton to the vanilla skeleton, the skeleton mapper must be updated to list bones that the ragdoll capsules are not hooked to. If you have a skeleton like the one created by xp32 or dragonfly you can convert it over to xml form and look for the unmapped bones entry:

 

http://skyrim.nexusmods.com/mods/1797

 

Use hkxcmd.exe convert skeleton_female.hkx skeleton_female.xml (or whatever skeleton you want to convert to xml) I am using Dragonfly's skeleton for this.

 

Or if your lazy you can just open the skeleton_female.hkx in wordpad\notepad. Try it this way first. You still need to use hkxcmd.exe to convert your file though. hkxcmd.exe convert skeleton_female.hkx will generate a file called skeleton_female-out.hkx. Just rename your file when you finish to test it for the game.

  </hkobject>
  </hkparam>
  <hkparam name="chainMappings" numelements="0" /> 
  <hkparam name="unmappedBones" numelements="81">0 1 2 3 5 12 13 14 15 16 17 18 19 20 21 22 23 27 30 33 34 37 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98</hkparam> 
  <hkparam name="extractedMotionMapping">(0.000000 0.000000 0.000000)(0.000000 0.000000 0.000000 1.000000)(1.000000 1.000000 1.000000)</hkparam> 
  <hkparam name="keepUnmappedLocal">true</hkparam> 
  <hkparam name="mappingType">HK_RAGDOLL_MAPPING</hkparam> 
  </hkobject>

The vanilla skeleton map only lists bones starting from NPC Root (bone number 0)  to Camera Control (bone number 98). Luckily the bone numbers can be added to the list. Every bone past 98 must be in the list if the ragdoll is to react correctly on death, so to prevent the current xp32 skeleton from having any crush or bone misplacement issues all 200 some bones after 98 must be added to the list. I was able to stop the butt and breast sagging problems by listing up to 108. Also update the numelements=81 to include your new bones so mine would be 91 since I added 10 bones.

  </hkobject>
  </hkparam>
  <hkparam name="chainMappings" numelements="0" />
  <hkparam name="unmappedBones" numelements="91">0 1 2 3 5 12 13 14 15 16 17 18 19 20 21 22 23 27 30 33 34 37 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108</hkparam>
  <hkparam name="extractedMotionMapping">(0.000000 0.000000 0.000000)(0.000000 0.000000 0.000000 1.000000)(1.000000 1.000000 1.000000)</hkparam>
  <hkparam name="keepUnmappedLocal">true</hkparam>
  <hkparam name="mappingType">HK_RAGDOLL_MAPPING</hkparam>
  </hkobject>

 

This keeps you from having to go edit the skeleton.nif and locks all the bones from translating or rotating out of place keeping the skeleton hierarchy intact. You can look at the bone order of the vanilla skeleton and the one I am using to understand what is going on:

 

SaidenStorms rig file (Full list for vanilla skeleton)

NPC Root [Root]
x_NPC LookNode [Look]
x_NPC Translate [Pos ]
x_NPC Rotate [Rot ]
NPC COM [COM ]
NPC Pelvis [Pelv]
NPC L Thigh [LThg]
NPC L Calf [LClf]
NPC L Foot [Lft ]
NPC R Thigh [RThg]
NPC R Calf [RClf]
NPC R Foot [Rft ]
SkirtRBone01
SkirtRBone02
SkirtRBone03
SkirtLBone01
SkirtLBone02
SkirtLBone03
SkirtBBone01
SkirtBBone02
SkirtBBone03
SkirtFBone01
SkirtFBone02
SkirtFBone03
NPC Spine [Spn0]
NPC Spine1 [Spn1]
NPC Spine2 [Spn2]
NPC L Clavicle [LClv]
NPC L UpperArm [LUar]
NPC L Forearm [LLar]
NPC R Clavicle [RClv]
NPC R UpperArm [RUar]
NPC R Forearm [RLar]
AnimObjectA
AnimObjectB
NPC Neck [Neck]
NPC Head [Head]
NPCEyeBone
NPC L Hand [LHnd]
NPC R Hand [RHnd]
AnimObjectL
AnimObjectR
SHIELD
WEAPON
NPC L Pauldron
NPC R Pauldron
MagicEffectsNode
NPC L MagicNode [LMag]
NPC R MagicNode [RMag]
NPC Head MagicNode [Hmag]
NPC L Toe0 [LToe]
NPC R Toe0 [RToe]
NPC L ForearmTwist1 [LLt1]
NPC L ForearmTwist2 [LLt2]
NPC L UpperarmTwist1 [LUt1]
NPC L UpperarmTwist2 [LUt2]
NPC R ForearmTwist1 [RLt1]
NPC R ForearmTwist2 [RLt2]
NPC R UpperarmTwist1 [RUt1]
NPC R UpperarmTwist2 [RUt2]
QUIVER
WeaponAxe
WeaponBack
WeaponBow
WeaponDagger
WeaponMace
WeaponSword
NPC L Finger00 [LF00]
NPC L Finger01 [LF01]
NPC L Finger02 [LF02]
NPC L Finger10 [LF10]
NPC L Finger11 [LF11]
NPC L Finger12 [LF12]
NPC L Finger20 [LF20]
NPC L Finger21 [LF21]
NPC L Finger22 [LF22]
NPC L Finger30 [LF30]
NPC L Finger31 [LF31]
NPC L Finger32 [LF32]
NPC L Finger40 [LF40]
NPC L Finger41 [LF41]
NPC L Finger42 [LF42]
NPC R Finger00 [RF00]
NPC R Finger01 [RF01]
NPC R Finger02 [RF02]
NPC R Finger10 [RF10]
NPC R Finger11 [RF11]
NPC R Finger12 [RF12]
NPC R Finger20 [RF20]
NPC R Finger21 [RF21]
NPC R Finger22 [RF22]
NPC R Finger30 [RF30]
NPC R Finger31 [RF31]
NPC R Finger32 [RF32]
NPC R Finger40 [RF40]
NPC R Finger41 [RF41]
NPC R Finger42 [RF42]
Camera3rd [Cam3]
Camera Control

My rig file (Incomplete Dragonfly skeleton listing)

NPC Root [Root]
x_NPC LookNode [Look]
x_NPC Translate [Pos ]
x_NPC Rotate [Rot ]
NPC COM [COM ]
NPC Pelvis [Pelv]
NPC L Thigh [LThg]
NPC L Calf [LClf]
NPC L Foot [Lft ]
NPC R Thigh [RThg]
NPC R Calf [RClf]
NPC R Foot [Rft ]
SkirtRBone01
SkirtRBone02
SkirtRBone03
SkirtLBone01
SkirtLBone02
SkirtLBone03
SkirtBBone01
SkirtBBone02
SkirtBBone03
SkirtFBone01
SkirtFBone02
SkirtFBone03
NPC Spine [Spn0]
NPC Spine1 [Spn1]
NPC Spine2 [Spn2]
NPC L Clavicle [LClv]
NPC L UpperArm [LUar]
NPC L Forearm [LLar]
NPC R Clavicle [RClv]
NPC R UpperArm [RUar]
NPC R Forearm [RLar]
AnimObjectA
AnimObjectB
NPC Neck [Neck]
NPC Head [Head]
NPCEyeBone
NPC L Hand [LHnd]
NPC R Hand [RHnd]
AnimObjectL
AnimObjectR
SHIELD
WEAPON
NPC L Pauldron
NPC R Pauldron
MagicEffectsNode
NPC L MagicNode [LMag]
NPC R MagicNode [RMag]
NPC Head MagicNode [Hmag]
NPC L Toe0 [LToe]
NPC R Toe0 [RToe]
NPC L ForearmTwist1 [LLt1]
NPC L ForearmTwist2 [LLt2]
NPC L UpperarmTwist1 [LUt1]
NPC L UpperarmTwist2 [LUt2]
NPC R ForearmTwist1 [RLt1]
NPC R ForearmTwist2 [RLt2]
NPC R UpperarmTwist1 [RUt1]
NPC R UpperarmTwist2 [RUt2]
QUIVER
WeaponAxe
WeaponBack
WeaponBow
WeaponDagger
WeaponMace
WeaponSword
NPC L Finger00 [LF00]
NPC L Finger01 [LF01]
NPC L Finger02 [LF02]
NPC L Finger10 [LF10]
NPC L Finger11 [LF11]
NPC L Finger12 [LF12]
NPC L Finger20 [LF20]
NPC L Finger21 [LF21]
NPC L Finger22 [LF22]
NPC L Finger30 [LF30]
NPC L Finger31 [LF31]
NPC L Finger32 [LF32]
NPC L Finger40 [LF40]
NPC L Finger41 [LF41]
NPC L Finger42 [LF42]
NPC R Finger00 [RF00]
NPC R Finger01 [RF01]
NPC R Finger02 [RF02]
NPC R Finger10 [RF10]
NPC R Finger11 [RF11]
NPC R Finger12 [RF12]
NPC R Finger20 [RF20]
NPC R Finger21 [RF21]
NPC R Finger22 [RF22]
NPC R Finger30 [RF30]
NPC R Finger31 [RF31]
NPC R Finger32 [RF32]
NPC R Finger40 [RF40]
NPC R Finger41 [RF41]
NPC R Finger42 [RF42]
Camera3rd [Cam3]
Camera Control
NPC L PreBreast
NPC L Breast
NPC R PreBreast
NPC R Breast
NPC L PreButt
NPC R PreButt
NPC L Butt
NPC R Butt
NPC L Breast01
NPC R Breast01
NPC Hair01
NPC BHair01
NPC BHair02
NPC BHair03
NPC BHair04
NPC BHair05
NPC BHair06
NPC BHair07
NPC BHair08
NPC BHair09
NPC BHair10
NPC BHair11
NPC BHair12
NPC BHair13
NPC BHair14
NPC BHair15
NPC BHair16
NPC BLHair01
NPC BLHair02
NPC BLHair03
NPC BLHair04
NPC BLHair05
NPC BLHair06
NPC BLHair07
NPC BLHair08
NPC BLHair09
NPC BLHair10
NPC BLHair11
NPC BLHair12
NPC BLHair13
NPC BLHair14
NPC BLHair15
...

This one is the one I use to export the animations. It is unfinished because there around 300 bones on the xp32 skeleton and I haven't bothered to add them all yet. The vanilla skeleton also counts up from 0, starting at NPC Root but ends at Camera Control (bone 98 if your counting from 0). In the animation folder there is a file named deathanimationa.hkx. To keep the crush issue from occurring add the bone numbers like above to the skeleton.xml (get this by using hkxcmd.exe on your skeleton.hkx) use wordpad and add all the bones after 98. After you have all of the bones added to the xml you MUST import your skeleton.nif, deathanimation.kf and export using havok content tools with a full list of the bones on your skeleton. If you are only going to add for the butt and breasts then stop at 108. If you are using wings or animated hair or anything like that then all of the bones must be added to the list.

post-15159-0-44169200-1366623078_thumb.jpg

Link to comment

Ahh sorry I forgot to mention that yours ends at 106 and I forgot to mention that adding up to node 114 fixes the butt issue for xpms on the meshes with a weighted butt. I was looking at a bunch of skeletons when I did this so I didn't remember exactly what was in yours vs dragonfly (only requires bones up to 108 to be added) vs vanilla (don't even use this, if you are experimenting then you already know what needs to be changed if any). Thanks for the clarification.

 

xpms:

<hkparam name="name">NPC L PreBreast</hkparam>	99
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L Breast</hkparam>	100
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R PreBreast</hkparam>	101
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R Breast</hkparam>	102
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L Pussy01</hkparam>	103
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L Pussy02</hkparam>	104
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R Pussy01</hkparam>	105
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R Pussy02</hkparam>	106
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L Breast01</hkparam>	107
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R Breast01</hkparam>	108
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L PreButt0</hkparam>	109
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L PreButt</hkparam>	110
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC L Butt</hkparam>	111
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R PreButt0</hkparam>	112
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R PreButt</hkparam>	113
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>
				<hkobject>
<hkparam name="name">NPC R Butt</hkparam>	114
					<hkparam name="lockTranslation">false</hkparam>
				</hkobject>

Link to comment
  • 3 weeks later...

I have tried to modify the skeleton­_female.hkx as suggested - but I do not get a fixed breast and butt sagging problem - I get immobile female characters. A little more help would be appreciated as I don't normally play with XML files.

Whether I open the above mentioned file in notepad (quick and dirty) or Liquid XML Studio (slower and extensive) my code looks different from yours not the characters themselves but how they are arranged. And however I do the editing the result remains disappointingly constant: Immobile female characters. Paralyzed from the neck and down so to speak. I have also tried to copy your code and paste it in the correct position.

What xml editor do you use? And do you have any ideas about what I do wrong?

 

Oh, yeah I also use Dragonflys TBBP skeleton...

 

Archer1234

Link to comment
  • 3 weeks later...

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use