AnimationPoser

Plugins AnimationPoser

Look at this video, it is a simple thing that I'm experimenting with.

I put 0 effort into making it look good; it is just to test a technical feature.

I'm working on the merge transition feature that will allow these intermediate points to be interpolated by bezier curves.
 
Last edited:
Might I suggest you add a few simple, canned animations to the plugin package? So when an absolute beginner opens it for the first time, they can load a sample and see how it works and what it does?

Nothing massive or complicated, just something to get people started in understanding the basic concepts. Someone like me, who comes in not knowing what a layer, a state, or a transition is, opens this plugin and is just lost. I have no idea what I'm supposed to so.

It feels like my options are to say "fuck it" and go do something else, or get out of VR, open Vam in desktop, and spend an hour studying the documentation and trying to figure out not only how this thing works, but what it's actually supposed to do.

If i could just open a sample and see what an actual finished animation does and how it's working, it would likely get me over that basic "I have absolutely no idea what this thing does" hump.
 
Might I suggest you add a few simple, canned animations to the plugin package? So when an absolute beginner opens it for the first time, they can load a sample and see how it works and what it does?

Nothing massive or complicated, just something to get people started in understanding the basic concepts. Someone like me, who comes in not knowing what a layer, a state, or a transition is, opens this plugin and is just lost. I have no idea what I'm supposed to so.

It feels like my options are to say "fuck it" and go do something else, or get out of VR, open Vam in desktop, and spend an hour studying the documentation and trying to figure out not only how this thing works, but what it's actually supposed to do.

If i could just open a sample and see what an actual finished animation does and how it's working, it would likely get me over that basic "I have absolutely no idea what this thing does" hump.

Yes, I know.

This plugin was a bumpy road. I never intended to actually develop it like I ended up doing. Initially I only released a very simple version of what I wanted, to see if the veteran developers picked it up, because I had NO idea how to develop virt-a-mate plugins.

So until now I released only partial, not fully developed packages. Meaning I MYSELF never played with the plugin, never developed the stuff I wanted. Which is why there are no animation pieces or demo scenes yet. Every time I stopped to develop the scenes, I realized just how necessary some other feature of the full feature set would be for what I wanted to create.

3.7 is quite complete however in terms of features. I could already have done some very impressive stuff with it (I played with it a little bit and was very impressed with the results). It was my plan last week to release and then work on scenes, but saturday when I released 3.7 I decided to just keep going to implement the remaining features. 3.8 will have timeline animation. This means you will be able to import animations from mocap or VamTimeline. But it also implements some important stuff like the timelines for keyframe animation, bezier curve interpolation, and some extremely powerful features for anchoring timelines (that you can see in the video I just posted above) and merging/spliting timelines.

I'm working non-stop to make this release. After that, I'll finally be able to work on animations and scenes. The full plugin will be re-released under a new name, so that's why I also didn't post tutorials yet. But I'd say next week you guys will have everything: the full plugin, tutorials, animation pieces and demo scenes.

Honestly I never dreamed I would be able to implement all that stuff, so really you guys got much more than anticipated. Now it is very close.

Also, there is a sample scene cdgczta8 did with AnimationPoser, so you can play with that. https://hub.virtamate.com/resources/a-night-with-ava-animationposer-demo.20787/
 
Last edited:
Another N00b-question:

Is it possible to define a minimum lenght for an animation with slight randomisation ?

My goal would look like this:

(Sorry for the improvised matrix)
AnimationAnim. 1Anim. 2Anim. 3Anim. 4Anim. 5Anim. 6
PurposeIntro poseTransitionLoop 1TransitionLoop 2Finish
TypeSequenceSequenceLoopingSequenceLoopingSequence
Min-TimeN/AN/A 240 sN/A 360 sN/A
 
haremlife updated AnimationPoser with a new update entry:

Added Timelines, Keyframes, Splines with Bezier Curves and VamTimeline integration

This update is a huge, and the last, step to a complete plugin. This is a BETA, however. Now I am going to work entirely on bug fixing, demos and tutorials. In terms of development, all the features in the roadmap have been implemented, which to me is unbelievable.

This version was the result of blood and sweat. The code refactoring was huge, but now there is a new timeline system. Every transition works as an entire timeline, composed of keyframes that you can add/remove and edit. You can...

Read the rest of this update entry...
 
Another N00b-question:

Is it possible to define a minimum lenght for an animation with slight randomisation ?

My goal would look like this:

(Sorry for the improvised matrix)
AnimationAnim. 1Anim. 2Anim. 3Anim. 4Anim. 5Anim. 6
PurposeIntro poseTransitionLoop 1TransitionLoop 2Finish
TypeSequenceSequenceLoopingSequenceLoopingSequence
Min-TimeN/AN/A 240 sN/A360 sN/A

One amazing thing with AnimationPoser is that even I, the creator, get constantly surprised with what it can do. It can be used to do unintended stuff.

I was thinking these days and I realized that there is no need for me to code a timer. AnimationPoser already can have unlimited timers.

For example. If I understood correctly, you want the character to not leave the animation if it didn’t spend a minimum amount of time (say 240s) in it. This is a very common thing to ask yourself about, because often characters go into an animation and leave it right away, because of the randomness, which might feel… disappointing sometimes.

Well, so how do you do this? Simple. Create “exit” states for the animation, in such a way that there is no path to get out without going through these states. These states don’t need to do anything special with the controllers. Like we talked before, they can be connected with other states through very short transitions.

Now, you have these states that function as doors from the animation. If they are closed, the character can’t leave.

Now comes the fun part. You can add a layer with no controllers, and two states. One of then is “doors open” and the other is “doors closed”.

”Doors closed“ puts avoids at each door state, and “doors open” lifts the avoids.

You use sync layers to change the state to ”doors closed” whenever you enter the animation. ”Doors closed” has a state duration time of 240s, then it transitions to “doors open” and lifts the avoids.

Isn’t that crazy?

I only recently started realizing the potential of controlerless layers. They can hold state, act as timers and counters! So the character can act even more intelligently. Those controller-less layers essentially form a brain for the character.

It is interesting that markov chains are often ”advertised” as “memoryless”, but this doesn’t mean anything in practice since states are already memory. It is just a formal distinction.
 
One amazing thing with AnimationPoser is that even I, the creator, get constantly surprised with what it can do. It can be used to do unintended stuff.

I was thinking these days and I realized that there is no need for me to code a timer. AnimationPoser already can have unlimited timers.

For example. If I understood correctly, you want the character to not leave the animation if it didn’t spend a minimum amount of time (say 240s) in it. This is a very common thing to ask yourself about, because often characters go into an animation and leave it right away, because of the randomness, which might feel… disappointing sometimes.

Well, so how do you do this? Simple. Create “exit” states for the animation, in such a way that there is no path to get out without going through these states. These states don’t need to do anything special with the controllers. Like we talked before, they can be connected with other states through very short transitions.

Now, you have these states that function as doors from the animation. If they are closed, the character can’t leave.

Now comes the fun part. You can add a layer with no controllers, and two states. One of then is “doors open” and the other is “doors closed”.

”Doors closed“ puts avoids at each door state, and “doors open” lifts the avoids.

You use sync layers to change the state to ”doors closed” whenever you enter the animation. ”Doors closed” has a state duration time of 240s, then it transitions to “doors open” and lifts the avoids.

Isn’t that crazy?

I only recently started realizing the potential of controlerless layers. They can hold state, act as timers and counters! So the character can act even more intelligently. Those controller-less layers essentially form a brain for the character.

It is interesting that markov chains are often ”advertised” as “memoryless”, but this doesn’t mean anything in practice since states are already memory. It is just a formal distinction.


This sort of function is what I was looking for, thank you for the explaination. And yeah, an imediate transition happened to me, with 5 % chance no less.

Basically I want to sell the illusion of agency from the partner. The transitional animation I use is slow so if it happens right at the start it just feels off, to say the least.



However, now I need to familiarize myself with avoids, lol.
 
This sort of function is what I was looking for, thank you for the explaination. And yeah, an imediate transition happened to me, with 5 % chance no less.

It's like they say... Randomness is not user-friendly lol Uniform randomness doesn't look uniform for most people, because they expect things to even out and they don't.

Basically I want to sell the illusion of agency from the partner. The transitional animation I use is slow so if it happens right at the start it just feels off, to say the least.

Yes, for sure! I intended to implement timers, until I realized the plugin already has them. A two-state layer with no controllers and a transition is nothing else than a timer. Which is crazy.

Besides all the explicit features listed in the plugin page, there are yet a number of "hidden features" (patterns) that people can discover. I'll release multiple video tutorials showcasing both the explicit and the hidden features.

However, now I need to familiarize myself with avoids, lol.

First you need to create a role in the Roles tab. Call it "Self" and assign to the character.

Now the avoids are quite simple actually... Like, in the example I gave, you go to the transition that goes from "Doors open" to "Doors closed" and setup the transition to send an avoid to "Self" with a given string, say, "Close Doors". Make sure it says "Place" and not "Lift" in the box. Now in the Avoids tab, add an avoid with string "Close Doors" and select the door states to be avoided.

Now in the transition that goes from "Doors closed" to "Doors open", do the same thing, but with "Lift" instead of "Place".
 
Will the saved exports work with further versions from 3.7 or is it better to wait?
 
Will the saved exports work with further versions from 3.7 or is it better to wait?

They will; the 3.7 exports are definitive and will be further supported.

Did you share the “turning around” animation you’ve mentioned? With 3.8 it becomes very easy to do that sort of stuff.
 
They will; the 3.7 exports are definitive and will be further supported.

Did you share the “turning around” animation you’ve mentioned? With 3.8 it becomes very easy to do that sort of stuff.
It was indeed a timeline animation. I imported it by hand :D. No, not shared yet. You know what, I will do it now.
 
It was indeed a timeline animation. I imported it by hand :D. No, not shared yet. You know what, I will do it now.

I used to import by hand too. Back then I thought that it was trivial to automate that procedure and thus have timeline import. But timeline import like it works now is on a whole other level. Just gotta stabilize this code with new releases. It has a lot of small issues right now.
 
Ok it's too bugged right now :LOL: I turned all the intermediate states into keyframes and I can make it turn 180 and then back but there are clearly some performance and IO issues into play. 3.8 was almost a complete rewriting of the core (I almost didn't sleep for 8 days) so I'm expecting some days of playing with the plugin and fixing bugs for it to become reasonably usable. The flip side is that this was the last big feature / code refactor so things will become very stable from now on. 3.7 is reasonably stable and 3.9 will be too. Probably 3.9 can be expected next week.
 
Last edited:
People can keep track of the issues and what to expect for 3.9 in the issues page of the github. There are people helping with the development so I'm organizing things there.

 
Thanks a lot @haremlife bro! After weeks of working, my walking animation is 90% complete!

I have a rare case where the state "flickers" when using blend anchor, for example atom A has y rotation of 0 and atom has y rotation of 180, the 0.7 blend anchor flickers between 140 and 220 y rotation.

I guess its because the blend anchor does not determine whether it is clockwise or anti clockwise rotated.

Any ideas to fix this?
 
I'm running into some bugs importing and exporting timelines. For whatever reason my person atoms controllers get all wonky and move relative to the main atom controller when I import a timeline. I'm guessing I've exported the timeline wrong from the timeline plug in. Any guidance?
 
I'm running into some bugs importing and exporting timelines. For whatever reason my person atoms controllers get all wonky and move relative to the main atom controller when I import a timeline. I'm guessing I've exported the timeline wrong from the timeline plug in. Any guidance?

Is the character in the zero position (atom controller at (0,0,0), with 0 rotation) before importing?
 
Thanks a lot @haremlife bro! After weeks of working, my walking animation is 90% complete!

I have a rare case where the state "flickers" when using blend anchor, for example atom A has y rotation of 0 and atom has y rotation of 180, the 0.7 blend anchor flickers between 140 and 220 y rotation.

I guess its because the blend anchor does not determine whether it is clockwise or anti clockwise rotated.

Any ideas to fix this?

I've seen something like that too. But fundamentally, how is the plugin going to decide whether the rotation should be clockwise or counterclockwise? Since there is complete symmetry in the decision, it seems like the code decides for each with equal probability. Mind you... This comes from unity's own quaternion algebra (more specifically, I'm using this: https://docs.unity3d.com/ScriptReference/Quaternion.SlerpUnclamped.html). Maybe you can remedy the situation by slightly rotating the atom B to something like 179 degrees instead of 180. Probably there is some solution to this issue that I could implement in the plugin itself. If someone has an idea, please share it with me.
 
No, it's not. And I don't want it to be. But that is indeed where the timeline values are centered around.

Yes, so... Move it to the 0 position, import, then move it back...

This is temporary, of course. I mentioned it in the plugin description:

"I have only tested VamTimeline import when the character is in the default position (0,0,0). So try not to push it too hard right now. You can import VamTimeline animations with the character in the default position, save in AnimationPoser and load in other positions."
 
A few minor bug I have noticed:
-the scroll bar is too short, sometimes hard to click on lower items in bottom drop down menu, e.g. source states for messages.
-path finding feature activates on non-playing tab, it makes editing on wrong states easily
-loading instances, anim and messages replace existing, while loading layers doesnt, a bit inconsistency here
-changing state name also changes target name in message, but not source name

-disable the plugin doesnt stop from activating triggers, I have trigger that sends updated string value to determine next anim playing, so I figure that out

-not exactly a bug, but I find the initial anim saving on last edit quite annoying, especially when I was editing controllerless anim for triggers, it messed up my new save when i forgot to turn it back to triggerless anim.
I suppose a checkbox of "load this anim at start" is better option.


Question on roles:
How does anchor for roles apply? Does it intelligently selects the identical controller, and use transition tab to pre define which state it is supposed at?

Now lets assume i have a walking and a running animation, is it suppose I can blend into a walk-to-run transition easily by manipulating blend values? Though I need another 2 character playing the walking and running anim respectively to determine blend values in runtime, right?
 
Last edited:
A few minor bug I have noticed:
-the scroll bar is too short, sometimes hard to click on lower items in bottom drop down menu, e.g. source states for messages.
-path finding feature activates on non-playing tab, it makes editing on wrong states easily
-loading instances, anim and messages replace existing, while loading layers doesnt, a bit inconsistency here
-changing state name also changes target name in message, but not source name

-disable the plugin doesnt stop from activating triggers, I have trigger that sends updated string value to determine next anim playing, so I figure that out

-not exactly a bug, but I find the initial anim saving on last edit quite annoying, especially when I was editing controllerless anim for triggers, it messed up my new save when i forgot to turn it back to triggerless anim.
I suppose a checkbox of "load this anim at start" is better option.

Ok!

Loading instance should overwrite. There is a textbox telling about that in the Animations tab.

The path finding indeed activates on the non-playing tab. If that wasn't the case, explosions could happen. It might not feel like that is convenient when you are working on a new scene... But it starts getting more and more convenient as the complexity of the scene increases.

Disabling the plugin is a virt-a-mate feature, so if something in the plugin keeps working even then, I'm guessing unfortunately the issue lies in virt-a-mate itself, outside of my reach. Having a state that isn't a source for any message might help you.

Other than that, I'm adding everything to the issues page: https://github.com/haremlife/AnimationPoser/issues

Question on roles:
How does anchor for roles apply? Does it intelligently selects the identical controller, and use transition tab to pre define which state it is supposed at?

Now lets assume i have a walking and a running animation, is it suppose I can blend into a walk-to-run transition easily by manipulating blend values? Though I need another 2 character playing the walking and running anim respectively to determine blend values in runtime, right?

The role is just a placeholder for the atom. So it doesn't intelligently selects the identical controller, it selects the controller that you choose (based on the controller name). The anchoring is to the real controller position/rotation in the scene right now, so it doesn't have anything to do with the states. The plugin in one person doesn't see the states, etc, of the plugin in another person. It just refers to the controller actual positions while anchoring.

If you want to sync the persons, so that they coordinate appropriately, then you use messages.
 
Last edited:
I have a rare case where the state "flickers" when using blend anchor, for example atom A has y rotation of 0 and atom has y rotation of 180, the 0.7 blend anchor flickers between 140 and 220 y rotation.

This actually seems like a really relevant issue. I'm right now debugging why I can't make the @rernat 's turning around animation work. It works 100% fine, until I save and reload. It turns out, the controllers are simply rotating in the opposite direction (clockwise vs counterclockwise) after reloading. Which can only be because of the anchor slerp thing. Quaternion interpolation is not defined for 180 degrees... It has two possible "shortest path" solutions! This is more serious though because it happens for the "virtual anchors" in the timeline, rather than the physical anchors which you can control. I'm really curious about how this problem can be resolved. It's conceptually fascinating... And it is very worthwhile to solve, since the timeline virtual anchors is a extremely helpful feature.
 
Last edited:
Back
Top Bottom