8 posts / 0 new
Last post
aerisarn
aerisarn's picture
Contributor
Offline
Last seen: 2 days 12 hours ago
Joined: 01/10/2013 - 06:50
Karma: 175
Blog post - December 2016

THE ANIMATION QUEST

By Aerisarn and CuteZergling

 

Animation is about creating the illusion of life. And you can't create it if you don't have one.

Brad Bird

 

As all of you can imagine, creating animations for skywind is a real challenging task. The modern Skyrim engine allows for much more than Morrowind’s one was intended to, and making real reinterpretations of the original creatures and game mechanics is both an artistic challenge, for what, if you follow our blog, we’re definitely well equipped, and a technical one, particularly so due to the fact that authoring new content for the skyrim engine was mainly intended for 3d assets and quests, not for animations and whole new creatures.

When I was assigned with the task of modifying the cliff racer behavior, at first I nearly fainted: there were no examples, no documentation, not a simple entry point: How am I supposed to do such a thing without any direction available? It reminded me of some ancient times when I was a kid playing EOB2 (a dungeon game without automapping), for the sole purpose of enjoying the game dynamic itself: try, fail, try harder. And so I did.

 

This blog post is about the skywind animation team’s journey into the skyrim engine:  to explore strange new worlds, to seek out new life and new animations, to boldly go where no modder has gone before. As we were trying to bend the engine to our will using strange and complicated techniques, we technical artists were called wizards.

1. The Skeleton Mystery:

Any animated object, creature or placeable, has to be animated defining a set of moving bones which actually performs the movements, being coupled (skinned) to the related mesh. Sadly, no tool was available to us poor modders to do a new skeleton in a sane way: most modders just resort to skeleton morphs (just original bones scaled as less as possible due to animations going nuts). T’was our task to do such a thing, in order to make new creatures truly feasible: after a lot of headaches, a new NIF plugin was born that ensure rapid skeleton prototyping. Here’s a sample:


 

2. The Ragdoll Havo(k)c Horror:


 

 

 

Skeletal animation is nice, but skywind’s engine allows for much much more: a second skeleton, coupled with a simple version of the creature mesh, to calculate real time moving collisions and physics reaction. Ragdoll, for short, is a physical representation of rigid bodies interconnected by contraints: all that jazz, all that math. Sadly, once again NIF plugin wasn’t up to the task: while able to import collisions, it was never intended to represent the data needed to express, for example, how much the leg is able to rotate with respect to the hip. This time was not just about fixing the output from Max, but creating a whole new import/export routine to add this data to the bone skeleton, and then be able to export it both in the NIF and the HKX format; yes, to make things simpler, Beth decided to replicate this data in both its Gamebyro file format and Havok proprietary format. But Skywind won’t bend to difficulties, and once again, after a LOT of trial and error which made us feel like we were coding our way out of an old haunted house, we were successful. Behold the Cliff Racer ragdoll, in all its glory.

 

 

3. To Be is to Behave:


 

 

 

In our journey into the undocumented, we reached the point where the animations have to be glued together to the game logic to make the creature move, attack, ando so on. The skyrim engine use the Havok Behavior middleware to decouple game logic from animation logic, and these behaviors have posed quite the challenge to us wizards and to the community at large, testing our every drop of patience and resolve trying to understand how they are defined and how they work. Behaviors are, simply put, a collection finite machines that govern which animation will be played at a given time or event. Since no tools or documentation has been provided by Bethesda regarding how animations actually work in Skyrim, we had no other choice but to reverse engineer our way into the Havok project files, relying on trial and error and Hansel & Gretel tactics.

The problem with the behavior files was that they were compressed into an unreadable/ unintelligible Win32 binary format, so we were forced to convert those to XML, a format that is much more understandable in comparison. After conversion though, editing the behavior files manually posed a great risk of error ( a behavior XML file easily goes over 2K lines), that’s why Aerisarn, the master wizard, wrote a library in Java that was specifically designed to navigate, edit and view the tree in the XML file with ease and eliminated all worry of error … at least from editing the tree part. Working with behaviors, and coding in general for that matter is summed up quite well by the Gif below.

Why? Because when something goes wrong, you don’t really know what causes it and when you finally fix it, other problems arise where previously there were none … and the cycle continues.

But, creating behaviors for custom races, in essence, isn’t that complicated: we base our new creature on an existing Skyrim skeleton / behavior and then add or remove certain animations from the behavior file. That’s how our Guar was born; even if not perfect, we successfully edited an existing behavior to make the puppy behave (almost as intended).

 

 

 

That was not enough for our artists: some of the creatures we need require not only a custom skeleton, but a custom behavior as well; that’s why our research team went further and adapted the output of an old version of the Havok Behavior tool to Skyrim, to accommodate for completely new behaviors as well.

 

 

With such tool in our hands, we felt like our journey was complete, but…

4. Did we miss something?

 

 

 

 

If you’re an animator, or simply searched the depths of the net about new animations in skywind, you surely found out the problem: where is the movement data in skyrim’s animations? Using the famous hkx-cmd, the data is (almost) missing.

After much pain, we discovered that the data is… Elsweyr.

Bethesda surely rushed over the commercialization of the game enough to leave some things in disarray, animations particularly so. In the last months of 2016, we solved this mystery too, and we were able to test a creature from scratch, without the need of additional help like SKSE, FNIS or such.



 

...and what now?

2017 will be a very exciting year for our department; our wizards are working tirelessly to give animators a leaner workflow and to change the way the game itself is played, acting on the player behavior. We have now the means to innovate as much as possible the gaming experience and insert all kinds of contents, and we are very determined to do so.

 

We leave you with a little clip. Happy New Year, folks :)

 

Edited by: Cesare on 01/01/2017 - 09:15
Corpus X
Corpus X's picture
Moderator
Offline
Last seen: 2 months 3 weeks ago
Joined: 09/13/2015 - 00:23
Karma: 134
Well done! Bravo! Here here!

Well done! Bravo! Here here! Good show!

Ludantes
Ludantes's picture
Member
Offline
Last seen: 3 months 4 weeks ago
Joined: 02/29/2016 - 12:20
Karma: 11
Thanks, now I have an

Thanks, now I have an headache

Anyway, impressive work done/to do

cheers!

SunlitSabre
SunlitSabre's picture
Offline
Last seen: 2 months 3 weeks ago
Joined: 06/06/2016 - 12:44
Karma: 4
Out of curiosity...

Out of curiosity...

When you guys are creating a new creature from scratch and there isn't a similar creature in the Skyrim files that has behaviors you can use, do you create entirely new behaviors, or are you piecing together behaviors from other creatures to get the intended result?

I ask because I see that you used almost all of the dragon behaviors for the cliff racer (pretty cool), even though they're very different creatures.

Modest_Mike
Modest_Mike's picture
Contributor
Offline
Last seen: 1 month 2 weeks ago
Joined: 02/13/2017 - 23:26
Karma: 3
That cliff racer seems pretty

That cliff racer seems pretty large from what I remember! ;D

Is it more than a reskin of the dragon at the time of recording? And is the model finalized?

*Not trying to be critical, simply curious*

aerisarn
aerisarn's picture
Contributor
Offline
Last seen: 2 days 12 hours ago
Joined: 01/10/2013 - 06:50
Karma: 175
We have the tech to create

We have the tech to create creatures from scratch but we keep them at a minimum because it requires a lot of animation manpower we don't currently have. Yes, the cliffracer uses the dragon as a base but with a heavily modified behavior. It's still WIP, both mesh and behavior

shikyokira
shikyokira's picture
Offline
Last seen: 3 weeks 1 day ago
Joined: 04/05/2017 - 10:34
Karma: 1
just started dwelling into

just started dwelling into behavior and animation few months ago, but i have found out the animation's motion data and attack data. motion data is stored in meshes/animationdatasinglefile.txt. attack data is separated into few files tho. Adding new attack moves (not replacing old animation) can be done by changing those files. i have tested it but there are some limitations tho.

aerisarn
aerisarn's picture
Contributor
Offline
Last seen: 2 days 12 hours ago
Joined: 01/10/2013 - 06:50
Karma: 175
Yeah the movement and attack

Yeah the movement and attack data was easy to spot and took me at most a couple of days to write a parser to handle that (apart from some still obscure entries on the animsingledataset related to the player behavior on the events part). The real challenge was updating the nif plugin to make it work with the havok SDK to import/export ragdolls, due to most of that being undocumented and having to reverse (and adapt to MAX shitty pivot point API) the exact reference systems related to rigid bodies, centers of mass and constraints.

The other long part to solve was to write a parser on the behaviors, I don't know what you used to edit them for your dodge mod but having to do a creature from scratch means the need for a tool to handle a visual feedback, and without the Havok Behavior SDK for Programmers it's even impossible to handle the BS nodes inside the behavior, test the look at modifier and BSCyclicBlending generator, I really had to improvise on that. We're now testing a tool that directly post processes an HBT 6.6 project into a skyrim one and the next step would be to reverse the existing ones into the HBT 6.6 format (if we need it, it's probably just simpler to redo them in the tool as I did for the Silt Strider)

Even if I put my full faith in Zartar's tool, I had animators ready NOW and clearly unable/unwilling to go trough the lengths of doing/edit a behavior from scratch in XML, even if assisted with the various organizers available.

BTW, I'd love to chat a bit about the player behavior, if you join our Discord server