• home
  • forum
  • my
  • kt
  • download
  • Non-Linear Animation in Production

    Author: 2007-06-24 09:14:53 From:

    Hello! My name is Adam Martinez, and I am a technical director at GLC Productions in New York City (www.glc.com.) As a technical director, I get asked to do all sorts of silly things, like light shots, shade models, create effects and offer emotional support to animators. GLC Productions is a computer graphics and sound design facility in the chic West Village, Manhattan. The focus of GLC for the past three years has been the development of it's flagship property The Buddy System, created entirely in Alias|Wavefront¡¯s Maya. The pilot episode of The Buddy System, "It¡¯s A Comic Strip," recently won first in it¡¯s category at the Annecy `99 animation festival (where it was called Le Buddy Systeme, heh). That¡¯s it for the plugs, I promise.

    This is a discussion and case study of how one company uses the concepts and techniques of Non-Linear Animation in a television production environment. This document is by no means a programmer¡¯s technical specification, nor do I claim to be an expert on animation tools. There is some MEL code in this document (yay!) however, I cannot be held responsible for the use or misuse of it (boo!). The MEL in this document has been written on and tested for Maya 2.0 complete on SGI workstations. Just to clarify, I did not invent, coin-the-terms, and in no way am I responsible for the headaches and heart aches associated with non-linear animation. So if your spouse leaves you because you¡¯ve been too busy messing about with all of this silly animation stuff, don¡¯t come crying to me, because honestly, it¡¯s happened to me and you probably deserve whatever you get. I hope this counts as a legal disclaimer because I¡¯m moving on now.

    What is NLA and why is it following me?

    Non-Linear Animation (NLA) is quickly becoming, if it is not already, the latest animation industry buzzword. While the concept, and many implementations of various complexity, have been around for a number of years, only recently have vendors and animators been focusing on NLA as a serious production tool.

    Essentially, non-linear animation is a method of placing and manipulating animation from separate sources. The "non-linear" in NLA comes from the film/video editing world. Packages such as Avid MediaComposer and Adobe Premiere are examples of Non-Linear Editors; they allow easy ways to edit, blend and reposition clips of footage together on a timeline. Substitute footage with animation, and you have NLA: a way to edit, blend and reposition clips of animation (a walk cycle, run, or other behaviors) from separate sources.

    What do you mean by "animation clips from separate sources"?

    The concept of animation clips necessarily arises from the basis that NLA is used to blend and transition between pieces of animation. These pieces ("clips") exist independently of the scene file and the timeline of the particular shot being edited, that is, animation clips can be created traditionally or brought in from external files. For example, you¡¯re working on a character that must use a motion-capture running sequence, but in the middle of the motion capture, you have to manually keyframe a particular motion, like a jump. Using a non-linear approach, the animator would manually keyframe the jump, without the mo-cap, and define that sequence as an animation clip. Using a NLA editor, the animator would then bring in the mo-cap as one clip, and the keyframed sequence as another clip, and do a blend, similar to a visual dissolve to and from the jump in the middle of the mo-cap. Mo-cap, keyframe and procedural animation are all examples of separate sources of animation.

    How to solve all the world¡¯s problems with a single MEL script: A case study of NLA in production.

    How can we make effective use of NLA in production? The big question. At GLC productions we have been working on an episodic animation project that, from the nature of the format, requires consistent character behavior. We average 6 main characters in any given episode, two of which are the actual stars of the show, and appear in every episode. As an aide to ensure the consistency of a character¡¯s behavior from shot to shot, and episode to episode, we considered a way of re-using animation from older shots and manipulating it to conform with a current shots requirements. What we did not want to do was actually re-use an entire shot¡¯s worth of animation, but only bits a pieces of it that were repetitive characteristics of the character. The original idea was to create an animation library for each character, where we would store animation clips for a character and load them in when we needed them. But what we needed to do was come up with a system where we could

    effectively shift those clips around in a non-destructive way. We therefore implemented a type of Non-Linear Animation editor we call the Layered Animation System (LAS).

    The LAS is essentially an NLA editor and it is an extension to a large number of tools we have developed in house, both scripts and binaries, to streamline production workflow. Since our system uses a layered paradigm, much like modern compositing applications, our interface is modeled after an audio mixing board, where we can essentially mix channels of animation. You¡¯ll notice in the screenshot above that there are other similarities to a mixing board as well, like the solo button, which is used to isolate a single track of animation.

    This interface also acts as a window into our animation library, where clips of animation are stored and categorized. The library is accessed through the buttons on the lower-right corner, and the user is then prompted on which layer the clip is to be loaded. Animation is then manipulated and shifted using Maya¡¯s internal graph editor.

    The LAS allows us to maintain a consistent look and feel to the characters in our animations by enabling our animators to build on top of approved characteristics and habits. In addition, it allows animators to re-use clips of animation that they particularly like, sparing them the agony of having to re-keyframe that complicated thumb-twiddle that Howie did in "The Third Ticket." Click here to see a sample of two clips being blended together (quicktime in .zip, 1.37MB). This clip demonstrates the results of partial blending of animation curves. The arms and head of the character use the scratch sequence, while the torso and legs use the walk sequence.

    GLC¡¯s Layered Animation System is, and I suspect that most NLA¡¯s are, built on the great mathematical method of weighted-averaging. Simply put, weighted-averaging is the same as regular averaging except that every element in the calculation is multiplied by a number to increase it¡¯s influence on the final result. For example: (curve1 x influence1 + curve2 x influence2)/2 = final curve is an example of a weighted-average of two animation curves. If influence1 is higher that influence2, then curve1 will dominate the final animation curve.

    GLC¡¯s animation Layers are essentially individual timelines, on which the same node can be animated differently. At any given point on the master timeline, a single layer, or a weighted-average of all of the layers can be active and visible in the final animated result. Other types of NLA editors use a block diagram in which separate clips of animation are rearranged and connected on a single timeline, and still others may use a combination of layers with block diagrams.

    The script las.mel is a simple version of the system we use at GLC. It creates a simple interface from which you can create a three layers of animation on a selected node and edit them in multiple graph editors. NOTE: This script has been tested on Maya 2.0 Complete on SGI. It "should" run on NT, but there may be some erratic behavior... or so I'm told. Here's a simple walkthrough of how to use this script:

    1) Download the las.mel script into a directory in your mel scripts path (e.g. ~username/maya/scripts/)

    2) Create a sphere.

    3) Type las in the command window or script editor, and hit enter.

    4) Select the sphere, and click on the Create Layers button.

    5) Type in a name for this character for example, Ball, and click ok

    6) Click and drag over the nurbsSphere1_translate and nurbsSphere1_rotate attributes and click done. Generally, we've found that it's undesirable to layer scale animation, but you can play with it if you wish. I won't try to stop you... but I don't advise it. Really.

    7) Cick on the arrow next to "layer 0 graph" to open up that layer's graph editor, you can do the same for the other two graphs as well.

    8) Start settin` keyframes! Click on the Select Layer button and keyframe the Y translation of ball_layer0 at 0 for frame 0 and 30 and at 10 for frame 15.

    9) Open the Layer 1 Graph frame and click on the Select Layer. Keyframe the X translation of ball_layer1 for frame 0 and 30 to 10 and at 0 for frame 15.

    10) On playback, your ball will bounce up and down.

    11) Set the ball_layer0.influence and the ball_layer1.influence to 1.

    12) Now the ball will start moving a diagonal. Play with shifting the curves a bit.

    If everything went according to plan, (because hey let's face it, I don't have all the time or all the possible Maya configurations on which to test this dumb thing) what you should have is a ball with three animateable layers, and a nice three panel graph editor to edit them with. So just what kind of voodoo does this script do? Well, first of all it creates three nodes which are basically virtual copies of the layered node. These three nodes are the layers themselves, that is they receive whatever animation curves that you assign. Then each attribute of each layer is multiplied by the influence attribute and then added togeteher and divided by three. So, for example, the final x translation of the ball equals: ((ball_layer0.ball_translateX*ball_layer0.influence) + (ball_layer1.ball_translateX*ball_layer1.influence) + (ball_layer2.ball_translateX*ball_layer2.influence))/3. This result is piped into a character partition, which is then sent to the final nodes. The character partition allows easy access to attributes accross multiple objects, so you can layer more than just a single sphere if you want! All of this math can be done with expressions or with dependancy graph nodes. I chose to use dependancy graph nodes so that you can see the internals visually. Select the character partition, in the above example that would be "ball", and hypergraph it showing input and output connections. What you see is the hypergraph for three layers of animation on a single object.

    Well, that's about it for our layered animation system. Feel free to edit, manipulate and dissect the code that I've included. If you have any questions or, heaven forbid, the script does not work on your configuration, e-mail me and I'll see what I can do. I'd also like to hear comments, suggestions and variations that come up as you mess around with layered, and non-linear animation.

    discuss this topic to forum

    relation tutorial

    No relevant information

    Category

      Animation (19)
      Modeling (34)
      Character Setup (12)
      Textures and Materials (17)
      Effects (4)
      Tips and Techniques (3)
      Getting Started (3)
      Using Tools and Scripts (0)
      Lighting (5)

    New

    Hot