Animation Notes

Jump to: navigation, search


Animation Notes is a system that provides a way for the artist to communicate information to the game engine at a precise key frame in the animation.


It is often desirable for animators to have precise control over when the game engine does something, in order to control the look and feel of the game. The Animation Notes system allows this, by forwarding an artist's Notes into HSL, where game logic can respond to the Notes to achieve whatever effect was desired.

Animation Notes (or Track Notes) are embedded as a part of an animation during the export process.

What problem(s) does this solve?

What problems(s) does this not solve?



Built-in Notes and Note format

HeroEngine automatically generates Notes for the beginning and end of animation sequences.

*BEGIN generated automatically at the start of an animation
*END : generated automatically at the end of an animation
*NOTE <note Text> : All animator-authored Notes will have *NOTE prepended automatically to the text that was exported

The use and design of Notes

Before your animators start tossing in Notes into their animations, it is important that your designers, animators and programmers come together and talk about how and what you want Animation Notes to be able to accomplish. Once your team comes up with the types of things you want to do with Animation Notes, they need to talk about a standard for Notes and plan out the types of Notes that are common to your design.

For example, imagine an animation that does a whirlwind attack with a sword, where the animators would like to have nearby enemies react to being hit, with an impact animation. Your designers might decide that you want nine Animation Notes representing roughly 40 degree arcs, so impacts occur in sync with the clockwise rotation. You might be tempted to add Notes named something like WHIRLWIND 0 DEGREES. However, remember consistency counts when the game programmers have to write the code to actually do something with the Note. It might be better to standardize all of your impacts to work with N arcs and format the names IMPACT ARC 1.

While it is perfectly reasonable to have one-off Animation Notes for special things, creating the structure for reusing Notes in a consistent manner will streamline things and make best use of your programmers' time.

For artists

Max supports the concept of Animation Note Tracks, but that functionality does not exist in Maya. Consequently, we created an Animation Sequence Ability called Notes that moves the capabilities into the sequence instead of embedded within the animation file as done in Max. In general, we expect that users will choose to utilize the Animation Panel to create animation notes (though if you are using the Max pipeline you can still add Animation Note Tracks there if you choose).

Creating a Note in Max

Animation Notes are necessary for the synchronization of sound and effects that will be added later to an animation in the engine. To add Animation Notes you must:

When adding Notes for animations be sure to follow the format designated for that particular action. For example, when adding Notes to a combat animation, most common terms might be: "Swoosh"; "Whoosh", "Impact 1of3"; "Impact 2of3"; etc. Check with the person who will be adding effects and/or sound to get a better idea of exactly what Notes they will need.

For programmers

Animation Notes in HSL

When HeroEngine encounters an Animation Note, it raises an event on the $BASECHARCONTROL system node in the _onAnimationNote method. By default, the event is then forwarded to the class methods scripts for the animating node in a shared function ProcessAnimNoteForCharacter. That means if you have a system that wishes to respond to Animation Notes for an animating object, you need only GLOM on a class that implements the ProcessAnimNoteForCharacter shared function.

// This shared function is (by default) called on the class method scripts of the animating node
//   allowing them the opportunity to react to the Animation Notes authored by animators.
shared function ProcessAnimNoteForCharacter(actor as NodeRef of Class HBNode, sequence as String, Note as String, time as Float)

It should be noted that the sequence string passed into this function call has the name of the channel prepended to the name of the sequence, and is separated from it with a colon (:).


BEGIN: AnimAllBody:run_male
NOTE: AnimAllBody:run_male
END: AnimAllBody:run_male

See also

Personal tools