Dieser Eintrag befasst sich mit der Definition von Animationen
1 Wo werden Animationen definiert?
Das Basisgerüst setzt bei der [tt]animations[/tt]-Tabelle von Modeldateien (*.mdl), Meshdateien (*.msh) und Groupdateien (*.grp) an. Ohne Animation sieht diese wie folgt aus (oder wurde der Einfachheit halber einfach weg gelassen):
[code]animations = {},[/code]Es können darin beliebig viele Animationen definiert werden.
2 Basisgerüst
[code='Basisgerüst (Generisch)']name = {
params = {
.
.
.
},
type = ...,
},[/code]Die Definition einer Animation beginnt mit der ID der Animation (Zeile 1, [tt]name[/tt]), mit der später per [url='https://www.train-fever.net/lexikon/index.php/Entry/97-Animationen-Events/'][u]Event[/u][/url] die Animation referenziert wird. Die Tabelle [tt]params[/tt] beinhaltet die Parameter für die Animation (Keyframes, etc.), welche vom Animationstyp [tt]type[/tt] abhängen.
3 Animationstypen
Es sind (mir) drei verschiedene Animationstypen in Train Fever bekannt:
[table]
[tr]
[td]Animationstyp:[/td]
[td]KEYFRAME[/td]
[td]KEYFRAME_MATRIX[/td]
[td]FILE_REF[/td]
[/tr]
[tr]
[td]Verwendung:[/td]
[td]Von Hand erstellte Animationen[/td]
[td]Von Scripts erstellte Animationen[/td]
[td]große Animationen[/td]
[/tr]
[tr]
[td]Beispiel:[/td]
[td][url='https://www.train-fever.net/lexikon/index.php/Entry/71-T%C3%BCren-animieren/'][u]Fahrzeugtüre[/u][/url][/td]
[td][url='https://www.train-fever.net/lexikon/index.php/Entry/31-Pleuelstangen-animieren/'][u]Pleulstangen[/u][/url][/td]
[td]Personen[/td]
[/tr]
[tr]
[td]Methode zur Definition der Keyframes[/td]
[td]Eulerwinkel und lineare Transformation[/td]
[td][url='https://www.train-fever.net/lexikon/index.php/Entry/83-Transformationsmatrix/'][u]Transformationsmatrix[/u][/url][/td]
[td][url='https://www.train-fever.net/lexikon/index.php/Entry/83-Transformationsmatrix/'][u]Transformationsmatrix[/u][/url][/td]
[/tr]
[/table]
Was jedoch man selber verwenden möchte ist dem eigenen Geschmack überlassen. Da der "KEYFRAME"-Typ der am leichtesten Verständliche ist - es gibt hierfür am Meisten Beispiele (quasi jede Fahrzeugtüre) - empfehle ich diesen zu benutzen.
3.1 KEYFRAME
Das Basisgerüst sieht bei diesem Animationstyp folgender Maßen aus:
[code='Basisgerüst (Animationstyp KEYFRAME)']name = {
params = {
keyframes = {
.
.
.
},
origin = { 0, 0, 0, },
},
type = "KEYFRAME",
},[/code][tt]origin = { x, y, z}[/tt] gibt dabei den Punkt (im Koordinatensystem des zu drehenden Objektes, Angaben in Metern) an, um den die Rotation ausgeführt wird. Die Tabelle [tt]keyframes[/tt] muss aus mindestens zwei Keyframes des folgenden Formates bestehen, dabei muss der erste Keyframe die Zeitpunkt '0' (Null) besitzen:
[code='KEYFRAME (Animationstyp KEYFRAME)']{
time = 0,
rot = {0,0,0},
transl = {0,0,0},
},[/code]Die Werte besagen folgendes:
[list][*][tt]time[/tt]: Zeitpunkt des Keyframes in Millisekunden
[*][tt]rot = {z,y,x}[/tt]: Gibt die Rotation gegenüber der Lage ohne Animation an. Es handelt sich dabei um Eulerwinkel (in Grad) nach der [url='https://de.wikipedia.org/wiki/Eulersche_Winkel#Gier-Nick-Roll:_z.2C_y.E2.80.B2.2C_x.E2.80.B3-Konvention'][b]z, y′, x″-Konvention[/b][/url].
[*][tt]transl = {x,y,z}[/tt]: Translatorische Verschiebung des Objektes (bzgl. Lage ohne Animation, in Metern), welche [i]nach [/i]der Drehung angewendet wird.
[/list]
3.2 KEYFRAME_MATRIX
Das Basisgerüst sieht bei diesem Animationstyp folgender Maßen aus:
[code='Basisgerüst (Animationstyp KEYFRAME_MATRIX)']name = {
params = {
keyframes = {
.
.
.
},
},
type = "KEYFRAME_MATRIX",
}[/code]Die Tabelle [tt]keyframes[/tt] muss aus mindestens zwei Keyframes des folgenden Formates bestehen, dabei muss der erste Keyframe die Zeitpunkt '0' (Null) besitzen:
[code='KEYFRAME (Animationstyp KEYFRAME_MATRIX)']{
time = 0,
transf = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, },
},[/code]Die Werte besagen folgendes:
[list][*][tt]time[/tt]: Zeitpunkt des Keyframes in Millisekunden
[*][tt]transf = {Transformationsmatrix}[/tt]: [url='https://www.train-fever.net/lexikon/index.php/Entry/83-Transformationsmatrix/'][b]Transformationsmatrix[/b][/url] (bzgl. Lage ohne Animation) entsprechend den Matrizen zur Objektplatzierung in Model- und Group-Dateien.
[/list]Ein Hinweise noch: Jeder Punkt/Vertex bewegt sich auf einer geraden Bahn zwischen zwei Keyframes! Rotierende Objekte werden also - je nach Auflösung der Bewegung - gestaucht und gestreckt bei der Bewegung.
Im Anhang ein Beispiel. In der Modliste taucht es als "Forumsbeispiel Animation Matrix" auf.
3.3 FILE_REF
Das Basisgerüst sieht bei diesem Animationstyp folgender Maßen aus:
[code='Basisgerüst (Animationstyp FILE_REF)']name = {
params = {
id = ...,
},
type = "FILE_REF",
},[/code][tt]id = "Datei.ani"[/tt] referenziert dabei auf die [url='https://www.train-fever.net/lexikon/index.php/Entry/9-Mesh-Dateien-und-Animationen-msh-msh-blob-ani/#Animationen_(.ani)'][b]Animationsdatei (*.ani)[/b][/url] relativ zum Pfad [tt]res/models/animation/[/tt]
3.4 Beispiel mit allen Typen
[code='Beispiel']animations = {
keyframeAnimation= {
params = {
keyframes = {
{
time = 0,
rot = {0,0,0},
transl = {0,0,0},
}, {
time = 1000,
rot = {360,0,0},
transl = {0,0,10},
}
},
origin = { 1, 2, 0, },
},
type = "KEYFRAME",
},
keyframeMatrixAnimation = {
params = {
keyframes = {
{
time = 0,
transf = {
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1,
},
},
{
time = 5000,
transf = {
1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 5, 1,
},
},
},
},
type = "KEYFRAME_MATRIX",
},
fileRefAnimation = {
params = {
id = "man01_idle_lod_2/_root.ani",
},
type = "FILE_REF",
},
},[/code]Dieser Eintrag wurde mit größter Sorgfalt erstellt. Es kann aber nicht ausgeschlossen werden, dass sich Fehler eingeschlichen haben ;) .