.. _advanced-curveformat:

Curve serialisation format
==========================

Below is a general description of the general NUKE Animation Curve format, using AUgmented Backhaus Naur Form.

See also :ref:`advanced-rotoformat`


.. code-block:: abnf

   int

   float

   interpolation            = K / L / S / R / C

                            ; Constant / Linear / Smooth / Catmull-Rom / Cubic

   extrapolation            = k / l

                            ; Constant / Linear

   x-value                  = float

   y-value                  = float

   l-slope                  = float

   r-slope                  = float

   l-angle                  = float

   r-angle                  = float

   animation-curve-key      = [SP interpolation] [SP extrapolation] [SP "x" x-value] SP y-value [SP "s" l-slope] [SP "t" r-slope] [SP "u" l-angle] [SP "v" r-angle]

   animation-curve-key-list = 0*animation-curve-key

     ; This is basically just a list of floats, which may or may not be prepended by string constants.
     ;
     ; Each key will have one 'core' float, which is the y-value.  This might
     ; be preceded by the x value, e.g. "x10".  If not, then the new x value
     ; is linearly extrapolated from the last two.  If no x-value is specified
     ; for the first key, it uses 0; if none for the second it increments the
     ; first key.
     ;
     ; Each key then may have some tangent data.  If an l-slope is set and
     ; no r-slope then the lslope should be used for both.  l-a and r-a default to 1.

   animation-curve          = begin curve-expression [SP "i" / SP "I"] animation-curve-key-list end

     ; "i" indicates invisible, "I" indicates trace only
