8,288
edits
m (Reverted edits by Ozyguxij (Talk) to last revision by Paradox-01) |
Paradox-01 (talk | contribs) mNo edit summary |
||
Line 1: | Line 1: | ||
__TOC__ | |||
: | {{Template:XMLModdingHints}} | ||
{| border=0 cellspacing=20 cellpadding=0 align=center | |||
| The xml code on this page is compatible with onisplit '''v0.9.61.0''' | |||
|} | |||
==[[OBD:OBAN|OBAN]]: Object Animation== | |||
:[[ | |||
===general information=== | |||
* OBAN files are level specific | |||
* exception: OBANs of [[OBD:TRIG|laser triggers]] are located in level0_Final | |||
* trivia: also the [http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/dream_obj_images_spawned.jpg dream lab images] use OBANs | |||
* tutorial: making [[AE:Authoring_custom_camera_animations|camera interpolations]] | |||
===BSL support=== | |||
{| class="wikitable" width=100% | |||
| '''object animations''' | |||
| '''character animations''' | |||
| '''camera animations''' | |||
|- | |||
| env_setanim ''objectId oban_name'' | |||
| chr_animate ''ai_name oban_name'' | |||
| cm_anim <nowiki>[look|move|both]</nowiki> ''oban_name'' | |||
|- | |||
| | |||
| | |||
| '''camera interpolation''' | |||
|- | |||
| | |||
| | |||
| cm_interpolate ''oban_name frame_number'' | |||
|} | |||
===XML=== | |||
{| class="wikitable" width=100% | |||
|width=120px| '''tag''' | |||
|width=60px| '''type''' | |||
| '''description''' | |||
|- | |||
|valign=top| <Flags> | |||
|valign=top| flag | |||
| | |||
: NormalLoop | |||
: BackToBackLoop | |||
: RandomStartFrame | |||
: Autostart | |||
:: autostart animation (after an animated object is created | |||
: ZAxisUp | |||
:: 3DSMax generated animation (has Z axis pointing up) | |||
|- | |||
| <InitialTransform> | |||
| matrix4x3 | |||
| initial position transform matrix | |||
|- | |||
| <BaseTransform> | |||
| matrix4x3 | |||
| fixed transform matrix | |||
|- | |||
| <FrameLength> | |||
| int16 | |||
| the value mus be equal to the last <Time> value plus 1 because <Time>0</Time> is also a frame; Oni crashes if you use a wrong value for <FrameLength> | |||
|- | |||
| <FrameCount> | |||
| int16 | |||
| fubared animation frame length (in 1/60 seconds); does not work | |||
|- | |||
| <HalfStopFrame> | |||
| int16 | |||
| stop frame for the first "half" of the animation; used by door animations to distinguish between open and close sequences | |||
|- | |||
| <KeyFrames> | |||
| | |||
| holds <OBANKeyFrame> tags | |||
|- | |||
| <Rotation> | |||
| quaternion | |||
| object rotation, can harvested from TRAM files | |||
|- | |||
| <Translation> | |||
| vector3 | |||
| x y z object position | |||
|- | |||
| <Time> | |||
| int32 | |||
| elapsed time in frames, use short intervalls for smooth animations | |||
|} | |||
;Transform matrices | |||
:Like all matrices in Oni, they are composed of 3 vectors defining rotation/scaling/shearing and a 4th vector defining a translation. | |||
:In the above table the 4 vectors are presented as rows ([[Wikipedia:row-major_order|Direct 3D convention]]), although OpenGL and Oni use them as columns. | |||
:[[Wikipedia:Transformation_matrix#Affine_transformations|Affine transformations]] use a 4x4 matrix with 4 extra coefficients (in the presentation above, one would add one column on the right): | |||
::three [[Wikipedia:3D_projection|projection transform]] coefficients (all of them are zero here); one final coefficient (always 1.0 for an affine transform matrix). | |||
:Alternatively, one can think of the 3x4 matrix as a 3x3 rotation/scaling matrix and a position vector | |||
::*Let X=(x, y, z) be the position of a vertex in the M3GM | |||
::*Let M=(m11, m21, m31; m12, m22, m32; m13, m23, m33) be the 3x3 matrix | |||
::*Let R=(m14, m24, m34) be the translation vector | |||
::Then the absolute position of the vertex in the 3D world will be: X M + R | |||
::(left multiplication is used because of the row-major notation above) | |||
;Initial transform matrix | |||
:It is used to position the object in the environment before the animation is played. | |||
:When the animation is played, they use the fixed transform matrix and a quaternion. | |||
;Fixed transform matrix | |||
:This transformation is applied before the quaternion+position transform at every keyframe. | |||
:The only transform that can't be handled by the quaternion+position is scaling/mirroring. | |||
:Thus, the fixed transform is a scaling matrix most of the time (no rotation or translation). | |||
:In the above example, the fixed transform scales the van up by 1.82 (along all three axes). | |||
;Quaternions | |||
:Those are used in Oni whenever interpolation of 3D rotation is involved (e.g., [[OBD_talk:TRAM/raw0x34#Quaternions|TRAM rotation]]) | |||
:In this case, rotation at intermediate frames is interpolated from the keyframe quaternions. | |||
===data harvest from TRAM files=== | |||
It's possible to create animations in Mod Tool and making TRAM files out of them. Then you can extract the quaternions and rotations with onisplit [http://mods.oni2.net/node/38 v0.9.54.0] and use them for OBANs. | |||
: [http://oni.bungie.org/community/forum/viewtopic.php?id=2276 HERE's] an excel macro to harvest such data for camera animations. |
edits