While it is probably not necessary for most users, it is possible to create custom tags in blueprint or C++ to use on motion matching animations in the MotionData editor. These tags only run during the pre-processing phase and they can be used to modify the animations they are placed on and the poses that they encompass.
Note: Custom Pre-Process Tags is a very advanced topic and it requires knowledge of the inner workings and data structures of Motion Symphony. It is recommended that this feature is only for advanced users.
Creating a Custom Pre-Process Tag
There are two types of pre-process tags that can be created:
Tag Point - a tag that is specified at a specific point in time in the animation
Tag Section - a tag that encompasses a time ‘range’ within the animation
The choice of tag is dependent on the use case for your tag. The only difference is that the tag section modifies multiple poses within it’s range while the point is more for setting up interest points within an animation.
Step 1: Right click in your content browser and create a new ‘Blueprint Class’
Step 2: Search for Tag Point or Tag Section and pick one of them as your base class. A new asset will be created, name it as you like.
Tag Points
Tag points are tags that mark a specific time within an animation. They can modify and affect the animation itself based on the time of that tag. This is often used for baking data relative to that point. An example use case within Motion Symphony is the Distance Matching markers which bake data relative to a point in the animation.
A tag point blueprint has only a single function to implement and it is called only once for each tag point:
Received_PreProcessTag
Received_PreProcessTag
This function is called once for each TagPoint. In this function you have access to the following data via input parameters:
Point Pose - The closest pose to the tag (modifiable)
Out Motion Anim - The animation that this tag has been placed in (modifiable)
Out Motion Data - A reference to the entire Motion Data asset (modifiable)
Time - The time of the Tag Point in the animation
Tag Sections
Tag Sections are tags that cover a time range. They can modify and affect all poses within their time range.
A tag section blueprint has two functions which can be overwritten to run custom logic:
Received_PreProcessPose - Called once for each pose within the tag section range.
Receieved_PreProcessTag - Called one time for the tag itself.
Received_PreProcessPose
This function is called once for each pose within the tag section range. In this function you have access to the following data via input parameters:
Out Pose - the pose that this function was called for (modifiable)
Out Motion Anim - The animation that this tag has been placed in (modifiable)
Out Motion Data - A reference to the entire Motion Data asset (modifiable)
Start Time - The starting time of the tag section range
End Time - the ending time of the tag section range
Received_PreProcessTag
This function is called once each tag. In this function you have access to the following data via input parameters:
Out Motion Anim - The animation that this tag has been placed in (modifiable)
Out Motion Data - A reference to the entire Motion Data asset (modifiable)
Start Time - The starting time of the tag section range
End Time - the ending time of the tag section range
Example Custom Tag
The below image shows an example custom tag which modifies the ‘cost multiplier’ of a pose based on a curve sampled at the time of the tag. This tag only needs to implement the PreProcessPose function.
Custom Tags in C++
For C++ users, custom tags can be created by inheriting from UTagPoint and UTagSection. Please see the source code for existing tags for an example on how to achieve this.