Search Unity

[Beta] Motion Matching for Unity - Advanced character animation with no animation state machine

Discussion in 'Assets and Asset Store' started by CptKen, May 27, 2019.

  1. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Just Released - Check it out on the Asset Store

    2(1).jpg

    Motion Matching for Unity (MxM) is an alternative animation system to mecanim for characters. With motion matching you can achieve advanced, organic and fluid animation without the need for an animation state machine. You don't have to define transitions or set up conditions. Provided you have decent animations with enough coverage you can create a fully working character in about 15 minutes with starts, stops, plants and turns. With a little more effort and coding ability, its not hard to make very complex animation such as parkour, fighting and sports.

    How Does It Work?
    Motion matching is a relatively new animation technique that is not constrained by the concept of animation clips, states, pre-defined blends or transitions. Motion Matching allows animation to flow freely through your entire animation set, jumping to any pose at any time. Animation poses are chosen based on both the current pose and the desired gameplay input*. Whatever matches the pose and your desired input the best gets chosen and is rapidly blended in. By balancing the pose and the desired input, motion maching is able to achieve high fidelity animation while still achieving good input response**.

    Industry Use:
    Motion matching as a technique was originally developed about 2 years ago by Ubisoft for the game 'For Honor'. It has since been used in several EA and Ubisoft games and is even being used in 'The Last of Us Part 2' by Naughty dog. As you can see, the technique of motion matching is not novel and has significant AAA application. (I am not affiliated with any of the above mentioned companies or games)

    Trailer



    Introduction & Overview


    Motion Matching with Raw Mocap (alpha footage)

    Note: This is raw mocap placed on a generic rig. The weird hands and arms are a retargetting issue and has nothing to do with MxM.
    Performance:
    Motion matching for Unity uses the cutting edge of Unity development to achieve solid performance while still being stable. It uses Unity's Job system, SIMD mathematics library and burst compiler, to achieve lightning fast, multi-threaded performance.

    This video, which is already out of date, shows a performance benchmark on an i5 4 core system running motion matched characters above 60fps without LOD or infrequent updates.


    Features:

    Motion matching for Unity is not just a locomotion machine. It supports a number of features that allow the user to create almost any kind of animation. Features include:
    - No animation state machine
    - Fluid and responsive animation output**
    - Support for cut clips as well as un-cut mocap
    - Powerful event system for dynamic actions (e.g. vaults, sword attacks, pacour)
    - Powerful tagging system to allow control over animations (e.g. stances etc.)
    - Motion timing editor (change animation timing to match gameplay)
    - Animation warping for event (precise environment contacts
    - Layer system
    - Use alongside mecanim (switch at any time)
    - Compatible with custom animation playable graphs
    - Compatible with IK systems

    Useful Links

    - Asset Store Page
    - Unity Connect
    - Project Roadmap
    - Discord (for support)
    - User Manual
    - Quick Start Guide
    - FAQ
    - Tutorial Videos

    *MxM needs gameplay code to tell it what to do. You have to write the gameplay code to do that. MxM is an animation system, not a gameplay system.

    **responsiveness and fidelity of the resultant animation is dependent on the quality, responsiveness and coverage of your source animations. Watch this video for more detail.
     
    Last edited: Jun 10, 2019
  2. christoph_r

    christoph_r

    Joined:
    May 20, 2013
    Posts:
    473
    Congratulations on the release!
     
    CptKen and hopeful like this.
  3. razzraziel

    razzraziel

    Joined:
    Sep 13, 2018
    Posts:
    103
    congratz. since I'm working on another part of the project, i'll wait for a while. in the meanwhile i look forward to others videos.
     
    CptKen likes this.
  4. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Day one patch anyone?

    Update v1.1b has been submitted to the asset store for approval. Available now for verified users on the Discord. If you have purchased the asset, you can become verified by joining the Discord and send me a PM with your invoice number.

    Changes:
    - Multi-contact events
    - Improved event pre-processing for more accurate contacts
    - Post event trajectory handling
    - Several bug fixes
     
    OdderOtter likes this.
  5. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Hi all,

    I've written some custom movement controller scripts that can be used with MxM. These are based off controller - model decoupling used in For Honor to help reduce footsliding.

    The scripts are available to all verified users on the Discord (<- click the link to join). If you have purchased MxM be sure to join the Discord server and send me your invoice number (after joining) and I will give you verified status.

    You don't wan't to miss out on these as I will only be providing these snippets on the Discord (not included in package) and I will be making scripts for pacour, fighting and other things.

    Peace.
     
    Last edited: Jun 1, 2019
    Ragoo and christoph_r like this.
  6. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    I've been informed that the Discord invite link wasn't working. Here is a new link for those that want to join: MxM Discord

    I've updated the other links on this forum thread
     
  7. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    New practical video tutorial available. This goes in depth on setting up character locomotion. This is the first of a series where I'll progressively build on the characters animation and show you each step of the way.

    Also MxM v1.2b will be coming out very soon with a slew of bug fixes and improvements including the Blend Space tech which incorporates blend spaces into motion matching. This is something that I don't believe has been done in motion matching before so it's very exciting.

    Tutorial 1: Basic Locomotion Setup (Available)


    Tutorial 2: Blend space integration


    Tutorial 3: Improving Locomotion with Input Profiles & Trajectory Error Warping (Coming Soon)

    Tutorial 4: Strafing


    Tutorial 5: Stance Changes with Tags(TBD)

    Tutorial 6: Expanding on melee Combat (TBD)

    Tutorial 7: Event System Introduction (pre-requisite for parkour)


    Tutorial 8: Parkour - Contact and multi-contact events (Parkour)


    Tutorial 9: Parkour - Climbing (anim data switching) (TBD)
     
    Last edited: Jul 8, 2019
    hopeful, christoph_r and razzraziel like this.
  8. razzraziel

    razzraziel

    Joined:
    Sep 13, 2018
    Posts:
    103
    great idea and good start video. how long do you think you can finish them all?
     
    CptKen likes this.
  9. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Some will happen quicker than others because I'll have to code example gameplay to communitcate animation needs to MxM like pacour. I hope to get 2 more out by next week depending on how long they take.
     
    razzraziel likes this.
  10. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    MxM v1.2b has been submitted for approval. It is available now on the discord to verified users so I recommend joining. As far as I know, this is the first motion matching system to incorporate blend spaces into regular matching. This significantly improves the viability of using cut clips with motion matching. Changes noted below:

    UPDATE MXM v1.2b (05/06/2019)
    • New blendSpace tech (see section 5 of the user manual)
    • Improved trajectory curving on MxMSimpleController
    • Several bug fixes
    • Several quality of life fixes
    • Updated demo scene with slightly better pre-processor configuration
    • Updated documentation for multi-contact events and blend space tech
    *Note: Please delete the 'Motion Matching' folder in your project before importing v1.2b
     
    OdderOtter, hopeful and christoph_r like this.
  11. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    New tutorial video available. I decided to split up blend spaces and strafing so the videos weren't too long.

     
    christoph_r likes this.
  12. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    I made a new trailer for MxM. Huge makeover. The previous one was just a little dull.


    Note: This demo scene not included with the asset
     
    Last edited: Jun 13, 2019
    TeagansDad and hopeful like this.
  13. VermilionGames

    VermilionGames

    Joined:
    Jun 12, 2015
    Posts:
    8
    Could you share a playable build of the demo scene?
     
  14. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Hi, I am working towards having a playable demo scene with pacour. However, it's not quite ready yet. That doesn't mean MxM isn't ready for it. MxM is a generic animation system and all the functionality of that animation system shown in the trailer is working as shown.

    However,

    As it is a generic animation system, it does not handle gameplay code. Things like wall running and vaults etc. require gameplay code to tell MxM where it wants the character to 'contact' the walls etc. For this demo scene I set up a bunch of tests to ensure the animation system is working as intended but the example gameplay code for that is not quite ready to 'play'.

    As MxM is in Beta my main focus has been on the animation system itself but I absolutely want to provide a playable demo so people can try before they buy. Totally understandable.

    Note: The demo scene in the trailer is not the demo scene in the package because I don't have the re-distribution rights to some of the assets. The code behind it all is absolutely in the asset of course. When MxM comes out of beta the demo scene will be more similar.
     
    razzraziel and VermilionGames like this.
  15. VermilionGames

    VermilionGames

    Joined:
    Jun 12, 2015
    Posts:
    8
    Sure, I understand. Still would love to see it in action in a playable build, before buying. Looks like a great asset though.
     
    CptKen likes this.
  16. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    MxM 1.3b has been submitted to the Unity Asset store and will be available soon.

    It is also available for download on the MxM Discord channel for verified users. If you have purchased MxM and have not yet joined the Discord, simply PM me a copy of your invoice when you have joined and I will give you verified status.

    Update 1.3b brings some significant improvements to the event and contacts system, making it easier to use and improving the existing system significantly. I will have the next tutorial available soon to help demonstrate these features.
     
  17. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    New practical tutorial available. This time we get the primer on events. I didn't make it to parkour in this video because it was getting too long. HOWEVER! all the stuff in this video is the foundation for doing parkour and combat which will be done in part 2.

     
    hopeful likes this.
  18. razzraziel

    razzraziel

    Joined:
    Sep 13, 2018
    Posts:
    103
    it ended before the best part :)
     
    CptKen likes this.
  19. helmers

    helmers

    Joined:
    Aug 28, 2010
    Posts:
    48
    I like it very much so far. Also the tutorials are super helpful.
    Here are some questions/suggestions:

    1. Is it possible to use Unity Animation Events (the one that call a method at the MonoBehaviours, not the MxM ind of events)? The reason is, that I would like to play sounds at certain times in the animation (footsteps, sword hits, …)

    2. Would it be possible to mark compound animations with a "mirror" flag that not only adds the original animation to MxM but als the X-axis mirrored animation; Would be useful to increase the amount of available motion data without adding additional memory for motion files.

    3. If 2 would be possible, an extension would be to add another option to only mirror the part from the hips downward.

    4. Another useful extension would be to mark certain time spans in the MxM timeline for certain perposes. For example mark the time where an IK system would override the MxM animation; to adjust a grab animation. This can also achieved if we get at least 1. May be the new "event warping" can solve this also? I eagerly await the 2nd part of the event tutorial.
     
    CptKen likes this.
  20. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Hi, thanks. There will be more tutorials to come so stay tuned.

    I've answered your questions below:

    1. MxM uses Unity's playable system to play animations so AnimationClip events should be triggered just like any other animation. In addition, I am working on an in-built 'event' system of this kind which should be more flexible.

    2. This is on the roadmap to investigate in the future but my priority at the moment is to get the core of MxM to a point where I can say its no longer a beta.

    3. Will be investigated at the same time as No. 2.

    4. Generic tagging is coming very soon and it will enable you to do this. I already have the groundwork for generic tagging working for a specific case but I will also add functionality to add custom tags that can be queried or triggered.

    Hope this helps answering your questions.
     
  21. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    The good news is that this video covers most of the nuances of events. It's only a few more steps for setting up contacts and triggering. The hardest part is actually setting up your gameplay code to figure out where the contacts should be. That is game specific though I'll share some basic implementation in the next video.
     
  22. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    New tutorial video available. This is the one that show you how to use MxM to do things like parkour with multi-contact events.

     
    razzraziel and TeagansDad like this.
  23. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    MxM 1.4b has been submitted for approval and is available now on the discord to verified users.

    Also decouple controllers have been updated to be compatible with 1.4b and are also available exclusively on the discord.
     
    OdderOtter likes this.
  24. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    *Note: The demo scene in the current build (1.4b) has an issue where the player stutters as they accelerate. This is not because of MxM itself. I accidentally set the max speed of the MxMSimpleController component to 4 when it should be 6.2. This will be updated in the next version. In the meantime you can change the max speed and it should be fixed.
     
  25. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    New tutorial available. This one is about how to achieve strafing with motion matching.

     
  26. akuei2

    akuei2

    Joined:
    Oct 17, 2018
    Posts:
    66
    Hi, did your stuff suitable for coding idiot?
    For animation purpose, not for game creator.
     
  27. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Hi, this system is much more flexible if you know how to code well. Though I wouldn't recommend using it for anything other than a game because it's all about matching animation to player input.
     
    akuei2 likes this.
  28. Pixelnovo

    Pixelnovo

    Joined:
    Sep 26, 2017
    Posts:
    15
    Is it possible to get a MoCap tutorial? Do I have to create a special dance card? is there any chance to get the Raw Mocap file from your video as a reference? Thanks
     
    CptKen likes this.
  29. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Ah I talked to you about this on the Discord but I will answer here again for anyone else that would like to know. I currently don't have my own set of raw mocap for this asset (other than the Unity Raw Mocap which isn't done right). The mocap shown in the football player scene is owned by a user so I don't have it.

    I should soon be getting a full set of Motion Matching mocap donated by a generous user and that will be included with the asset when available, along with some guidance on how to shoot mocap for motion matching.
     
    OdderOtter likes this.
  30. NeatWolf

    NeatWolf

    Joined:
    Sep 27, 2013
    Posts:
    823
    Hi there!

    I have a few questions, I attended at a GDC event talking about this approach to animation (and also retargeting and procedural adaptation), yet, I found this asset only now! :(

    1. is there any ETA for mobile (Android) support?
    2. What's currently preventing it from working on mobile?
    3. Source code, DLLs and asmdef, which ones are in the package now, and which ones in the future?
    4. In the video you mentioned compatibility with FinalIK, but the last update of FinalIK dates back to Oct 25, 2018. Am I missing something, or you have some info about the asset still being in development? (which would be great to hear?)
    5. You didn't mention PuppetMaster, from the same creator, which is compatible with FinalIK. Is there anything you can think of which could prevent the asset from working with PuppetMaster as well?
    6. Is there any other "organic-like" animation asset which could work well side-by-side with MM that you would suggest? I'm thinking about something considering inertia, actual weight, limits, and the skeleton seen as a group of muscles. And collisions, of course.
    Thanks! :)

    (it's great to hear that you're using the job system already, huge plus!)
     
  31. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    HI,

    1. No current ETA
    2. Nothing, it probably works on mobile but I have not tested it and have not committed to supporting mobile platforms as my current priority is completing the feature set and usability towards full release. On another note, I get this question a lot and wonder what mobile developers think they will get out of Motion Matching for mobile? I think it would be performant enough (not tested) but it's kinda like using a bazooka to kill a mouse. Regardless I will test it someday.
    3. Source code is included in the asset
    4. FinalIK was only an example and it is the best IK system in Unity currently regardless of when it's last update was. The point is that any IK / procedural animation system will work over the top of MxM including Unity's new preview rigging system.
    5. Puppet Master is on my list to investigate in the future. I don't know why it wouldn't work but at the same time I haven't tested it.
    6. Not that I'm aware of. At least nothing that is performant enough to use in a game.

    Hope that helps.
     
    Last edited: Jul 15, 2019 at 10:57 PM
    NeatWolf likes this.
  32. NeatWolf

    NeatWolf

    Joined:
    Sep 27, 2013
    Posts:
    823
    Thanks for the blazing fast reply!
    Glad to hear that you're getting that question a lot - it means there's a relevant request for it, and it's likely to get pushed up in your priorities :p
    It indeed helps. I'm assuming it *could* work on mobile, but is currently untested and unsupported. But, I may be lucky and still be able to use it without any issue :)
    I will be providing some feedback about the mobile testing :)
    (not every mobile app/game is about killing a mouse, sometimes it's a heavily armoured mouse :D )
     
    CptKen likes this.
  33. docseuss

    docseuss

    Joined:
    Apr 5, 2016
    Posts:
    36
    CptKen Discord server is saying invalid invite by the way.

    Also wanted to say that I picked this up a few days a go and it has changed the way I am looking at character controls in Unity. It is amazing not to have to do blend trees and the outcome is pretty great.

    I have to admit I was working through the 5 part introduction videos you have out there and I have been using a mixture of Synty and UMA characters along with Kubolds animations and I am not having nearly the success you were. Not the end of the world and I am going to go back and rework through them in case I missed something.

    My real ask though is I am trying to integrate your animation controller in with Ootii's MotionController by creating a new motion that pretty much imitates your MxMSimpleController and the UpdatePrediction stuff is kicking my ass. There are so many variables and not entirely sure what part they all play and there really isnt any comments in the controller code. There are some in the MxMTemplateController so trying to piece them all together.

    Also working on trying to create a controller that uses the navmeshagent to feed in the trajectorypoints you need and for the most part I can just use agent.transfer to replace just transfer in your code and makign some headway again, however still not great. Would be really cool if you could produce a example of what that controller would look like or maybe break down the UpdatePrediction(), CalculateDesiredLinearVelocity(), and ExtractGoals methods a bit more.

    I am hoping that you are also working on videos showing jumping, climbing, swimming, and of course combat soon as well. :)

    OK last thing the interface IMotionMatchEntity has two issues when you implement it.

    1. This method gets implemented as public void CopyGoalFromPose(ref PoseData a_poseData) and it should be public void CopyGoalFromPose(ref PoseData a_pose)
    2. Method public void SetGoalRequirements(List<float> a_predictionTimes) should be public void SetGoalRequirements(List<float> _predictionTimes)

    Small things but thought you should know. Anyhow loving this amazing thing you have given us and cant wait to see how much more you can do with it. Really is spectacular
     
    CptKen and hopeful like this.
  34. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    I'm not sure which link you are referring to. I just tested the one at the top of the forum page and it seems to be working fine.

    Motion matching is a bit of a dark art. While it can get you some pretty awesome results pretty quick there is also a lot of nuance to it and it's not black and white like traditional animation systems. This is moreso with cut clips as opposed to mocap because there is less animation to work with so it can be rather un-forgiving. Once you get used to the nuance and the process of iterating on motion matching sets, it gets easier. That being said I have encountered some animation sets that just aren't good for motion matching and that is just a painful reality. Kubolds have been pretty decent for me though.

    In a soon to come update (not next one), I'll be shipping with a much better set of mocap animations made specifically for motion matching. My hope is that as this technique becomes more popular, more animator / mocap animation asset makers will make things geared toward motion matching.

    That being said, my journey of supporting cut clips is not yet over. I feel I have solved most of the major problems but I wouldn't be surprised if there are several improvements to make cut clips better and easier by the end of beta. You would be surprised how much harder it is to get the motion matching algorithm to work with cut clips than compared to mocap.

    The simple controller is just one way that I did trajectory prediction and it's not a straight forward method at all but it gives a nice trajectory. It's kinda hard to explain it even through comments. Regardless, I will have more advanced tutorials in the future about how to make your own controllers but they will be more geared towards how to implement the interfaces and what data you need to feed into the system. As this is a more advanced topic it will be towards the end of my tutorials.

    Re tutorials, there are many more that will come out. There is so much to know about motion matching that I will probably be making more until this asset is out of beta.

    :eek: fixed for v1.5b coming soon :)
     
    Last edited: Jul 18, 2019 at 11:33 AM
  35. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    Thanks, appreciate it.
     
  36. CptKen

    CptKen

    Joined:
    May 30, 2017
    Posts:
    94
    MxM v1.5b is now available to verified users on the Discord and has been submitted to the Asset Store for approval (usually 1 week until it is available on the asset store).

    UPDATE NOTES:
    - [Feature] Multiple idle sets can now be used for the same tag. The system will pick the best idle set that matches the current pose when idle is triggered. This enables stagger pose idles.
    - [Feature] Significantly improved idle detection Algorithm so that idles are triggered more reliably resulting in less jitter moments before transition.
    - [Feature] Simple jump and slide event actions added to the demo scene
    - [Feature] Added root motion tagging and querying (Experimental) Note: It's not automatic
    - [Feature] Adds footstep tagging and triggering (experimental) (See NotifyFootStep functions on IMotionMatchEntity
    - [Feature] MxMInputProfile 2.0 - remap inputs to values that your animations can realistically achieve.
    - [Quality of Life] MxM Editors now automatically dock in appropriate places within the Unity editor instead of floating
    - [Quality of LIfe] Replaced many of the fixed lists in MxM inspectors with re-orderable lists for more flexibility
    - [Quality of Life] MxMPreProcessor now automatically detects if the user is using a generic or humanoid rig. Warnings implemented if there is a mis-match of target model and animation rig types
    - [Quality of Life] When pre-processing and overwriting MxMAnimData, the reference to it in your MxMAnimator will no longer be reset.
    - [Quality of LIfe] When there is no MxMAnimData in your MxMAnimator, the full inspector will still be shown with a red text warning and all settings greyed out to avoid confusion.(edited)
    - [BugFix] Fixed several spelling mistakes
    - [BugFix] Fixed incorrect calibration in Demo Scene
    - [BugFix] Fixed a bug where the Composite editor and timeline would open each other making it difficult to close them
    - [BugFix] Fixed a bug where changing the target model would not update for composites and blend spaces
    - [BugFix] Fixed a bug where deleting 'after' animations in clip composites would display an incorrect error message and delete the primary clip from the composite.
    - [BugFix] Fixed a bug where triggering a tag change while in idle mode would not change the idle stance.
    - [BugFix] Fixed several bugs with timeline UI not behaving as intended and having obscured elements while scrolling.
    - [BugFix] Fixed a bug where utility (formerly generic) tags could not be deselected in the timeline without selecting another generic tag.
     
    OdderOtter likes this.
  37. docseuss

    docseuss

    Joined:
    Apr 5, 2016
    Posts:
    36
    @CptKen Hey man thank you for the quick reply and yes I totally missed the Discord link at the top of your page and that one does seem to work. The only other link I could find was in this post.

    upload_2019-7-18_8-37-13.png

    Again love what you are doing and I understand it isnt cut and dry. I am just pretty excited by this whole thing that I have been reworking a lot of stuff to use your animation controller. However I have been entirely successful yet as I can get like 60% of the way to something usable and then i get lost.

    Really looking forward to your future tutorials and keep up the good work, but I would like to suggest doing a controller tutorial sooner than later as without it the asset is unusable to some extent. Just throwing that out there :)
     
  38. growling_egg

    growling_egg

    Joined:
    Sep 2, 2012
    Posts:
    40
    Hello, new user of Motion Matching and I love it so far! I'm all over anything ECS/Jobs related and having an animation system that gets away from state machines is wonderful. Two questions for you, if you don't mind.

    1) You've mentioned you use Kubold's animation packages in your demos, and if I've followed along properly it sounds like Kubolds are in the category of "cut" clips, whereas mocap is better. But doesn't the asset link for the movement pack say that it's motion-captured? Is the mocap fidelity not as high? Trying to understand why we can set the pose interval so low with Kubold's anims.

    2) I've made it to the step in the tutorial where I pre-process the anim data after setting up the preprocessor. It generates a clone of the target model I provided (not gameobject, I picked the one with the white square icon over the blue object icon), but then there is an error that the animator component is missing. Indeed, the clone only has a skinned mesh renderer, but if I manually drag the same model onto the scene, it has an animator component attached. I'll go back and see if I missed anything, which is possible.

    Very cool asset, excited to have found out about motion matching as a technique and about this asset while it's in beta. Excited to see what can be done by combining this with the AI Planner.