OBD:OBAN: Difference between revisions

1,065 bytes removed ,  9 December 2023
m
changed family
No edit summary
m (changed family)
 
(20 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Main Page]] >> [[OBD:Oni Binary Data|Oni Binary Data]] >> [[OBD:File types|File Types]] >> OBAN File
{{OBD_File_Header | type=OBAN | prev=Mtrl | next=OBDC | name=Object Animation | family=General | desc='''OBAN'''s are arrays for storing keyframes in an object or camera animation, as well as basic info like whether the animation loops, and how it does so. | align=center}}




<CENTER>[[OBD:Mtrl|<==]] <FONT SIZE=5>OBAN File</FONT> [[OBD:OBDC|==>]]<BR>
[[Image:oban_a.gif]]
<FONT SIZE=2>Object AnimationFile</FONT></CENTER>




http://www6.fh-eberswalde.de/user/dkriesch/onistuff/images/oban_a.gif
{{Table}}
 
{{OBD Table Header}}
 
{{OBDtr|0x00|res_id|FF0000|01 '''86 00 00'''|134|00134-Blackvan_FB.OBAN}}
{| BORDER=1 WIDTH=100% CELLPADDING=2 CELLSPACING=0
{{OBDtr|0x04|lev_id|FFFF00|01 00 00 '''06'''|3 |level 3}}
|- ALIGN=CENTER BGCOLOR="#FFDDBB"
{{OBDtr|0x08|char[12]|00FF00|00 00 00 00   |0 |padding }}
| WIDTH=15% | <B>Hex</B>
{{OBDtr|0x14|int32  |00FF00|00 00 00 00    ||flags; used values:
| WIDTH=15% | <B>Translation</B>
:0x'''01''' 00 00 00 - loop animation normally
| WIDTH=70% | <B>Meaning</B>
:0x'''02''' 00 00 00 - loop animation back to back
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
:0x'''04''' 00 00 00 - select start frame randomly
| BGCOLOR="#FF0000" | 01 86 00 00
:0x'''08''' 00 00 00 - autostart animation (after an animated object is created)
| 134
:0x'''10''' 00 00 00 - local animation; this animation does not contain world positioning information, the object position is determined by the origin matrix in [[OBOA]]; local animations also use a Z-up coordinate system
| ALIGN=LEFT | 00134-Blackvan_FB.OBAN
}}
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|- ALIGN=CENTER VALIGN=TOP
| BGCOLOR="#FFFF00" | 01 00 00 06
|0x18||matrix||
| 3
{|border=1 cellspacing=0 style="white-space:nowrap"
| ALIGN=LEFT | level 3
|-BGCOLOR="#FFC8C8"
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|C2 F5 E8 3F||AB D7 AA B3||EC 89 13 35
| BGCOLOR="#00FF00" | 00 00 00 00
|-BGCOLOR="#FFFFC8"
| 0
|EC 89 13 35||ED 89 13 B4||C2 F5 E8 BF
| ALIGN=LEFT | Space marker. Don't alter it.
|-BGCOLOR="#C8FFC8"
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|B1 D7 AA 33||C2 F5 E8 3F||EB 89 13 B4
| BGCOLOR="#FFC8C8" | C2 F5 E8 3F
|-BGCOLOR="#C8FFFF"
| 1.819999
|6B 9A 94 44||97 FD 5B C2||5D 06 DA C2
| ALIGN=LEFT | m11 element of the initial position transform matrix
|}
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|
| BGCOLOR="#FFC8C8" | AB D7 AA B3
{|border=1 cellspacing=0 style="white-space:nowrap"
| -7.955471e-8
|1.819999||-7.955471e-8||5.496247e-7
| ALIGN=LEFT | m21 element of the initial position transform matrix
|-
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|5.496247e-7||-1.374061e-7||-1.819999
| BGCOLOR="#FFC8C8" | EC 89 13 35
|-
| 5.496247e-7
|7.955475e-8||1.819999||-1.374061e-7
| ALIGN=LEFT | m31 element of the initial position transform matrix
|-
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|1188.825561||-54.997646||-109.012428
| BGCOLOR="#FFFFC8" | EC 89 13 35
|}
| 5.496247e-7
|ALIGN=LEFT|initial position transform matrix
| ALIGN=LEFT | m12 element of the initial position transform matrix
|- ALIGN=CENTER VALIGN=TOP
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|0x48||matrix||
| BGCOLOR="#FFFFC8" | ED 89 13 B4
{|border=1 cellspacing=0 style="white-space:nowrap"
| -1.374061e-7
|-BGCOLOR="#FFC8FF"
| ALIGN=LEFT | m22 element of the initial position transform matrix
|C2 F5 E8 3F||00 00 00 00||00 00 00 00
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|-BGCOLOR="#FFC800"
| BGCOLOR="#FFFFC8" | C2 F5 E8 BF
|00 00 00 00||C2 F5 E8 3F||00 00 00 00
| -1.819999
|-BGCOLOR="#C800C8"
| ALIGN=LEFT | m32 element of the initial position transform matrix
|00 00 00 00||00 00 00 00||C2 F5 E8 3F
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|-BGCOLOR="#C87C64"
| BGCOLOR="#C8FFC8" | B1 D7 AA 33
|00 00 00 00||00 00 00 00||00 00 00 00
| 7.955475e-8
|}
| ALIGN=LEFT | m13 element of the initial position transform matrix
|
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
{|border=1 cellspacing=0 style="white-space:nowrap"
| BGCOLOR="#C8FFC8" | C2 F5 E8 3F
|1.819999||0.0||0.0
| 1.819999
|-
| ALIGN=LEFT | m23 element of the initial position transform matrix
|0.0||1.819999||0.0
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|-
| BGCOLOR="#C8FFC8" | EB 89 13 B4
|0.0||0.0||1.819999
| -1.374061e-7
|-
| ALIGN=LEFT | m33 element of the initial position transform matrix
|0.0||0.0||0.0
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|}
| BGCOLOR="#C8FFFF" | 6B 9A 94 44
| ALIGN=LEFT | fixed transform matrix
| 1188.825561
{{OBDtr|0x78|int16|B0C3D4|50 00|80 | fubared animation frame length (in 1/60 seconds); does not work}}
| ALIGN=LEFT | m14 element of the initial position transform matrix (x-position)
{{OBDtr|0x7A|int16|E7CEA5|F5 01|501 | animation length in frames}}
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
{{OBDtr|0x7C|int16|FFDDDD|00 00|0   | stop frame for the first "half" of the animation; used by door animations to distinguish between open and close sequences }}
| BGCOLOR="#C8FFFF" | 97 FD 5B C2
{{OBDtr|0x7E|int16|64AAAA|65 00|101 | 101 keyframes in array}}
| -54.997646
{{OBDtrBK|First keyframe (black outline)}}
| ALIGN=LEFT | m24 element of the initial position transform matrix (y-position, height)
|- ALIGN=CENTER VALIGN=TOP
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|0x00||quaternion||
| BGCOLOR="#C8FFFF" | 5D 06 DA C2
{|border=1 cellspacing=0 style="white-space:nowrap"
| -109.012428
|-BGCOLOR="#EBEBEB"
| ALIGN=LEFT | m34 element of the initial position transform matrix (z-position)
| F4 04 35 BF||6A 19 C4 B3||CE 3C 03 B4||F3 04 35 BF
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|}
| BGCOLOR="#FFC8FF" | C2 F5 E8 3F
|
| 1.819999
{|border=1 cellspacing=0 style="white-space:nowrap"
| ALIGN=LEFT | m11 element of the fixed transform matrix
| -0.7071068|| -9.131584e-8|| -1.222244e-7|| -0.7071067
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|}
| BGCOLOR="#FFC8FF" | 00 00 00 00
|ALIGN=LEFT|object rotation
| 0.000000
|- ALIGN=CENTER VALIGN=TOP
| ALIGN=LEFT | m21 element of the fixed transform matrix
|0x10||vector||
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
{|border=1 cellspacing=0 style="white-space:nowrap"
| BGCOLOR="#FFC8FF" | 00 00 00 00
|-BGCOLOR="#8C8CCC"
| 0.000000
|C2 F5 E8 3F||AB D7 AA B3||EC 89 13 35
| ALIGN=LEFT | m31 element of the fixed transform matrix
|}
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|
| BGCOLOR="#FFC800" | 00 00 00 00
{|border=1 cellspacing=0 style="white-space:nowrap"
| 0.000000
|1188.825561||-54.997646||-109.012428
| ALIGN=LEFT | m12 element of the fixed transform matrix
|}
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
|ALIGN=LEFT|object position
| BGCOLOR="#FFC800" | C2 F5 E8 3F
{{OBDtr|0x1C|int32|FF00C8|00 00 00 00   |0 |elapsed time in frames}}
| 1.819999
| ALIGN=LEFT | m22 element of the fixed transform matrix
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC800" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | m32 element of the fixed transform matrix
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C800C8" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | m13 element of the fixed transform matrix
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C800C8" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | m23 element of the fixed transform matrix
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C800C8" | C2 F5 E8 3F
| 1.819999
| ALIGN=LEFT | m33 element of the fixed transform matrix
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | m14 element of the fixed transform matrix (x translation)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | m24 element of the fixed transform matrix (y translation)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | m34 element of the fixed transform matrix (z translation)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#B0C3D4" | 50 00
| 80
| ALIGN=LEFT | number of frames ???
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | F5 01
| 501
| ALIGN=LEFT | animation time in 1/60 seconds (8.35 seconds)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 00 00
| 0
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 65 00
| 101
| ALIGN=LEFT | 101 packages follow (one package is edged in black)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#000000"
| COLSPAN=3 | <FONT SIZE=2 COLOR="#FFFFFF">Below follows the first package.</FONT>
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | F4 04 35 BF
| -0.7071068
| ALIGN=LEFT | x-value of the rotation quaternion
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | 6A 19 C4 B3
| -9.131584e-8
| ALIGN=LEFT | y-value of the rotation quaternion
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | CE 3C 03 B4
| -1.222244e-7
| ALIGN=LEFT | z-value of the rotation quaternion
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | F3 04 35 BF
| -0.7071067
| ALIGN=LEFT | w-value of the rotation quaternion
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 6B 9A 94 44
| 1188.825561
| ALIGN=LEFT | x-position
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 97 FD 5B C2
| -54.997646
| ALIGN=LEFT | y-position (height)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 5D 06 DA C2
| -109.012428
| ALIGN=LEFT | z-position
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | 00 00 00 00
| 0
| ALIGN=LEFT | passed time in 1/60 seconds
|}
|}


Elements m41, m42, m43, m44 of both transform matrices are missing. m41, m42 and m43 are the projection transform coefficients and they are not needed so they are 0.0 and the m44 element is always 1.0 for a transform matrix. (column major transform matrices like in Open GL, for Direct 3D they need to be transposed)
Object animations are used to animate [[OBD:OBOA|objects]] (doors included), [[OBD:TRIG|triggers]], cameras and characters. Object animations may be referenced from OBOA but they can also be set using env_setanim script command. Camera animations are never referenced from data files, they're started from script using cm_anim/cm_interpolate. Because of this the only way to tell if an animation is intended for camera or for an object is to look at the level scripts.


The initial transform matrix can be used to position the object in the environment without playing the animation frames. The animation frames themself include this transform so it is not needed to actually play the animation.
Characters can have an object animation applied to them by using chr_envanim/chr_envanim_block. The object animation controls the movement of the character and it's normally used together with a [[OBD:TRAM|Totoro animation]] that has the 'real world' flag set. This can be used to make the character appear attached to another animated object, for example the motorcycle in the opening of Lab level.


The fixed transform matrix must be applied to every animation frame. For some animations this matrix is the identity matrix so it is not really needed but some animations for composed objects (like the motorcycle animation from level 3 intro) need this transform.
;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 ([[wp:Row-_and_column-major_order|Direct 3D convention]]), although OpenGL and Oni use them as columns.
:[[wp: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 [[wp: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, it coresponds to the first animation frame.
: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.


<HR>
<CENTER>[[OBD:Mtrl|<==]] <B>OBAN File</B> [[OBD:OBDC|==>]]</CENTER>
<HR>


----
----
{{OBD_File_Footer | type=OBAN | prev=Mtrl | next=OBDC | name=Object Animation | family=General | align=center}}


[[Main Page]] >> [[OBD:Oni Binary Data|Oni Binary Data]] >> [[OBD:File types|File Types]] >> OBAN File
{{OBD}}