Jump to content

Fallout 4 Animation Modding (for modders and animators)


Recommended Posts

I basically want to give my little bit (if i can figure it all out) back to the modding community for making mods that i have enjoyed over the years of gaming..
I'm not going to go out of my way to make mods, i want to make mods because i find it interesting to some degree and to say thanks to everyone else who have made my games like skyrim and fallout NV more enjoyable to play... Its not a big deal, so just have fun doing what you enjoy and love doing the most..

Link to comment

I basically want to give my little bit (if i can figure it all out) back to the modding community for making mods that i have enjoyed over the years of gaming..

I'm not going to go out of my way to make mods, i want to make mods because i find it interesting to some degree and to say thanks to everyone else who have made my games like skyrim and fallout NV more enjoyable to play... Its not a big deal, so just have fun doing what you enjoy and love doing the most..

 

 

Well, actually, tbh, MODDING games is often technically even harder than MAKING them. So if you want to fell comfortable modding games, you need to have a solid understanding of 3d, 3d animation and other gamedev stuff, depending on what you want to mod in particular.

 

As for Blender files, as I mentioned, F4AK has files in FBX format (FBX 2015 and 2016) under the FBX folder, try those. If Blender can't open them by default, then there has to be some plugin to open FBX files. 

 

This might help

 

 

Link to comment

Where do things stand with a Schlongs-for-Fallout and the ability to animate the schlong along with the rest of the body animation?

 

It seems like that will be a need once other pieces are in place such as a more complete F4SE.

 

There is a possibility that @Veniat is starting to do something.

Nothing sure yet.

Link to comment

Where do things stand with a Schlongs-for-Fallout and the ability to animate the schlong along with the rest of the body animation?

 

It seems like that will be a need once other pieces are in place such as a more complete F4SE.

 

We were discussing this, for now we decided that it would be better to animate them separately, because for most tasks you don't need direct control over schlongs. Or boners, I think with Schlong is a Skyrim term, Boner is Fallout term :D

 

I'm still thinking about making custom skeleton, we did not find\write all the tools required for that yet though, it's currently a low priority, no ETA on this..

 

But I will later post something nice :)

Link to comment

https://www.youtube.com/watch?v=iTPkJ7zOss4

 

It's basically raw mocap, not edited, just smoothed a bit with filters.

 

Looks great. So much more natural looking than most hand-made animations.

 

 

Where do things stand with a Schlongs-for-Fallout and the ability to animate the schlong along with the rest of the body animation?

 

It seems like that will be a need once other pieces are in place such as a more complete F4SE.

 

We were discussing this, for now we decided that it would be better to animate them separately, because for most tasks you don't need direct control over schlongs. Or boners, I think with Schlong is a Skyrim term, Boner is Fallout term :D

 

I'm still thinking about making custom skeleton, we did not find\write all the tools required for that yet though, it's currently a low priority, no ETA on this..

 

But I will later post something nice :)

 

 

Boners it is then!

 

Most sex actions involve boners changing angles. Is there a way to package a scene file so that you animate both the body and boner and it publishes out maybe an animation for each so that they can run in sync?

 

Looking forward to what you put together. Thanks again for progress you've made. I think animation-wise, this is already further along than Skyrim. Just waiting for the rest of the tools to catch up.

Link to comment

 

Boners it is then!

 

Most sex actions involve boners changing angles. Is there a way to package a scene file so that you animate both the body and boner and it publishes out maybe an animation for each so that they can run in sync?

 

Looking forward to what you put together. Thanks again for progress you've made. I think animation-wise, this is already further along than Skyrim. Just waiting for the rest of the tools to catch up.

 

 

The approach invented by B3lisario is probably optimal.

 

So the "boners" will be armors, with a few different variants.

And will be the framework (SexTec or a sub-component of it) that will handle the angle (by using subanimgraphs (like SOS) or by replacing the armor with another with a different angle.

No integration in the anims or will be impossible (or extremely difficult) to use them for other races.

Link to comment

 

 

Boners it is then!

 

Most sex actions involve boners changing angles. Is there a way to package a scene file so that you animate both the body and boner and it publishes out maybe an animation for each so that they can run in sync?

 

Looking forward to what you put together. Thanks again for progress you've made. I think animation-wise, this is already further along than Skyrim. Just waiting for the rest of the tools to catch up.

 

 

The approach invented by B3lisario is probably optimal.

 

So the "boners" will be armors, with a few different variants.

And will be the framework (SexTec or a sub-component of it) that will handle the angle (by using subanimgraphs (like SOS) or by replacing the armor with another with a different angle.

No integration in the anims or will be impossible (or extremely difficult) to use them for other races.

 

 

What exactly is a subanimgraph? Is it like an animation layer? 

 

Maybe we could try to allow animators to create custom animations for boners? Making a separate animation file by some naming convention maybe, for the separate armor-boner skeleton.

 

It would be possible to place 2 skeletons into one scene in 3ds max, and export them into separate files, as long as joint names don't match. Even if they will cross-match with the player skeleton, it will still be possible to export, it will just require additional step.

 

So I guess here limitations lie on the framework part. If we can create custom skeletons for armor, I don't know if it's possible yet or not actually. Is it? :)

Link to comment

A KF anim integrated into the NIF.

Schlongs of SOS have it, so you send an animation event to the "armor" (the penis) and it bends.

 

(Subanimgraph, because it does not involve the full skeleton but just a part, like the way armbinders are done, they only control the arms and hands, without touching other nodes, so you can still walk.)

Link to comment

 

The approach invented by B3lisario is probably optimal.

 

So the "boners" will be armors, with a few different variants.

And will be the framework (SexTec or a sub-component of it) that will handle the angle (by using subanimgraphs (like SOS) or by replacing the armor with another with a different angle.

No integration in the anims or will be impossible (or extremely difficult) to use them for other races.

 

 

That approach works well for handling erect vs limp states. But, the angle-changing with code doesn't perform well enough to keep up with animations that need the angle to change constantly.

 

I can see how the approach could work if it was possible to make custom boner animations made for one custom body animation. It does look like that is theoretically possible. But, as it was left in Skyrim, it wasn't documented.

 

 

What exactly is a subanimgraph? Is it like an animation layer? 

 

 

The term has been confusing to me. I believe they are smaller animations that apply only to parts of a skeleton.

 

I've spent some time trying to figure out B3lisario's SOS files to solve this angle issue. The part I couldn't figure out is how to make new animations beyond the "getErect" type animations he included. No documentation or source files exist for this that I could find.

 

 

Maybe we could try to allow animators to create custom animations for boners? Making a separate animation file by some naming convention maybe, for the separate armor-boner skeleton.

 

It would be possible to place 2 skeletons into one scene in 3ds max, and export them into separate files, as long as joint names don't match. Even if they will cross-match with the player skeleton, it will still be possible to export, it will just require additional step.

 

That's exactly what I was thinking. Best of both worlds. On export, it generates a boner animation that you only need to use if your scene animation animates the boner. Then, in the framework, when you call that animation, it looks for "animationname_boner" or some other variable and runs that animation at the same time if it exists. 

 

So I guess here limitations lie on the framework part. If we can create custom skeletons for armor, I don't know if it's possible yet or not actually. Is it? :)

 

 

I'm not sure where things are at in FO4. But, I'm pretty sure that's how SOS worked in Skyrim.

Link to comment

A KF anim integrated in the NIF.

Schlongs of SOS have it, so you send an animation event to the "armor" (the penis) and it bends.

 

(Subanimgraph, because it does not involve the full skeleton but just a part, like the way armbinders are done, then only control the arms and hands, without touching other nodes, so you can still walk.)

 

I can Confirm this, Cause I seen it in a Few of the Static Nifs in FO4 ,  Its a matter of Getting the export right from Max and Scripting the Boner to play the right Animations when needed.

 

Mostly the Export needs to be done with "Nif with Manager" Option

 

Cheers

Link to comment

 

 

 

https://www.youtube.com/watch?v=iTPkJ7zOss4

 

It's basically raw mocap, not edited, just smoothed a bit with filters.

 

 

Nice, all we have to do now is set it up with support for punching, shooting, stabbing, stripping, chaining up and rooting of NPC's in conjunction with VR and make it so people can animate their character live in real time. :)

 

 

I think that will be a separate game, and it would be much much easier to make it from scratch, haha

Link to comment

What about then having a first official extended skeleton for FO4?

With at least two nodes (better 3) for the penis?

In this case, it may be animated with the animation.

 

(I am just thinking loud right now, I am not sure we can do it with an armor, but maybe we can.)

 

Link to comment
Guest kimbale

Goodamn, Shade, stop being such a professional.  :P

 

And please try to not spam stuff into the skeleton anymore, it was horrible with Skyrim. 

 

Has anyone tryed animating "additional" bones, ie goggles or dress stuff? With the subgraphs etc it may very well just be a matter of throwing it in there. ^^

Link to comment

Goodamn, Shade, stop being such a professional.  :P

 

Can't help it :D But what do you mean? I mean I'm not sure which post you're referring to.

 

And please try to not spam stuff into the skeleton anymore, it was horrible with Skyrim.

 

Hmm, and what do you mean 'anymore' - compared to Skyrim? Like you say that we don't need to extend the skeleton with additional bones or what?

 

Has anyone tryed animating "additional" bones, ie goggles or dress stuff? With the subgraphs etc it may very well just be a matter of throwing it in there. ^^

Not yet, I don't know how to get it into the game and which assets to test this on. If you tell me what assets to try and animate and what files you need on export - I can make a test animation for you to.. well, test in the game :)

 

Or you can tell me how to test it myself, though it may take longer 

 

What about then having a first official extended skeleton for FO4?

With at least two nodes (better 3) for the penis?

In this case, it may be animated with the animation.

 

(I am just thinking loud right now, I am not sure we can do it with an armor, but maybe we can.)

 

 

Well, I think we discussed it.

Approach 1 (Subanims): Technically it would be much better and even more correct to only animate additional bones when they're needed, using subanims or whatever they're called, and separate skeleton files and stuff. 

 

Approach 2 (Extended Skeleton): We can also just add bones to the main skeleton and just use those bones when needed. We can still attach and detach boners, for example.

 

But both these approaches are currently struggling through tech problems.

 

I guess to create new skeleton, all custom joints have to be exported into nif but added manually into the skeleton.hkx (through xml editing). Because there is a lot of data that we can't still import into max, and it will be lost on import\export whatever. Like ragdoll data. We could, theoretically, create our own brand new ragdoll with HCT, but I don't think it's a good idea. Or is it? We could then add boner into the ragdoll :D But I had no luck yet trying to set up HCT to export ragdoll, need to test it still.

 

The approach with subanims seems easier on the tech side for me, because we don't need to mess with original skeleton and it's xml code. But I can't test it myself, because I guess we'll need to use CK for it, and I have no experience with CK or Papyrus. Atm I don't have time to learn it either.

 

But I'm also just thinking out loud yet.

Link to comment

Well, shit.

I'm trying to export skeleton.hkx file. I managed to set most things up, including ragdoll, using HCT.

But my hkx file, while works fine in HCT previewer, is slightly different from the original.

Header, for example.

Original:

 

<?xml version="1.0" encoding="ASCII" standalone="no"?>
<hkpackfile classversion="11" contentsversion="hk_2014.1.0-r1">
<hksection name="__data__">
<hkobject class="hkRootLevelContainer" name="#90" signature="0x2772c11e">
<hkparam name="namedVariants" numelements="5">
<hkobject>
<hkparam name="name">Merged Animation Container</hkparam>
<hkparam name="className">hkaAnimationContainer</hkparam>
<hkparam name="variant">#91</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">Physics Scene Data</hkparam>
<hkparam name="className">hknpPhysicsSceneData</hkparam>
<hkparam name="variant">#94</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">Physics Ragdoll</hkparam>
<hkparam name="className">hknpRagdollData</hkparam>
<hkparam name="variant">#95</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">SkeletonMapper</hkparam>
<hkparam name="className">hkaSkeletonMapper</hkparam>
<hkparam name="variant">#171</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">SkeletonMapper</hkparam>
<hkparam name="className">hkaSkeletonMapper</hkparam>
<hkparam name="variant">#172</hkparam>
</hkobject>
</hkparam>
</hkobject>
<..>

 



Mine in HCT "View XML":

 

<!-- hkRootLevelContainer @ 0x8ebb77c0 -->

<hkobject class="hkRootLevelContainer">
<hkparam name="namedVariants" numelements="5">
<hkobject>
<hkparam name="name">Animation Container</hkparam>
<hkparam name="className">hkaAnimationContainer</hkparam>
<hkparam name="variant">0xa1cf3320</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">SkeletonMapper</hkparam>
<hkparam name="className">hkaSkeletonMapper</hkparam>
<hkparam name="variant">0x39e41420</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">SkeletonMapper</hkparam>
<hkparam name="className">hkaSkeletonMapper</hkparam>
<hkparam name="variant">0x39e418a0</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">Physics Data</hkparam>
<hkparam name="className">hkpPhysicsData</hkparam>
<hkparam name="variant">0xa1d2c840</hkparam>
</hkobject>
<hkobject>
<hkparam name="name">RagdollInstance</hkparam>
<hkparam name="className">hkaRagdollInstance</hkparam>
<hkparam name="variant">0xa1d12960</hkparam>
</hkobject>
</hkparam>
</hkobject>
<...>

 




Mine in actual file:

 

<?xml version="1.0" encoding="ascii"?>
<hktagfile version="2" sdkversion="hk_2014.1.0-r1" maxpredicate="21" predicates="20">
<!-- hasRootLevelContainer, -->
<class name="hkRootLevelContainer" version="0">
<member name="namedVariants" type="struct" array="true" class="hkRootLevelContainerNamedVariant"/>
</class>
<class name="hkRootLevelContainerNamedVariant" version="1">
<member name="name" type="string"/>
<member name="className" type="string"/>
<member name="variant" type="ref" class="hkReferencedObject"/>
</class>
<class name="hkBaseObject" version="0">
</class>
<class name="hkReferencedObject" version="0" parent="hkBaseObject">
<member name="memSizeAndRefCount" type="void"/>
</class>
<class name="hkaAnimationContainer" version="1" parent="hkReferencedObject">
<member name="skeletons" type="ref" array="true" class="hkaSkeleton"/>
<member name="animations" type="ref" array="true" class="hkaAnimation"/>
<member name="bindings" type="ref" array="true" class="hkaAnimationBinding"/>
<member name="attachments" type="ref" array="true" class="hkaBoneAttachment"/>
<member name="skins" type="ref" array="true" class="hkaMeshBinding"/>
</class>
<class name="hkaSkeleton" version="5" parent="hkReferencedObject">
<member name="name" type="string"/>
<member name="parentIndices" type="int" array="true"/>
<member name="bones" type="struct" array="true" class="hkaBone"/>
<member name="referencePose" type="vec12" array="true"/>
<member name="referenceFloats" type="real" array="true"/>
<member name="floatSlots" type="string" array="true"/>
<member name="localFrames" type="struct" array="true" class="hkaSkeletonLocalFrameOnBone"/>
<member name="partitions" type="struct" array="true" class="hkaSkeletonPartition"/>
</class>
<class name="hkaBone" version="0">
<member name="name" type="string"/>
<member name="lockTranslation" type="byte"/>
</class>
<class name="hkaSkeletonLocalFrameOnBone" version="0">
<member name="localFrame" type="ref" class="hkLocalFrame"/>
<member name="boneIndex" type="int"/>
</class>
<class name="hkLocalFrame" version="0" parent="hkReferencedObject">
</class>
<class name="hkaSkeletonPartition" version="1">
<member name="name" type="string"/>
<member name="startBoneIndex" type="int"/>
<member name="numBones" type="int"/>
</class>
<class name="hkaAnimation" version="3" parent="hkReferencedObject">
<member name="type" type="int"/>
<member name="duration" type="real"/>
<member name="numberOfTransformTracks" type="int"/>
<member name="numberOfFloatTracks" type="int"/>
<member name="extractedMotion" type="ref" class="hkaAnimatedReferenceFrame"/>
<member name="annotationTracks" type="struct" array="true" class="hkaAnnotationTrack"/>
</class>
<class name="hkaAnimatedReferenceFrame" version="0" parent="hkReferencedObject">
<member name="frameType" type="void"/>
</class>
<class name="hkaAnnotationTrack" version="0">
<member name="trackName" type="string"/>
<member name="annotations" type="struct" array="true" class="hkaAnnotationTrackAnnotation"/>
</class>
<class name="hkaAnnotationTrackAnnotation" version="0">
<member name="time" type="real"/>
<member name="text" type="string"/>
</class>
<class name="hkaAnimationBinding" version="3" parent="hkReferencedObject">
<member name="originalSkeletonName" type="string"/>
<member name="animation" type="ref" class="hkaAnimation"/>
<member name="transformTrackToBoneIndices" type="int" array="true"/>
<member name="floatTrackToFloatSlotIndices" type="int" array="true"/>
<member name="partitionIndices" type="int" array="true"/>
<member name="blendHint" type="int"/>
</class>
<class name="hkaBoneAttachment" version="2" parent="hkReferencedObject">
<member name="originalSkeletonName" type="string"/>
<member name="boneFromAttachment" type="vec16"/>
<member name="attachment" type="ref" class="hkReferencedObject"/>
<member name="name" type="string"/>
<member name="boneIndex" type="int"/>
</class>
<class name="hkaMeshBinding" version="3" parent="hkReferencedObject">
<member name="mesh" type="ref" class="hkxMesh"/>
<member name="originalSkeletonName" type="string"/>
<member name="name" type="string"/>
<member name="skeleton" type="ref" class="hkaSkeleton"/>
<member name="mappings" type="struct" array="true" class="hkaMeshBindingMapping"/>
<member name="boneFromSkinMeshTransforms" type="vec16" array="true"/>
</class>
<class name="hkxMesh" version="1" parent="hkReferencedObject">
<member name="sections" type="ref" array="true" class="hkxMeshSection"/>
<member name="userChannelInfos" type="ref" array="true" class="hkxMeshUserChannelInfo"/>
</class>
<class name="hkxMeshSection" version="5" parent="hkReferencedObject">
<member name="vertexBuffer" type="ref" class="hkxVertexBuffer"/>
<member name="indexBuffers" type="ref" array="true" class="hkxIndexBuffer"/>
<member name="material" type="ref" class="hkxMaterial"/>
<member name="userChannels" type="ref" array="true" class="hkReferencedObject"/>
<member name="vertexAnimations" type="ref" array="true" class="hkxVertexAnimation"/>
<member name="linearKeyFrameHints" type="real" array="true"/>
<member name="boneMatrixMap" type="struct" array="true" class="hkMeshBoneIndexMapping"/>
</class>
<class name="hkxVertexBuffer" version="1" parent="hkReferencedObject">
<member name="data" type="struct" class="hkxVertexBufferVertexData"/>
<member name="desc" type="struct" class="hkxVertexDescription"/>
</class>
<class name="hkxVertexBufferVertexData" version="2">
<member name="vectorData" type="int" array="true"/>
<member name="floatData" type="int" array="true"/>
<member name="uint32Data" type="int" array="true"/>
<member name="uint16Data" type="int" array="true"/>
<member name="uint8Data" type="byte" array="true"/>
<member name="numVerts" type="int"/>
<member name="vectorStride" type="int"/>
<member name="floatStride" type="int"/>
<member name="uint32Stride" type="int"/>
<member name="uint16Stride" type="int"/>
<member name="uint8Stride" type="int"/>
</class>
<class name="hkxVertexDescription" version="1">
<member name="decls" type="struct" array="true" class="hkxVertexDescriptionElementDecl"/>
</class>
<class name="hkxVertexDescriptionElementDecl" version="4">
<member name="byteOffset" type="int"/>
<member name="type" type="int"/>
<member name="usage" type="int"/>
<member name="byteStride" type="int"/>
<member name="numElements" type="byte"/>
<member name="channelID" type="string"/>
</class>
<class name="hkxIndexBuffer" version="1" parent="hkReferencedObject">
<member name="indexType" type="int"/>
<member name="indices16" type="int" array="true"/>
<member name="indices32" type="int" array="true"/>
<member name="vertexBaseOffset" type="int"/>
<member name="length" type="int"/>
</class>
<class name="hkxAttributeHolder" version="2" parent="hkReferencedObject">
<member name="attributeGroups" type="struct" array="true" class="hkxAttributeGroup"/>
</class>
<class name="hkxAttributeGroup" version="0">
<member name="name" type="string"/>
<member name="attributes" type="struct" array="true" class="hkxAttribute"/>
</class>
<class name="hkxAttribute" version="1">
<member name="name" type="string"/>
<member name="value" type="ref" class="hkReferencedObject"/>
</class>
<class name="hkxMaterial" version="5" parent="hkxAttributeHolder">
<member name="name" type="string"/>
<member name="stages" type="struct" array="true" class="hkxMaterialTextureStage"/>
<member name="diffuseColor" type="vec4"/>
<member name="ambientColor" type="vec4"/>
<member name="specularColor" type="vec4"/>
<member name="emissiveColor" type="vec4"/>
<member name="subMaterials" type="ref" array="true" class="hkxMaterial"/>
<member name="extraData" type="ref" class="hkReferencedObject"/>
<member name="uvMapScale" type="real" count="2"/>
<member name="uvMapOffset" type="real" count="2"/>
<member name="uvMapRotation" type="real"/>
<member name="uvMapAlgorithm" type="int"/>
<member name="specularMultiplier" type="real"/>
<member name="specularExponent" type="real"/>
<member name="transparency" type="byte"/>
<member name="userData" type="int"/>
<member name="properties" type="struct" array="true" class="hkxMaterialProperty"/>
</class>
<class name="hkxMaterialTextureStage" version="1">
<member name="texture" type="ref" class="hkReferencedObject"/>
<member name="usageHint" type="int"/>
<member name="tcoordChannel" type="int"/>
</class>
<class name="hkxMaterialProperty" version="0">
<member name="key" type="int"/>
<member name="value" type="int"/>
</class>
<class name="hkxVertexAnimation" version="0" parent="hkReferencedObject">
<member name="time" type="real"/>
<member name="vertData" type="struct" class="hkxVertexBuffer"/>
<member name="vertexIndexMap" type="int" array="true"/>
<member name="componentMap" type="struct" array="true" class="hkxVertexAnimationUsageMap"/>
</class>
<class name="hkxVertexAnimationUsageMap" version="0">
<member name="use" type="int"/>
<member name="useIndexOrig" type="byte"/>
<member name="useIndexLocal" type="byte"/>
</class>
<class name="hkMeshBoneIndexMapping" version="0">
<member name="mapping" type="int" array="true"/>
</class>
<class name="hkxMeshUserChannelInfo" version="0" parent="hkxAttributeHolder">
<member name="name" type="string"/>
<member name="className" type="string"/>
</class>
<class name="hkaMeshBindingMapping" version="0">
<member name="mapping" type="int" array="true"/>
</class>
<class name="hkaSkeletonMapper" version="0" parent="hkReferencedObject">
<member name="mapping" type="struct" class="hkaSkeletonMapperData"/>
</class>
<class name="hkaSkeletonMapperData" version="2">
<member name="skeletonA" type="ref" class="hkaSkeleton"/>
<member name="skeletonB" type="ref" class="hkaSkeleton"/>
<member name="partitionMap" type="int" array="true"/>
<member name="simpleMappingPartitionRanges" type="struct" array="true" class="hkaSkeletonMapperDataPartitionMappingRange"/>
<member name="chainMappingPartitionRanges" type="struct" array="true" class="hkaSkeletonMapperDataPartitionMappingRange"/>
<member name="simpleMappings" type="struct" array="true" class="hkaSkeletonMapperDataSimpleMapping"/>
<member name="chainMappings" type="struct" array="true" class="hkaSkeletonMapperDataChainMapping"/>
<member name="unmappedBones" type="int" array="true"/>
<member name="extractedMotionMapping" type="vec12"/>
<member name="keepUnmappedLocal" type="byte"/>
<member name="mappingType" type="int"/>
</class>
<class name="hkaSkeletonMapperDataPartitionMappingRange" version="0">
<member name="startMappingIndex" type="int"/>
<member name="numMappings" type="int"/>
</class>
<class name="hkaSkeletonMapperDataSimpleMapping" version="0">
<member name="boneA" type="int"/>
<member name="boneB" type="int"/>
<member name="aFromBTransform" type="vec12"/>
</class>
<class name="hkaSkeletonMapperDataChainMapping" version="0">
<member name="startBoneA" type="int"/>
<member name="endBoneA" type="int"/>
<member name="startBoneB" type="int"/>
<member name="endBoneB" type="int"/>
<member name="startAFromBTransform" type="vec12"/>
<member name="endAFromBTransform" type="vec12"/>
</class>
<class name="hkpPhysicsData" version="0" parent="hkReferencedObject">
<member name="worldCinfo" type="ref" class="hkpWorldCinfo"/>
<member name="systems" type="ref" array="true" class="hkpPhysicsSystem"/>
</class>
<class name="hkpWorldCinfo" version="18" parent="hkReferencedObject">
<member name="gravity" type="vec4"/>
<member name="broadPhaseQuerySize" type="int"/>
<member name="contactRestingVelocity" type="real"/>
<member name="broadPhaseType" type="int"/>
<member name="broadPhaseBorderBehaviour" type="int"/>
<member name="mtPostponeAndSortBroadPhaseBorderCallbacks" type="byte"/>
<member name="broadPhaseWorldAabb" type="struct" class="hkAabb"/>
<member name="collisionTolerance" type="real"/>
<member name="collisionFilter" type="ref" class="hkpCollisionFilter"/>
<member name="convexListFilter" type="ref" class="hkpConvexListFilter"/>
<member name="expectedMaxLinearVelocity" type="real"/>
<member name="sizeOfToiEventQueue" type="int"/>
<member name="expectedMinPsiDeltaTime" type="real"/>
<member name="memoryWatchDog" type="ref" class="hkWorldMemoryAvailableWatchDog"/>
<member name="broadPhaseNumMarkers" type="int"/>
<member name="contactPointGeneration" type="int"/>
<member name="allowToSkipConfirmedCallbacks" type="byte"/>
<member name="solverTau" type="real"/>
<member name="solverDamp" type="real"/>
<member name="solverIterations" type="int"/>
<member name="solverMicrosteps" type="int"/>
<member name="maxConstraintViolation" type="real"/>
<member name="forceCoherentConstraintOrderingInSolver" type="byte"/>
<member name="snapCollisionToConvexEdgeThreshold" type="real"/>
<member name="snapCollisionToConcaveEdgeThreshold" type="real"/>
<member name="enableToiWeldRejection" type="byte"/>
<member name="enableDeprecatedWelding" type="byte"/>
<member name="iterativeLinearCastEarlyOutDistance" type="real"/>
<member name="iterativeLinearCastMaxIterations" type="int"/>
<member name="deactivationNumInactiveFramesSelectFlag0" type="byte"/>
<member name="deactivationNumInactiveFramesSelectFlag1" type="byte"/>
<member name="deactivationIntegrateCounter" type="byte"/>
<member name="shouldActivateOnRigidBodyTransformChange" type="byte"/>
<member name="deactivationReferenceDistance" type="real"/>
<member name="toiCollisionResponseRotateNormal" type="real"/>
<member name="useCompoundSpuElf" type="byte"/>
<member name="maxSectorsPerMidphaseCollideTask" type="int"/>
<member name="maxSectorsPerNarrowphaseCollideTask" type="int"/>
<member name="processToisMultithreaded" type="byte"/>
<member name="maxEntriesPerToiMidphaseCollideTask" type="int"/>
<member name="maxEntriesPerToiNarrowphaseCollideTask" type="int"/>
<member name="maxNumToiCollisionPairsSinglethreaded" type="int"/>
<member name="numToisTillAllowedPenetrationSimplifiedToi" type="real"/>
<member name="numToisTillAllowedPenetrationToi" type="real"/>
<member name="numToisTillAllowedPenetrationToiHigher" type="real"/>
<member name="numToisTillAllowedPenetrationToiForced" type="real"/>
<member name="enableDeactivation" type="byte"/>
<member name="simulationType" type="int"/>
<member name="enableSimulationIslands" type="byte"/>
<member name="minDesiredIslandSize" type="int"/>
<member name="processActionsInSingleThread" type="byte"/>
<member name="allowIntegrationOfIslandsWithoutConstraintsInASeparateJob" type="byte"/>
<member name="frameMarkerPsiSnap" type="real"/>
<member name="fireCollisionCallbacks" type="byte"/>
</class>
<class name="hkAabb" version="0">
<member name="min" type="vec4"/>
<member name="max" type="vec4"/>
</class>
<class name="hkpCollisionFilter" version="0" parent="hkReferencedObject">
<member name="prepad" type="int" count="2"/>
<member name="type" type="int"/>
<member name="postpad" type="int" count="3"/>
</class>
<class name="hkpConvexListFilter" version="0" parent="hkReferencedObject">
</class>
<class name="hkWorldMemoryAvailableWatchDog" version="1" parent="hkReferencedObject">
</class>
<class name="hkpPhysicsSystem" version="0" parent="hkReferencedObject">
<member name="rigidBodies" type="ref" array="true" class="hkpRigidBody"/>
<member name="constraints" type="ref" array="true" class="hkpConstraintInstance"/>
<member name="actions" type="ref" array="true" class="hkpAction"/>
<member name="phantoms" type="ref" array="true" class="hkpPhantom"/>
<member name="name" type="string"/>
<member name="userData" type="int"/>
<member name="active" type="byte"/>
</class>
<class name="hkpWorldObject" version="0" parent="hkReferencedObject">
<member name="world" type="void"/>
<member name="userData" type="int"/>
<member name="collidable" type="struct" class="hkpLinkedCollidable"/>
<member name="multiThreadCheck" type="struct" class="hkMultiThreadCheck"/>
<member name="name" type="string"/>
<member name="properties" type="struct" array="true" class="hkSimpleProperty"/>
</class>
<class name="hkpCdBody" version="1">
<member name="shape" type="ref" class="hkpShape"/>
<member name="shapeKey" type="int"/>
<member name="motion" type="void"/>
<member name="parent" type="void"/>
</class>
<class name="hkcdShape" version="0" parent="hkReferencedObject">
<member name="type" type="void"/>
<member name="dispatchType" type="byte"/>
<member name="bitsPerKey" type="byte"/>
<member name="shapeInfoCodecType" type="byte"/>
</class>
<class name="hkpShapeBase" version="0" parent="hkcdShape">
</class>
<class name="hkpShape" version="1" parent="hkpShapeBase">
<member name="userData" type="int"/>
</class>
<class name="hkpCollidable" version="0" parent="hkpCdBody">
<member name="ownerOffset" type="void"/>
<member name="forceCollideOntoPpu" type="byte"/>
<member name="shapeSizeOnSpu" type="void"/>
<member name="broadPhaseHandle" type="struct" class="hkpTypedBroadPhaseHandle"/>
<member name="boundingVolumeData" type="void"/>
<member name="allowedPenetrationDepth" type="real"/>
</class>
<class name="hkpBroadPhaseHandle" version="0">
<member name="id" type="void"/>
</class>
<class name="hkpTypedBroadPhaseHandle" version="0" parent="hkpBroadPhaseHandle">
<member name="type" type="int"/>
<member name="ownerOffset" type="void"/>
<member name="objectQualityType" type="int"/>
<member name="collisionFilterInfo" type="int"/>
</class>
<class name="hkpLinkedCollidable" version="0" parent="hkpCollidable">
<member name="collisionEntries" type="void"/>
</class>
<class name="hkMultiThreadCheck" version="0">
<member name="threadId" type="void"/>
<member name="stackTraceId" type="void"/>
<member name="markCount" type="void"/>
<member name="markBitStack" type="void"/>
</class>
<class name="hkSimpleProperty" version="2">
<member name="key" type="int"/>
<member name="alignmentPadding" type="void"/>
<member name="value" type="struct" class="hkSimplePropertyValue"/>
</class>
<class name="hkSimplePropertyValue" version="1">
<member name="data" type="int"/>
</class>
<class name="hkpEntity" version="3" parent="hkpWorldObject">
<member name="material" type="struct" class="hkpMaterial"/>
<member name="limitContactImpulseUtilAndFlag" type="void"/>
<member name="damageMultiplier" type="real"/>
<member name="breakableBody" type="void"/>
<member name="solverData" type="void"/>
<member name="storageIndex" type="int"/>
<member name="contactPointCallbackDelay" type="int"/>
<member name="constraintsMaster" type="void"/>
<member name="constraintsSlave" type="void"/>
<member name="constraintRuntime" type="void"/>
<member name="simulationIsland" type="void"/>
<member name="autoRemoveLevel" type="int"/>
<member name="numShapeKeysInContactPointProperties" type="byte"/>
<member name="responseModifierFlags" type="byte"/>
<member name="uid" type="int"/>
<member name="spuCollisionCallback" type="struct" class="hkpEntitySpuCollisionCallback"/>
<member name="motion" type="struct" class="hkpMotion"/>
<member name="contactListeners" type="void"/>
<member name="actions" type="void"/>
<member name="localFrame" type="ref" class="hkLocalFrame"/>
<member name="extendedListeners" type="void"/>
<member name="npData" type="int"/>
</class>
<class name="hkpMaterial" version="2">
<member name="responseType" type="int"/>
<member name="rollingFrictionMultiplier" type="real"/>
<member name="friction" type="real"/>
<member name="restitution" type="real"/>
</class>
<class name="hkpEntitySpuCollisionCallback" version="0">
<member name="util" type="void"/>
<member name="capacity" type="void"/>
<member name="eventFilter" type="byte"/>
<member name="userFilter" type="byte"/>
</class>
<class name="hkpMotion" version="3" parent="hkReferencedObject">
<member name="type" type="byte"/>
<member name="deactivationIntegrateCounter" type="byte"/>
<member name="deactivationNumInactiveFrames" type="int" count="2"/>
<member name="motionState" type="struct" class="hkMotionState"/>
<member name="inertiaAndMassInv" type="vec4"/>
<member name="linearVelocity" type="vec4"/>
<member name="angularVelocity" type="vec4"/>
<member name="deactivationRefPosition" type="vec4" count="2"/>
<member name="deactivationRefOrientation" type="int" count="2"/>
<member name="savedMotion" type="ref" class="hkpMotion"/>
<member name="savedQualityTypeIndex" type="int"/>
<member name="gravityFactor" type="real"/>
</class>
<class name="hkMotionState" version="3">
<member name="transform" type="vec16"/>
<member name="sweptTransform" type="vec4" count="5"/>
<member name="deltaAngle" type="vec4"/>
<member name="objectRadius" type="real"/>
<member name="linearDamping" type="real"/>
<member name="angularDamping" type="real"/>
<member name="timeFactor" type="real"/>
<member name="maxLinearVelocity" type="struct" class="hkUFloat8"/>
<member name="maxAngularVelocity" type="struct" class="hkUFloat8"/>
<member name="deactivationClass" type="byte"/>
</class>
<class name="hkUFloat8" version="0">
<member name="value" type="byte"/>
</class>
<class name="hkpRigidBody" version="0" parent="hkpEntity">
</class>
<class name="hkpConstraintInstance" version="1" parent="hkReferencedObject">
<member name="owner" type="void"/>
<member name="data" type="ref" class="hkpConstraintData"/>
<member name="constraintModifiers" type="ref" class="hkpModifierConstraintAtom"/>
<member name="entities" type="ref" count="2" class="hkpEntity"/>
<member name="priority" type="byte"/>
<member name="wantRuntime" type="byte"/>
<member name="destructionRemapInfo" type="byte"/>
<member name="listeners" type="void"/>
<member name="name" type="string"/>
<member name="userData" type="int"/>
<member name="internal" type="void"/>
<member name="uid" type="void"/>
</class>
<class name="hkpConstraintData" version="0" parent="hkReferencedObject">
<member name="userData" type="int"/>
</class>
<class name="hkpConstraintAtom" version="0">
<member name="type" type="int"/>
</class>
<class name="hkpModifierConstraintAtom" version="1" parent="hkpConstraintAtom">
<member name="modifierAtomSize" type="int"/>
<member name="childSize" type="int"/>
<member name="child" type="ref" class="hkpConstraintAtom"/>
<member name="pad" type="void"/>
</class>
<class name="hkpAction" version="0" parent="hkReferencedObject">
<member name="world" type="void"/>
<member name="island" type="void"/>
<member name="userData" type="int"/>
<member name="name" type="string"/>
</class>
<class name="hkpPhantom" version="0" parent="hkpWorldObject">
<member name="overlapListeners" type="void"/>
<member name="phantomListeners" type="void"/>
</class>
<class name="hkpSphereRepShape" version="0" parent="hkpShape">
</class>
<class name="hkpConvexShape" version="0" parent="hkpSphereRepShape">
<member name="radius" type="real"/>
</class>
<class name="hkpCapsuleShape" version="0" parent="hkpConvexShape">
<member name="vertexA" type="vec4"/>
<member name="vertexB" type="vec4"/>
</class>
<class name="hkpRagdollConstraintData" version="0" parent="hkpConstraintData">
<member name="atoms" type="struct" class="hkpRagdollConstraintDataAtoms"/>
</class>
<class name="hkpRagdollConstraintDataAtoms" version="1">
<member name="transforms" type="struct" class="hkpSetLocalTransformsConstraintAtom"/>
<member name="setupStabilization" type="struct" class="hkpSetupStabilizationAtom"/>
<member name="ragdollMotors" type="struct" class="hkpRagdollMotorConstraintAtom"/>
<member name="angFriction" type="struct" class="hkpAngFrictionConstraintAtom"/>
<member name="twistLimit" type="struct" class="hkpTwistLimitConstraintAtom"/>
<member name="coneLimit" type="struct" class="hkpConeLimitConstraintAtom"/>
<member name="planesLimit" type="struct" class="hkpConeLimitConstraintAtom"/>
<member name="ballSocket" type="struct" class="hkpBallSocketConstraintAtom"/>
</class>
<class name="hkpSetLocalTransformsConstraintAtom" version="0" parent="hkpConstraintAtom">
<member name="transformA" type="vec16"/>
<member name="transformB" type="vec16"/>
</class>
<class name="hkpSetupStabilizationAtom" version="3" parent="hkpConstraintAtom">
<member name="enabled" type="byte"/>
<member name="padding" type="void"/>
<member name="maxLinImpulse" type="real"/>
<member name="maxAngImpulse" type="real"/>
<member name="maxAngle" type="real"/>
</class>
<class name="hkpRagdollMotorConstraintAtom" version="1" parent="hkpConstraintAtom">
<member name="isEnabled" type="byte"/>
<member name="initializedOffset" type="void"/>
<member name="previousTargetAnglesOffset" type="void"/>
<member name="target_bRca" type="vec12"/>
<member name="motors" type="ref" count="3" class="hkpConstraintMotor"/>
</class>
<class name="hkpConstraintMotor" version="0" parent="hkReferencedObject">
<member name="type" type="int"/>
</class>
<class name="hkpAngFrictionConstraintAtom" version="0" parent="hkpConstraintAtom">
<member name="isEnabled" type="byte"/>
<member name="firstFrictionAxis" type="byte"/>
<member name="numFrictionAxes" type="byte"/>
<member name="maxFrictionTorque" type="real"/>
<member name="padding" type="void"/>
</class>
<class name="hkpTwistLimitConstraintAtom" version="0" parent="hkpConstraintAtom">
<member name="isEnabled" type="byte"/>
<member name="twistAxis" type="byte"/>
<member name="refAxis" type="byte"/>
<member name="minAngle" type="real"/>
<member name="maxAngle" type="real"/>
<member name="angularLimitsTauFactor" type="real"/>
<member name="padding" type="void"/>
</class>
<class name="hkpConeLimitConstraintAtom" version="0" parent="hkpConstraintAtom">
<member name="isEnabled" type="byte"/>
<member name="twistAxisInA" type="byte"/>
<member name="refAxisInB" type="byte"/>
<member name="angleMeasurementMode" type="byte"/>
<member name="memOffsetToAngleOffset" type="byte"/>
<member name="minAngle" type="real"/>
<member name="maxAngle" type="real"/>
<member name="angularLimitsTauFactor" type="real"/>
<member name="padding" type="void"/>
</class>
<class name="hkpBallSocketConstraintAtom" version="5" parent="hkpConstraintAtom">
<member name="solvingMethod" type="byte"/>
<member name="bodiesToNotify" type="byte"/>
<member name="velocityStabilizationFactor" type="struct" class="hkUFloat8"/>
<member name="enableLinearImpulseLimit" type="byte"/>
<member name="breachImpulse" type="real"/>
<member name="inertiaStabilizationFactor" type="real"/>
</class>
<class name="hkaRagdollInstance" version="0" parent="hkReferencedObject">
<member name="rigidBodies" type="ref" array="true" class="hkpRigidBody"/>
<member name="constraints" type="ref" array="true" class="hkpConstraintInstance"/>
<member name="boneToRigidBodyMap" type="int" array="true"/>
<member name="skeleton" type="ref" class="hkaSkeleton"/>
</class>
<class name="hkpLimitedForceConstraintMotor" version="0" parent="hkpConstraintMotor">
<member name="minForce" type="real"/>
<member name="maxForce" type="real"/>
</class>
<class name="hkpPositionConstraintMotor" version="0" parent="hkpLimitedForceConstraintMotor">
<member name="tau" type="real"/>
<member name="damping" type="real"/>
<member name="proportionalRecoveryVelocity" type="real"/>
<member name="constantRecoveryVelocity" type="real"/>
</class>

<object id="#0001" type="hkRootLevelContainer">
<array name="namedVariants" size="5">
<struct>
<string name="name">Animation Container</string>
<string name="className">hkaAnimationContainer</string>
<ref name="variant">#0002</ref>
</struct>
<struct>
<string name="name">SkeletonMapper</string>
<string name="className">hkaSkeletonMapper</string>
<ref name="variant">#0005</ref>
</struct>
<struct>
<string name="name">SkeletonMapper</string>
<string name="className">hkaSkeletonMapper</string>
<ref name="variant">#0006</ref>
</struct>
<struct>
<string name="name">Physics Data</string>
<string name="className">hkpPhysicsData</string>
<ref name="variant">#0007</ref>
</struct>
<struct>
<string name="name">RagdollInstance</string>
<string name="className">hkaRagdollInstance</string>
<ref name="variant">#0079</ref>
</struct>
</array>
</object>
<object id="#0002" type="hkaAnimationContainer">
<array name="skeletons" size="2">
<ref>#0003</ref>
<ref>#0004</ref>
</array>
</object>
<object id="#0003" type="hkaSkeleton">
<string name="name">Root</string>
<array name="parentIndices" size="101">
-1 0 1 2 3 4 2 6
7 1 9 10 11 12 11 14
15 16 17 18 11 20 21 22
23 18 24 19 26 28 28 28
28 28 33 33 33 33 33 28
28 28 15 42 21 44 5 8
19 48 49 19 51 52 19 54
55 19 57 58 19 60 61 26
63 64 26 66 67 26 69 70
26 72 73 26 75 76 0 0
0 0 28 27 28 27 19 19
19 26 26 26 11 11 0 2
95 96 97 98 95
</array>

 




Here is link to those files. Orig = original.
https://drive.google.com/open?id=0B5g2Zgp1XHU1RmNKSDFKWTg2Zlk

So, my new skeleton.hkx can't be converted using HKXPack but Merges in fine in HCT. But original skeleton file is converted easily with HKXPack into xml, but it crashes HCT when I try to Merge it.

wtf is going on. It looks like hct version is the same, so that's probably not an issue. huh...

 

Maybe someone can see what's going on here

Link to comment

The price for 3ds max right now is quite fair. It could be less, but still. You only pay 185$ a month (122$\mo if you subscribe for 1 year), when using it you can earn about 1500-5000$ a month, depending on your skill and opportunities, etc.

 

And still, there are always ways to obtain such software through means which we are not allowed to discuss here.

 

LOL call me old fashioned, though I believe in buying something, you own it, leasing a program is not my thing,  i am also to old for uni.. lol and just a general gamer which is good because i am seeing tutorials on blender on youtube more, still a little confused with the interface and some menu items not showing up, though i decided to try makehuman and transfer over to Blender, as well as opening the fallout 4 animation kit... the skeleton and body loads in Blender, its just confusing with the joints and i cant get into xray mode under display.. Hence, the start of my learning curve....

 

lol

Link to comment
Guest kimbale

 

Goodamn, Shade, stop being such a professional.  :P

 

 

Can't help it :D But what do you mean? I mean I'm not sure which post you're referring to.

 

 

 

Well, even if there are some animators who do make money with their animations doing modding stuff, they seldomly do groundwork as thorough as you do. It's just a exponential boost to the whole community that most mod users will never (be able to) appreciate.

I mean, srsly, a mocap workflow before beth even finishes it's DLCs? People pay tons of money for half-done assets for game engines that do this. And well, here we have someone who knows his shit and likes to invest the time. ;)

 

 

 

And please try to not spam stuff into the skeleton anymore, it was horrible with Skyrim.

 

 

Hmm, and what do you mean 'anymore' - compared to Skyrim? Like you say that we don't need to extend the skeleton with additional bones or what?

 

 

HOPE that we don't end up with 200+ bones of which ~90% isn't even used 99% of the time. And which have to be set up all over again if someone somewhere makes something new. The skeleton stuff in skyrim broke stuff left and right and a lot of backtracking needed to be done to get things to work again. Feature creep sucks.

I don't know how FO4 handles skeletal stuff, but Skyrim just nonchalantly CTD'd on any discrepancy there. 

 

 

Has anyone tryed animating "additional" bones, ie goggles or dress stuff? With the subgraphs etc it may very well just be a matter of throwing it in there. ^^

Not yet, I don't know how to get it into the game and which assets to test this on. If you tell me what assets to try and animate and what files you need on export - I can make a test animation for you to.. well, test in the game  :)

 

Or you can tell me how to test it myself, though it may take longer

 

Sturgess outfit and the bathrobes have additional bones - they're (used as) Cloth nodes though. I'll try around with chopping .nifs, if stuff just CTDs we at least know that. ^^ I think we need to figure out how to make rig files for these things, it may be a good angle to start too.

 

 

I guess to create new skeleton, all custom joints have to be exported into nif but added manually into the skeleton.hkx (through xml editing). Because there is a lot of data that we can't still import into max, and it will be lost on import\export whatever. Like ragdoll data. We could, theoretically, create our own brand new ragdoll with HCT, but I don't think it's a good idea. Or is it? We could then add boner into the ragdoll :D But I had no luck yet trying to set up HCT to export ragdoll, need to test it still.

Have you looked at these mods? Invalidfate added custom bones and stuff, although it's for physics stuff. My uneducated guess would be that adding simple skin/bone needs less data/is easier to do. It needs oldschool text EDIT: hex editing currently afaik, but someone might want to streamline things... *WINK WINK*

 

The approach with subanims seems easier on the tech side for me, because we don't need to mess with original skeleton and it's xml code. But I can't test it myself, because I guess we'll need to use CK for it, and I have no experience with CK or Papyrus. Atm I don't have time to learn it either.

 

For all i know these things aren't done with the CK. The NIFs contain all the data, though FO4 stuff seems to have some additional files that are linked to the NIF. Clothing with extra cloth data has these SSF files in the folders, i haven't picked the NIFs apart to see if i can find references in there. It could also be that the engine just loads those extra things if the NIF needs them - just a wild guess though, going by the fact that FO4 does not crash on missing assets, but just uses fallback/placeholders.

 

 

But I'm also just thinking out loud yet.

We all do. It's what makes modding fun. ;)

 

EDIT2:

 

I found this thread containing jonwd7 and a beth dev discussing file formats etc: https://community.bethesda.net/thread/6101?start=0&tstart=0

 

And there's this post on the niftools forums: http://niftools.sourceforge.net/forum/viewtopic.php?f=1&t=6288&p=31851&hilit=ssf#p31851

 

Other than that my research has been unfruitful, i may have gone off on a tangent b/c of those ssf files though...

 

EDIT3: Oh god, it seems this needs max 2013... *pukes* Seems that the beth nif plugin is the only way to get something usable without doing hardcore reverse engineering, though HCT already did a lot with that (afaik it's the same stuff as it was in skyrim).

 

 

 

EDIT4: ...ssf files are plain text bone deltas. I'm too ill for this shit...  <_<

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • 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