AnimationPoser

Plugins AnimationPoser

You'll be able to extend any walking cycle into a full motion from point A to B! And, of course, save each of those points into states, and leverage the powerful automatic path finding mechanism so that your character is able to go through doors, avoid obstacles, climb up stairs and much more!

Fixed some bugs since the last release:

-Exporting to VamTimeline has been fixed
-Anchors menu has been fixed
-Fixed morph import from latest versions of Timeline
-Disabled anchor damping for now, until I fix an issue with it that affected animations even when not using damping

This also allows me to announce a feature that was here before, but I avoided announcing it because I was aware of some bugs. You have a checkbox in the Timelines tab where you can disable blending to the final state.

The timeline acts by "blending" between the initial and final states, which is why you can stretch, rotate, or deform a timeline arbitrarily by merely altering the transforms of the final states, which you can do by editing them or by just moving the anchors.

However, when creating the actual timeline, you don't always know what the final state is going to be. This happens for example when picking a walking cycle and adding a timeline for the root controller so that the character actually changes place and also so that the feet do not slip! The amount of displacement of the root controller will be determined by the feet movement! So it is very inconvenient when you are trying to design the timeline while it keeps blending to the final state, which you still don't know where exactly should be.

Because of this I have added a checkbox to disable the blending to the final state, so that you can design the timeline relative only to the initial state. Now, when you go to the last keyframe, it actually represents the target state, and when you hit "update keyframe" you are updating the target state.

With this you can design PERFECT walking animations beginning with an walking cycle.

Please help me to continue developing by supporting me on Patreon:

This is one of the last versions before the release of the complete plugin, which will be rebranded as version 1.0 under a new name. This is by far the most stable version ever released, the hurricane of the VamTimeline integration went through, and a new crucial feature - state self-transitions - has been implemented.

This version is hosted on patreon because of an issue with the hub, but it's free for download.

--------Patreon------

I created a Patreon channel. I need support to keep developing the plugin.


Originally I never intended to have a Patreon or to become a serious Vam developer. I just wanted to show other plugin creators some cool ideas, that they could pick up. After 2 years it is clear that not only I'm the only one looking at something as ambitious as turning Vam into a sort of high tier The Sims, something you can truly live in, but that I have become capable of developing things I honestly never imagined I could do in this ecosystem.

However, the amount of dedication necessary for this project is obviously huge. When I did the VamTimeline integration, I got in a 2 week loop of work to bed to work, 100% on the plugin, i.e., some 280 hours for a single feature! I'm personally in financial trouble, so that amount of dedication to something I'm not paid to do is not viable. I finally decided I'm willing to get serious with what I'm doing here, but for this to be possible I need enough people to express their support.

I didn't deliver tutorials and scenes yet because I don't want to release more resources under the name "AnimationPoser", since that name will change soon. I'm wrapping things up for a complete re-release, which will be under a new name, better reflecting what the plugin is intended to be about. People who have seen what is coming got very impressed. And not for lack of reason, this is huge and will change Vam a lot. The v1.0 of the rebranded plugin will come with all the tutorials and scenes I'm preparing.

Originally all the support I asked was for people to have a conversation with the plugin developers that they support on patreon to join in this project, or for them to share animation pieces on the hub. That didn't happen, so I'm trying the Patreon route, which will enable myself to finally commit to this.

I'll also use the Patreon to release the complete scenes I'm developing.

-------Features------

In terms of features, in this version I added the possibility to make states transition into themselves. This is very, very useful and a crucial long-wanted feature, because now each state can be used as an entire looping timeline. Now, a "state" is not just a snapshot of the controllers anymore, it is an entire looping animation.

This makes it way easier to develop interesting things with less states, and lets states reserved to do interesting logic, instead of being boilerplate.

----Code and bugs----

There has been a very huge and painful amount of work since the last release. Honestly, the plugin was never usable to half of it's extent (I always had to stop creative development because of bugs). Compared to all the other versions, since the beginning of this project, this is the one with the least amount of bugs, the more stable, robust and usable. It's getting pretty close to a complete, stable, all-encompassing release.

1- I fixed a VERY CRITICAL optimization issue related to importing from vam timeline, and now it's possible to quickly import even huge mocaps, while before it took forever.
2- All menus were refactored and moved to their own files, so that it's now easier to spot and fix UI bugs
3- Many UI bugs fixed
4- Fixed issues with editing controllers
5- Fixed timeline morph issues
6- VamTimeline import now works reliably, controller transform issues fixed
7- Added button to pause Timeline in order to go to Layers tab and edit a morph keyframe
8- Fixed issues with changing anchors
9- Improved morph display names
10- Fixed issues where the Layers menu froze
11- Fixed issues where the UI elements didn`t clean up and cluttered the screen
12- Transition time is set automatically when importing from VamTimeline
13- Controllers are automatically added when importing from VamTimeline

--------Next-------

-I'm aware of some bugs, that however don't prevent usage. Most are solvable through going out of a tab and then back in. Fixing those is of course a priority nonetheless.

-The way anchors work together with the timelines is something amazing with many applications, but it is also related to a deep mathematical issue related to the "double covering" of SO3, the rotation group, by SU2, the quaternion group. In other words, there is not a single "shortest path" between the south pole and the north pole of a sphere, and, when AnimationPoser tries to interpolate a timeline between two states where a controller is a 180 rotation apart, things get messy. There are solutions to this particular bug and I'll tackle it in the next release.

-I'm conceiving a feature that would finally allow game-like walking cycles in virt-a-mate. This would be similar to CLS: Complete Locomotion System (an interesting plugin in the hub), but with high quality pre-animated walking cycles, which can come from mocap, from other programs or created in vam timeline. In other words, you would just have to move the root controller, to make the character walk to the destination through a pre-animated walk cycle, which is what happens in video-games.

-That will be the last feature before the rebranding.
Like I said, 3.8 was a beta, and pretty instable. I fixed the most serious and glaring issues from the 3.8 release.

This is still beta, but the plugin is pretty usable right now.

I'll keep working on reported bugs and ui/ux issues for the 3.10 release.

Edit: this version has a serious performance issue when importing huge mocap animations. I fixed that is the latest github release:


So by downloading from the link above you will be able to import virtually any animation with thousands of keyframes. I benchmarked with VamTimbo’s mocaps and it takes a few seconds in my old non-vr-ready notebook. So the plugin is becoming something almost “commercial”, suitable for heavy lifting.
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 import those timelines from VamTimeline, so that you can use AnimationPoser as a way to combine timeline animations into a much larger structure, forming an almost intelligent robot with a multitude of recorded behaviors that you can customize.

Finally, curve interpolation has been added, to interpolate the keyframes, so that you can have smooth curves. The curves are exactly the same as the "Global Smoothing" of VamTimeline (technically, they are splines composed of bezier curves, where the control points are fully determined, and thus automatically computed under the hood, by the requirement that the second derivative of the curve is continuous). There is no support for other VamTimeline curve types for now, but this should be enough for most uses.

One hugely interesting result of this endeavor is the interaction between timelines and anchors. Almost accidentally, this resulted in a system where you can use anchors to edit animation curves in real time, by moving empty atoms around for example. This looks and feels a lot like the original Virt-a-Mate's AnimationPatterns. But there is a huge difference: while animation patterns were completely impractical because of how quickly they polluted the scene with AnimationStep objects, with AnimationPoser you can use anchors to morph the curves and then get rid of them! This gives a fantastic balance that makes animation easier and less painful than ever.
Again, lots of new features were added which make the workflow much easier and the plugin much more powerful!

Also the plugin is MUCH MORE stable and working really well. I`m working on a demo scene with multiple animations, dozens of layers and hundreds of states and nothing is falling apart so far!

-An exclusion system was created, whereby characters can add and remove “avoids” to other roles. An “avoid” is similar to a message. Character A places an avoid to character B. There will be an “Avoids” tab. You add an avoid in that tab and define there which states should be avoided when that avoid is placed. Character A can also lift the avoid. This would allow to define which animations/states certain characters should avoid when other characters are in certain animation/states, and make basically any kind of character interaction work in face of randomness, avoiding collisions.

-Added Indirect Transitions, which allows the character to have a probability of transitioning to a state far apart. When that transition is randomly selected, the character finds a path to that target state, through regular transitions going through intermediary states, and goes there directly and deterministically. Only when it arrives at the target state, the random sampling is turned on again. Indirect Transitions work the same as if the character had received a message telling it to go to a given target state.

-Now you can use a role as an anchor, instead of a specific character in the scene. This way, you can load an animation to a new scene and have all controllers anchors in all animations and all layers reassigned properly by simply reassigning a role, which is crazy!

-A button was added to set an anchor for all states in a layer, instead of having to switch an anchor state by state.

-Now when saving and loading a plugin instance, the selected animation when saved will be the one playing when loading.

-When switching animations, the plugin looks for a path between the current states of every layer reaching the target animation. If it finds one, it takes the shortest path and walks safely to the target animation.

-Definitive export and import formats were defined, making the .animposer file more readable, with proper versioning and format specification. Now you can share your files in the hub!

Bugs fixed:

-The messages in the transitions tab were not loading. This was fixed.

-After a transition started, it sent the messages, then it waited for the "state duration" time, and only then transitioned, taking the "transition time" to transition. This is wrong, it should transition right away after sending the messages. This was fixed.

-Sync targets (a feature allowing layers to communicate with each other) were not working. Now they are. And they are amazing.

-Cross-animation transitions didn't work well. Now they do.

-Some issues with messages were fixed.

-Some UI issues were fixed.

-Fixed controllers bumping when transitioning between states in certain situations.

-Fixed some code exceptions that made the character stop in the middle of a path.
There has been an IMMENSE amount of development since the last version!

-Implemented an intelligent path finding mechanism whereby switching from an state to another makes the character go through a path of intermediate states that are connected through transitions. This is fully integrated with messages: this way, a message needs only to tell where the character should go (the destination state), and it finds by itself a path there through transitions and intermediary states.
-Added a button to instantly string all states of a layer as in a timeline, and another to connect all states of a layer with bi-directional transitions.
-UI has been finished with all the missing operations and it has been throughouly fixed from annoying bugs
-Roles and messages are now global
-Roles, messages and single animations can now be saved and loaded to their own files
-Roles and messages are working nicely for the first time
-Animation re-usability (via the root state mechanism) wasn't working properly. The mathematics was fixed and it works perfectly now.
-Fixed bumpiness issue when switching states
-The plugin overall is working as a whole for the first time, making it possible what has been promised forever: to build, share and reuse complex multi-character animations for the first time.
This update adds a myriad of smaller features, which improve user experience a LOT!

-Added a SendMessage trigger. With this, you can go in the Messages tab and define what the character is going to do when a given message is received. Then, you can add triggers anywhere in the scene to send that message to the character.

-Make control controllers default to world anchor. The control controller was by default anchored to itself, which led to a lot of issues. With the control controller being default to world anchor, now adding the control in the layers tab is enough to animate the character overall position.

-Macro time slider to slow down / speed up an entire animation. Now, in the play tab, you can speed up or slow down an entire animation with a single slider! All the layers will be simultaneously affected, allowing a great degree of control. This is very important for animation sharing and reusability, since this slider can make up for differences in FPS between different users. Also, if your FPS changes (for example, if you change performance settings, etc), you can adjust the animations accordingly.

-Better morph sliders. This is extremely helpful! Now you can edit the morphs from inside the plugin, in the layers tab.

-Settings for default values. Now, in the options tab, you can set your preferred values for transition duration, state wait times, ease in and out, and so on.

-Random noise slider to transition tab. This feature was requested a while ago. With this, you can make transitions have random durations. If a transition has, say, 0.5s duration, and you add a 0.2s noise, it is going to select randomly a duration between 0.3s and 0.7s.

-Merge layers. Now you can merge two layers in the layers tab. This is a much promised feature. It allows for people to build animations from reusable animation pieces. Load two layers with the same set of controllers, adjust the animations through translating and rotating the root state, then merge. The layer name is going to be prepended to all states after merge, so you can rename the layer to get an arbitrary prefix to the state names after merge, in order to avoid state name collision.
In this update the first thing I did was change a lot in the UI design to make it less crowded.

Then, added Roles and Messages. Roles can be created and assigned to person atoms in the roles tab. In the Transitions tab, now you can add message strings for each role. These message strings are sent to the characters that are playing a given role when the transition ends. When receiving a message, you can define what happens to that character in the Messages tab. There, you will be able to define multiple messages. Each message has a message string, a group of source states and a target state. If the character receives that message string when it is in one of the source states, then it transitions to the target state. Multiple messages can have the same message string, so that, on receiving that message, the character can have a different reaction depending on which state it is in right now. Also, messages are broadcast to all layers and each layer can independently deal with them.

Multi-character sync (roles and messages) was extremely challenging conceptually and code-wise, but the solution is simple and works very well for the user. It finally makes anything possible with the plugin. This feature sets the plugin very far apart from other animation plugins and makes huge workflows affordable.
Previous versions introduced a lot of features. However, the plugin was not fully working: instances with multiple animations usually led to unexpected issues, animations and layers sliders were always bugged, and crucial features had been accidentally removed by merges made by other contributors.

This version has deeply refactored transitions and has been tested with multiple complex animations in a single instance.

A core feature has returned as the new "Root State" checkbox. This makes a state be the "root state" of the layer. Then, rotating and translating the controllers for this state apply equivalent rotations and translations to those controllers in all states of that layer.

In other words, you can rotate and translate entire animations in a whim, making layers finally reusable to their full extent.

Next versions will add new powerful features, like being able to merge load layers (thus combining multiple small animation pieces). I'll try to tackle the issues with root controller. And I want to add the ability to import mocaps. The most amazing feature to come, however, is going to be cross-person sync.

Right now, given that you don't try to animate the root controller, the plugin is already extremely powerful and functional.
Back
Top Bottom