Torchmodders

Mod Projects => Kva3imoda's Playground => Topic started by: Kva3imoda on August 25, 2015, 01:14:56 am


Title: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 01:14:56 am
and changing the timing of each keyframe by hand
A couple of days ago, Abramoff made me (after I asked) a utility that does this automatically (all operations: *, /, +, -).  :) But this utility has no translation.
With it  I accelerated animations for embercopter flags.
Title: Re: Animation Keyframe Editing
Post by: Phanjam on August 25, 2015, 02:09:11 am
...a utility that does this automatically (all operations: *, /, +, -).  :)

Ooh! :P sounds nice. Use via command line?

(Sorry to go OT a bit Silver)
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 02:16:42 am
Ooh! :P sounds nice. Use via command line?
Nope.  :) It user-friendly. Now, I explained to him how we need this cool utility .
I wanted to share this, but waiting for the translation and some improvements.
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 02:41:26 am
Quote from: Phanjam
a keyframe editor
We called it Retimer.  :)
Title: Re: Animation Keyframe Editing
Post by: Phanjam on August 25, 2015, 02:50:12 am
The idea is very very cool!

Remember a discussion before about "cutting" an animation so you can get only the frames you need? Can this tool help with that?  ::) hehe
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 03:24:16 am
(http://i.imgur.com/eoFlNGRm.jpg) (http://i.imgur.com/eoFlNGR.jpg)

1. Convert your animation *.skeleton to *.skeleton.xml using OgreXmlConverter
2. [Open] *.skeleton.xml
3. Choose [Action] and [Value]
4. Press [Run]
5. Change "name=" (if necessary)
6. [Save] it as *.*.skeleton.xml (use a new name if necessary)
7. Convert *.*.skeleton.xml to *.skeleton

Download Retimer (https://yadi.sk/d/DJXB78XVieKd9)

All thanks to Abramoff.  :)


Remember a discussion before about "cutting" an animation so you can get only the frames you need? Can this tool help with that?  ::) hehe
Yes, of course I remember it and I thought about it. I think you can use the substraction operation and then remove unnecessary frames.
For example, the desired frame begins at 3.13 - this means it must be 0. Use the utility and subtract 3.13 and delete all frames below zero.
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 03:37:54 am
and then remove unnecessary frames.
I asked Abramoff and maybe we will do an automatic "Сutter".
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 03:53:36 am
You can use Retimer for animation inverting.  8)

For example, you have "Run" animation.
length="0.8"

Follow these steps:
1. [Action] = "-" ; [Value] = 0,8
2. [Run]
3. [Action] = "*" ; [Value] = -1
4. [Run]
5. Сhange length="0.8"(or not, if you removed the "length check" before)

Voila, you have inverted animation.  :)
Title: Re: Animation Keyframe Editing
Post by: Phanjam on August 25, 2015, 08:59:25 am
OMG this is SO COOL Kva! I am going to play with this on the weekend :D sadly that's the only time I'll have enough time >:(

Pls give Abramoff our thanks!
Title: Re: Animation Keyframe Editing
Post by: DeeZire on August 25, 2015, 03:16:22 pm
Now thats nice! Now we can make resurrection anims by inverting death anims ;)
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 03:38:44 pm
by inverting death anims ;)
Yeah, right, yesterday I did it for TL1 Elemental. It looks satisfactory.  :)
Title: Re: Animation Keyframe Editing
Post by: SilverNexus on August 25, 2015, 07:53:52 pm
Hmm... when I use this tool on the Bloatfang Boss's Special_Eat animation, I get an error saying
Code: [Select]
'0,16667' is not a valid floating point value.I set the Format Float to "0.######" (six pound signs instead of the default five) and tried * and / by 2 for the action. All attempts produced the same error.

When I searched the XML file (using Notepad++) for an instance of "0,", it failed to find any; the comma is likely arising somewhere in the code.

EDIT: The program crashes whenever it tries to handle a floating point number (somehow it seems to be converting decimals to commas).
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 25, 2015, 08:24:31 pm
You must use a point in  Format Float "0.######"
And a comma in Value.

Here there are some problems in the encodings in different languages. In Russia we always use a comma for Float.  :)

And you do not need more than 5# in Format Float. 0.00001 = 10 nanoseconds.  :)
Title: Re: Animation Keyframe Editing
Post by: SilverNexus on August 25, 2015, 08:52:38 pm
You must use a point in  Format Float "0.######"
...
And you do not need more than 5# in Format Float. 0.00001 = 10 nanoseconds.

Made sure it had a point there (it does). I only adjusted the float format to six places because the animation had six places, so I erroneously thought it might fix the error.

Here there are some problems in the encodings in different languages. In Russia we always use a comma for Float.

Ah. Assuming this is a C# program (it looks like it easily could be), there should be some locale settings that Microsoft provides that (theoretically) should prevent the need for hardcoded commas. I haven't used them ever, so I don't know how good they are, but I know they exist.
If its not a C# program (it doesn't appear to have a managed assembly, so I still don't know), there might be locale wrappers somewhere by someone, depending on the language used, but I know even less at that point.
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 26, 2015, 01:59:40 am
I get an error
Abramoff has updated the utility. We need a test.  :)

and maybe we will do an automatic "Сutter".
Done. This feature is added in Retimer.
Title: Re: Animation Keyframe Editing
Post by: Phanjam on August 26, 2015, 05:19:48 am
I get an error
Abramoff has updated the utility. We need a test.  :)

and maybe we will do an automatic "Сutter".
Done. This feature is added in Retimer.

Wow thanks Kva & Abramoff! Same DL link (https://yadi.sk/d/DJXB78XVieKd9)?
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 26, 2015, 11:47:30 am
Same DL link (https://yadi.sk/d/DJXB78XVieKd9)?
Yes, the same.
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 27, 2015, 01:23:53 am
(http://i.imgur.com/jQc4yyL.gif)

I did this trigger animation today in 10 minutes with Retimer. I use it for a lootable ponya corpse.
Title: Re: Animation Keyframe Editing
Post by: Phanjam on August 27, 2015, 01:36:43 am
A but you are not telling the whole story  :-\ you first had to make a ponya mesh where he is lying down! Then did you have to make a new .skeleton first or did it export with the mesh?  :D
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 27, 2015, 01:46:28 am
you first had to make a ponya mesh where he is lying down! Then did you have to make a new .skeleton first or did it export with the mesh?  :D
Well, you do not need a mesh/skeleton with this pose, all this makes the animation in frame 0.
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 27, 2015, 01:49:04 am
Here's how it's done:

https://drive.google.com/file/d/0BwZNatjl1ZmpdkxwTWhJdmVjTzg/view?usp=sharing
Title: Re: Animation Keyframe Editing
Post by: Kva3imoda on August 27, 2015, 03:53:52 am
A but you are not telling the whole story  :-\
I can tell you how I did it.  :)

I used die1.skeleton animation (Ponya_M certainly).

1. Open die1.skeleton.xml
2. It is necessary to find the right section of frames. We need 0.833333 - 1.33333.
3. Remove unnecessary frames (keyframe time= 0 0.83) [Cut]
4. Then we change time [Action] - 0.833333 [Run]. Now the 0.833333-frames turned into 0-frames.
5. Then make the animation longer: [Action] * 2 [Run]
6. Then change all 0.86668- frames without the previous frame. Like this:
Code: [Select]
             <tracks>
                <track bone="Bip01">
                    <keyframes>
                        <keyframe time="0.86668">
                            <translate x="0" y="0.876139" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                        <keyframe time="1">
                            <translate x="0" y="0.876139" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                    </keyframes>
                </track>
Turn it into 0 manually.

Code: [Select]
              <tracks>
                <track bone="Bip01">
                    <keyframes>
                        <keyframe time="0">
                            <translate x="0" y="0.876139" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                        <keyframe time="1">
                            <translate x="0" y="0.876139" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                    </keyframes>
                </track>

This is done for smoothness, but not necessarily.
7. Then I changed(manually) the trajectory for Bip01 bone - for body gliding (y coordinate).

Code: [Select]
                <track bone="Bip01">
                    <keyframes>
                        <keyframe time="0">
                            <translate x="0" y="xxxxxxxxx" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                        <keyframe time="1">
                            <translate x="0" y="xxxxxxxx" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                    </keyframes>
                </track>

to

Code: [Select]
                <track bone="Bip01">
                    <keyframes>
                        <keyframe time="0">
                            <translate x="0" y="0" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                        <keyframe time="0.6">
                            <translate x="0" y="0.1" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                        <keyframe time="1">
                            <translate x="0" y="0.1" z="-0.184561" />
                            <rotate angle="1.56748">
                                <axis x="1.16416e-008" y="-1" z="3.77188e-008" />
                            </rotate>
                        </keyframe>
                    </keyframes>
                </track>

I added 0.6 frame to pause gliding before the animation stops.  :)

8. Change  name="Die1" to name="On" and Save. Animation is ready.