Hallo zusammen,
ich habe die interne Struktur einiger Model- und Animationsdateien (RenderWare-basiert) analysiert. Hier ist eine Zusammenfassung der Ergebnisse, inklusive der Hierarchien und der Funktionsweise der Animationstracks, damit wir gemeinsam an einem Importer/Exporter arbeiten können.
1. RenderWare Clump & Frame-Hierarchie
Die Model-Dateien nutzen das klassische RenderWare-Format (Version 3.0.45.3008). Ein zentraler Aspekt ist die Frame List, welche die Skelett-Struktur definiert.
Skelett-Struktur: Das Beispiel-Asset enthält insgesamt 78 Frames.
Hierarchie: Die Frames sind hierarchisch über Parent-IDs verknüpft (z. B. Frame 0 ist die Wurzel, Frame 1 ist ein Kind von Frame 0).
Transformationen: Jeder Frame definiert eine relative Position sowie eine 3x3 Rotationsmatrix.
Geometrie: Die Geometrie-Daten (Vertices, Faces, UV-Maps) sind in Geometry-Chunks gespeichert, die über Atomics an die entsprechenden Frames gebunden werden.
2. EAN-Animationsdateien (EAN Parser V6)
Die Animationen liegen im EAN-Format vor. Ein wesentliches Merkmal ist die Trennung in Header-Informationen und verschiedene Animationstracks.
Header-Daten:
Magic Value: `0x1C02000A`.
Animationseinheit: Im Testfall trägt die Einheit den Namen `'tree_18_g_1'`.
Track-Analyse:
Die Animationen bestehen aus mehreren Tracks, die jeweils auf eine Bone ID (entspricht dem Index in der Frame List) verweisen.
Track-Typen: Es wurden verschiedene Datenformate identifiziert, darunter:
Matrix 3x4 / 4x4: Direkte Transformationsmatrizen (oft nicht direkt glTF-kompatibel).
Quaternions (R): Rotationsdaten für die Bones.
Translation/Scale: Einzelwerte für die Positionierung.
Zeitstempel (Keyframes): Die Zeitstempel-Listen werden über Offsets referenziert (z. B. 3 Frames bei 0.0s, 1.0s, etc.).
3. Technische Details für Entwickler (Parser-Logik)
Falls jemand eigene Tools schreiben möchte, hier die wichtigsten Erkenntnisse:
ECL/RW-Parser: Nutzt eine `SectionTypes`-Konfiguration (INI), um bekannte RenderWare-IDs zu identifizieren. Ein Chunk wird als Container erkannt, wenn er mit einem `STRUCT (0x01)` beginnt oder eine bekannte ID besitzt.
EAN-Parser: Sucht gezielt nach der Magic Number und extrahiert die Track-Offsets. Besonderes Augenmerk liegt auf der Bone-ID-Zuweisung, um die Animationen den richtigen Frames im Skelett zuzuordnen.
Offene Punkte / Nächste Schritte:
1.
Konvertierung: Die 3x4/4x4 Matrizen in den EAN-Tracks müssen für moderne Engines (wie Unity/Unreal) in TRS-Werte (Translation, Rotation, Scale) zerlegt werden.
2.
Bone-Mapping: Validierung, ob die Bone-IDs im EAN-Format 1:1 mit den Indizes der Frame-List in der Clump-Datei übereinstimmen.
Die detaillierten Reports habe ich hier angehängt. Wer sich mit Matrix-Konvertierung auskennt, ist herzlich eingeladen, hier zu unterstützen!
Ich hoffe, das hilft der Community weiter!
Link zu den Reports:
[Only registered and activated users can see links. Click Here To Register...]