1 Prinzip
1.1 Begriffe
- Matrix: Eine Matrix ist das mathematische Konstrukt, welches die Rotation und Verschiebung eines Meshs definiert. Eine Matrix ist also gleichermaßen zu verstehen als "Parameter, der die Lage im Raum vorgibt".
- Meshanimations-Matrix: Dies ist die "Ziellage" der Meshanimation, d.h. "wohin" sich das Mesh, ausgehend von seiner Grundlage verbiegt/verzieht/dehnt
- Grundanimation: Dies ist die Grundposition, die das Mesh hat - genauso, wie alle anderen Meshs auch einer Animation zugewiesen sind, ist das natürlich auch mit Meshanimations-Meshs der Fall.
1.2 Momentane Einschränkungen
- Die einzigen, momentan in LOTUS unterstützten Meshanimationen sind solche mit nur einer Meshanimations-Matrix.
- Die Animation der Meshanimations-Matrix muss eine direkte Unteranimation der Grundanimation sein.
1.3 Vorgang
Bei einer Meshanimation mit einer Meshanimations-Matrix wird jedem Eckpunkt des Meshs (Vertex) die Gewichtung mitgeteilt, mit der es dieser Matrix (also Animation) folgen soll anstelle der Grundanimation zu folgen, welche dem Mesh traditionell zugewiesen wurde.
Im Beispiel des Faltenbalgs konkret erklärt: Der Faltenbalg wird zunächst am übergeordneten Fahrzeugteil, z.B. A als Ganzes "befestigt" (Grundanimation), indem er der Animation des A-Wagens zugeordnet wird. Nun wird den Vertices mitgeteilt, wie sehr sie dem zweiten, untergeordnetem Fahrzeugteil, z.B. B folgen sollen: Je näher sie an B sind, desto höher ist ihre Gewichtung, beim Andockpunkt ist sie 1. Je näher sie jedoch dem A-Wagen sind, desto geringer ist die Gewichtung; an dessen Andockpunkt ist sie 0.
Mithilfe dieser Gewichtungen in Verbindung mit der Angabe, welche Meshanimations-Matrix verwendet werden soll, berechnet LOTUS die aktuelle Form des Faltenbalgs.
2 Vorbereitung im 3D-Programm
Bei den Gewichtungen handelt es sich um zusätzliche Vertexdaten, deren Export insbesondere aus Blender in das x3D-Format nicht möglich ist. Deshalb muss hier auf einen Kniff zurückgegriffen werden:
Es wird zunächst eine Kopie des zu animierenden 3D-Objektes angelegt. Dieses erhält den Namen des Originalobjektes und zusätzlich den Präfix "@2m_". Heißt das Originalobjekt also "Faltenbalg", dann heißt die Kopie "@2m_Faltenbalg".
Diese Kopie muss künftig in JEDEM Export des Originalobjektes mit exportiert werden und muss - nach Änderungen am Originalobjektes - diesem von der Form her wieder genau angeglichen werden, idealerweise muss eine neue Kopie angelegt werden. Kleinste Abweichungen der Vertex-Daten (Position, Normale usw.) sind ok, aber mehr wird nicht toleriert.
Die Technik ist nun die Folgende: Beim Import von Original-Objekt und @2m_-Kopie in das ContentTool werden nun die Texturkoordinaten der Kopie in das Originalobjekt übernommen und als zweiten Satz Texturkoordinaten gespeichert.
Dieser zweite Satz kann nun einerseits für spezielle Texturen, wie der AO-Map, verwendet werden, werden aber auch für die Meshanimationen genutzt, und zwar werden die zweiten Texturkoordinaten als Gewichtungen interpretiert.
Oder anders gesagt: Liegt die dem Vertex zugewiesene Texturkoordinate (im @2m_-Mesh) ganz links (x = 0), dann wird diesem Vertex die Gewichtung 0 zugeordnet, liegt sie ganz rechts an der rechten Kante der Textur (x = 1 bzw. 128, 256, ...) , dann wird diesem Vertex die Gewichtung 1 zugeordnet. Auf diese Weise kann also über die x-Werte der Texturkoordinaten bestimmt werden, wie weit welches Vertex deformiert werden soll.
Wichtig: Die zweite Texturkoordinate (y) ist momentan noch irrelevant. Denkbar ist aber die Einführung von Meshanimationen mit zwei Animations-Matrizen; dann würde hier die zweite Texturkoordinate zum Einsatz kommen.
3 Konfigurierung im Content-Tool
Nach dem Import dieses Objekt-Paares sollte dennoch nur ein neues Objekt erscheinen; das @2m_-Objekt darf in der Liste rechts nicht auftauchen!
Die Vorgehensweise ist nun folgendermaßen:
- Zunächst müssen dem neuen Mesh Tangenten-Informationen zugewiesen werden (rechts Abschnitt "Ausgewähltes Mesh" und darunter "Tangenten-Info hinzufügen")
- Das Mesh muss der Grundanimation zugewiesen werden, von der ausgehend die Meshanimation berechnet werden soll
- Die Ziel-Animation (Meshanimations-Matrix) muss ggf. als direkte Unteranimation angelegt werden oder bereits existieren. Deren Name ist zu merken.
- Sofern es auch andere Objekte gibt, die die selbe Textur/das selbe Material nutzen, ist eine Kopie des Materials anzulegen, die nur dem zu animierenden Mesh zugewiesen wird. Gibt es mehre, verschiedene Meshanimationen, müssen sie auch über verschiedene Material-Kopien verfügen.
- Die Eigenschaften des Materials sind folgendermaßen einzustellen:
- Material-Typ: "Complex+Normal+Simple Meshanim"
- Im Abschnitt "Animationen" ist für "Meshanimations-Matrix" die Unteranimation auszuwählen.
- Die restlichen Eigenschaften können wie üblich konfiguriert werden.
Die Animation kann bereits im Content-Tool getestet werden, sofern auch die Animationen selbst getestet werden können - aufgrund dieser Einschränkung können insbesondere Faltenbälge daher nicht getestet werden, eben weil sie den Schienenfahrzeug-Animationen zugewiesen werden müssen, die im Content-Tool nicht getestet werden können.
Zu beachten ist, dass eine Nicht-Textur-AO generell und eine Textur-AO mit getrennten Texturkoordinaten nicht möglich ist, da diese wie erklärt für die Gewichtung verwendet werden. Möglich ist lediglich eine Textur-AO, die den ersten Texturkoordinaten-Satz verwendet.