アニメーション ファイル フォーマット

アニメーション ファイル フォーマットは、アニメーション カーブの書き出しと編集に使用できます。このファイル フォーマットは、Maya API を使用することなく外部アプリケーションによって簡単に読み取りと書き込みが行える形式で定義されます。

Anim File Format
// A description of the anim file format.
// August 16, 1998
// 
// The .anim file format (version 1.0):
// // and # are both valid comment characters.
//
// All of the lines in the file that do not contain curly braces
// (’{’ or ’}’) should end with a ’;’ After the ’;’ character, start
// a new line.
//
// The keywords and data are whitespace delimited. 
//
// Version 1.1 changes:
// April 20, 1999
// new weighted keyword for animData
// new breakdown flag for keys
//
// The version of the file format. This is a required line.
//
animVersion string
// The Maya version. The string is the value of MGlobal::mayaVersion()
mayaVersion string
 
// The following two lines are optional. If they are not included,
// the clipboard is set to the range defined by the anim curves
// contained in the clipboard.
//
// These are used by anim curves that have time inputs.
//
startTime [float] // The starting frame for the clipboard.
endTime [float] // The ending frame for the clipboard.
// The following two lines are optional. If they are not included,
// the clipboard is set to the range defined by the anim curves
// contained in the clipboard.
//
// These are used by anim curves with unitless inputs.
//
startUnitless [float] // The starting value for for the clipboard.
endUnitless [float] // The ending value for the clipboard.
// The following three keywords are used to set the units for the file.
// Each anim curve may have its own units, but these are the default 
// units if the anim curve units are not given (see the animData section).
//
// If the units are not given, then the ui units are used.
//
timeUnit [game|film|pal|ntsc|show|palf|ntscf|hour|min|sec|millisec]
linearUnit [mm|cm|m|km|in|ft|yd|mi]
angularUnit [rad|deg|min|sec]
// All of the keywords described above can only be in the header section
// of the file. As soon as anim curve information is encountered, the 
// header section is completed and the body of the file is begun.
//
// The string is the name of the attribute the anim curve is connected to.
// The next three ints are the row, child, and attr values used by the
// clipboard. See the documentation for MAnimCurveClipboard for more
// information.
// 
// If the anim curve is not connected to any attributes, the string
// is not needed, but the following ints should be 0 0 0. 
anim [string] [int] [int] [int] 
// The second form of the anim line has three strings which list what
// the anim curve was connected to.
//
// The strings are: the full attribute name, the leaf attribute name,
// and the node name. The row, child, and attr ints are still required.
//
anim [string] [string] [string] [int] [int] [int]
// The third and final form of the anim line is used for clipboard
// place holder objects. These are used to skip node which do not
// contain any anim curve data, but are positioned in a hierarchy 
// with nodes that have attached anim curves.
//
// In this case, the string is the node name and the three ints are the 
// same as the other two formats.
//
anim [string] [int] [int] [int]
// The animData must follow a line with a valid anim statement.
//
animData {
 // The input type of the anim curve. Defaults to time.
 input [time|unitless] 
 // The output type of the anim curve. Defaults to linear.
 output [time|linear|angular|unitless]
 // Whether or not the anim curve has weighted tangents. Defaults to false.
 // This is available with animVersion >= 1.1
 weighted [1|0]
 // The unit of the anim curve input, if it is a time input.
 // The units default to the time units specified in the file header.
 inputUnit [game|film|pal|ntsc|show|palf|ntscf|hour|min|sec|millisec]
 // The unit of the anim curve output. The output unit should match
 // the output type of the curve. These default to the units specified
 // in the header.
 outputUnit [game|film|pal|ntsc|show|palf|ntscf|hour|min|sec|millisec]
 outputUnit [mm|cm|m|km|in|ft|yd|mi]
 outputUnit [rad|deg|min|sec]
 
 // The unit of the tangent angles, if there are any fixed tangents.
 // The units default to the angular units specified in the file header.
 tangentAngleUnit [rad|deg|min|sec]
 
 // The pre-infinity type. Defaults to constant.
 preInfinity [constant|linear|cycle|cycleRelative|oscillate]
 
 // The post-infinity type. Defaults to constant.
 postInfinity [constant|linear|cycle|cycleRelative|oscillate]
 // The start of the actual keyframe data. Each key is a row in the 
 // braced section.
 keys { 
 [float] [float] [in tan] [out tan] [tan locked] [weight locked]
 // animVersion 1.1 adds breakdown information
 [float] [float] [in tan] [out tan] [tan locked] [weight locked] [breakdown]
 .
 .
 .
// The first two values are the input and output values in the
 // units defined by the inputUnit and outputUnit keywords.
 // The in and out tangents should be valid tangent types.
 // These are followed by three int values for tangent locking,
 // weight locking and the breakdown flag. If they are 0, the values
 // are unlocked, or not a breakdown, otherwise they are locked.
 //
 // If either, or both, or the tangents are fixed, then additional 
 // information is needed: a tangent angle and weight.
 // These two values, per fixed tangent, are added at the end of 
 // the above line.
 //
 // For example:
 // 1.0 2.0 fixed linear 1 1 0 62.345 0.04;
 // 
 // In the above case, 62.345 is the tangent angle for the first 
 // tangent and the tangent weight is 0.04.
 //
 // An example with two fixed tangents:
 // 1.0 2.0 fixed fixed 1 1 0 62.345 0.04 45.3 0.023;
 }
}
The pattern of an anim line followed by animData should be used until all of the anim curves are described.
The following example is an animated joint chain consisting of 4 joints. The first three joints are animated and the fourth joint is not animated.
animVersion 1.1;
mayaVersion 2.0;
timeUnit ntsc;
linearUnit cm;
angularUnit deg;
startTime 1;
endTime 30;
anim rotate.rotateX rotateX joint1 0 1 0;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 linear linear 1 1 0;
 30 0 linear linear 1 1 0;
 }
}
anim rotate.rotateY rotateY joint1 0 1 1;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 linear linear 1 1 0;
 30 0 linear linear 1 1 0;
 }
}
anim rotate.rotateZ rotateZ joint1 0 1 2;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 spline spline 1 1 0;
 10 -16.774359 spline spline 1 1 0;
 15 -1.6493069 spline spline 1 1 0;
 22 -3.064691 spline spline 1 1 0;
 30 0 spline spline 1 1 0;
 }
}
anim rotate.rotateX rotateX joint2 1 1 0;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 linear linear 1 1 0;
 30 0 linear linear 1 1 0;
 }
}
anim rotate.rotateZ rotateZ joint2 1 1 1;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 spline spline 1 1 0;
 10 60.962438 spline spline 1 1 0;
 15 106.06094 spline spline 1 1 0;
 22 33.259896 spline spline 1 1 0;
 30 0 spline spline 1 1 0;
 }
}
anim rotate.rotateX rotateX joint3 2 1 0;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 spline spline 1 1 0;
 10 0 spline spline 1 1 0;
 15 0 spline spline 1 1 0;
 22 0 spline spline 1 1 0;
 30 0 spline spline 1 1 0;
 }
}
anim rotate.rotateY rotateY joint3 2 1 1;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 spline spline 1 1 0;
 10 0 spline spline 1 1 0;
 15 0 spline spline 1 1 0;
 22 0 spline spline 1 1 0;
 30 0 spline spline 1 1 0;
 }
}
anim rotate.rotateZ rotateZ joint3 2 1 2;
animData {
 input time;
 output angular;
 weighted 0;
 preInfinity constant;
 postInfinity constant;
 keys {
 1 0 spline spline 1 1 0;
 10 0 spline spline 1 1 0;
 15 0 spline spline 1 1 0;
 22 0 spline spline 1 1 0;
 30 0 spline spline 1 1 0;
 }
}
anim joint4 3 0 0;