This section of the manual is for users that are currently using Motion Symphony 1.X and want to upgrade their project to use Motion Symphony 2.0. This new version is a full re-factor of the core of Motion Symphony and how it works under the hood, and it opens up the plugin to extreme flexibility, performance improvements and new features not possible with version 1.X.
Motion Symphony 2.0 will run on UE5.3+ but can also run on UE5.2 if compiling from source. From UE5.3 onwards, Motion Symphony 1.X will no longer be updated.
Benefits of Upgrading
While there is some amount of re-work required for to update to 2.0, the benefits far outweigh the extra work required. This section outlines the major benefits of the package upgrade.
Generic Pose & Motion Matching
The primary goal of this rework is to convert Motion Symphony from a ‘fixed’ matching system into a ‘generic’ matching system. What does this mean? Previously, Motion Symphony forced users to match a user defined trajectory and a set of joints, of which both the position and velocity would be matched. While this is relatively normal for motion matching, it doesn’t allow any flexibility or creativity in the matching metrics to tackle unique situations specific to games. Additionally, it doesn’t allow for much experimentation.
Motion Symphony 2.0 does away with this fixed system allowing users to match whatever they like. If a metric can be recorded and measured from an animation, as a floating-point scalar of vector, then it can be matched. Essentially it now becomes possible to match anything one would desire with relatively little extra effort.
The way we choose these metrics is through a list of small modules called ‘Match Features’. These modules define how the match feature should pre-process pose data from the animation and how it should be extracted at runtime. Users can choose any combination of match features they like, and the system will handle them automatically.
One example of a match feature is a 2D trajectory. This is an ‘input response’ type match feature, meaning the matching data has to be injected into the motion matching node based on a trajectory generator (more on this later). Another example is a bone velocity and location match feature. This is your typical motion matching joint type feature and it is an example of a ‘pose quality’ type match feature. This means that the data for matching is extracted directly from the animation at runtime and does not need to be injected by the user. Essentially it controls the quality of the animation pose.
Motion Symphony 2.0 comes with a range of built in match features which can easily be expanded upon in the future as needs arise. Additionally, if a user has a very specific niche metric they need to match, they could write their own match feature module and, provided it’s done correctly, the system will understand it and be able to use it automatically. This process does not require any modification of the Motion Symphony package. Technically it would even be possible to write these match features in blueprint, however, that would not be recommended.
Data Driven Performance
Comparing thousands of poses every few frames can be quite taxing on the CPU. While MS1.0 used an object-oriented approach, where pose data was stored in a list of pose objects, MS2.0 takes a data driven approach where all pose data is stored in a single generic float array. This sequential layout of data is very cpu friendly and significantly reduces cache misses. Additionally, it simplifies the main pose search loop allowing for easy optimizations. This optimization alone increases the speed of Motion Symphony 2.0 by orders of magnitude. It is also the underlying enabler of the ‘generic’ nature of 2.0 as there is no ‘fixed’ pose object class and every metric is just a set generic floats sitting in an array.
This layout of data also allows for a very powerful pose culling optimizations using layered high dimension Axis-Aligned Bounding Boxes (AABBs). This optimization is also data driven and still allows the pose array to be traversed linearly which is great for the CPU. Through testing on the example project, it reduced the number of poses searched every frame by an average of 95% (results may vary depending on animation set). Since the number of poses searched has a linear relation to processing speed, this effectively increases the search speed by an average of 20x. To make things even better, unlike previous optimization methods in MS1.0, this method is deterministic and guarantees the same chosen pose as if every pose were checked. Due to the significant benefits, minimal processing time and ease of use, optimization modules have been removed and this optimization has been built into the core of MS2.0. It runs automatically all the time without any input required from the user.
New Features
Along with the core changes, Motion Symphony 2.0 comes with a slew of new features to improve the usability and effectiveness of MS nodes. Additional features are planned for future development, however, the following features are already available:
Next Naturals - This is a polish feature which allows users to mark sections of animations as “Next Natural”. This prevents these poses from being searched unless they are from the current playing animation and are in the near future. This can reduce incorrect animations being chosen and helps with animation flow. It also reduces the overall number of poses searched every frame.
AI Nav Path Trajectory - The trajectory generator component can now generate trajectories that follow an AI nav path instead of simply applying input toward the next navigation point. This helps with more accurate matching for AI characters.
Distance Matching as a Metric - While not strictly the same as traditional distance matching, with the match feature system it is now possible to use the ‘distance to a start, stop or plant’ as a metric in motion matching. This takes the form of a ‘Input Response’ type match feature which automatically works together with the Distance Matching component. If used correctly this can result in more responsive movement that is more accurate to the controller movement.
Bone Facing Match Feature - A new built in match feature which allows users to match the facing vector of a character bone. This can lead to improved matching quality, where bone orientation is important.
Bone Height / Axis Match Feature - A new built in match feature which allows matching of a single axis of the position of a bone. An example use case of this is for matching something like the height of the hips without worrying about the horizontal axis, effectively eliminating 2 unnecessary pose atoms.
Pose Matching Uniformity - Pose matching nodes also benefit from the same generic pose array system used for motion matching. Pose matching nodes now use match features allowing for more variety and flexibility of these nodes.
UE5.X Mirroring - Since UE5.0, Epic introduced their own animation mirroring system and asset. MS2.0 deprecates the Mirroring Profiles in favor of using Epics built in Mirror Data Tables. This allows for more consistency with the engine and benefits from all the mirroring features and improvements UE will make to the system in the future.
Simplified Trajectory Injection - The process of extracting trajectory (or rather ‘Input Response’ metrics) into the motion matching node has been streamlined and made generic to handle ‘non trajectory’ inputs like distance matching.
Improved Data Normalization - Improvements have been made to data normalization to automatically assist with data calibration.
Improved Debug Drawing - Since matching features are now modularized, debug drawing for each match feature is controlled by the feature module itself. This has resulted in improved debug drawing of pose data. Additionally, customization of debug colors has been added to the plugin settings.
Numerous Minor Improvements - In the course of refactoring Motion Symphony, there have been numerous minor code improvements that have an impact on both the performance and quality of the system. While any single one of these improvements may not be noticeable, they cumulatively have a significant impact on quality and performance of the system as a whole.
Calibration Overrides - Override or modify calibrations at runtime for different animation sets. This includes a new calibration editor for quality of life.
But that’s not all, Motion Symphony 2.0 is designed with expansion in mind and the following improvements are on the way.
Foot Locker Update - The foot locking node will be modernized to work runtime animation rigs.
Additional Calibration Normalization - Normalize weights further to balance response and quality for default calibration.
AI Nav Trajectory Improvements - More improvements for AI Nav Trajectory for motion matching
Improved Trajectory Generation - Trajectory generation that accurately matches the UE5 character movement movement.
Additional Tools for ‘Non Root Motion’ Movement - More tools will be added to improve the visual effect of motion matching when not using root motion.
New Example Project - A new more comprehensive example project to go along with Sotion Symphony 2.0
New Match Features - New ways to match motion allowing more flexibility and customization.
And More…