
Twilight Tools
- C++
- Retro-engineering
- Projet perso
- 3D
Twilight Tools est un logiciel qui permet de convertir d'anciens fichiers 3D de jeux GameCube, qui sont inutilisables, en fichiers .fbx utilisables par nos logiciels actuels
Préambule
Ce projet est un outil logiciel expérimental destiné à l'analyse et à la conversion de formats 3D. Il ne fournit aucun contenu protégé par le droit d'auteur (modèles 3D, textures, ROMs). L'utilisateur est responsable de la provenance et de l'utilisation des fichiers qu'il traite.
Contexte
En fin 2024, en tant que fan du jeu The Legend of Zelda : Twilight Princess, j'ai eu l'envie de comprendre comment fonctionnaient certains formats de modèles 3D utilisés dans des jeux vidéo plus anciens. Comme ces formats n'étaient généralement pas compatibles avec les outils 3D modernes, l'idée a été de créer un programme permettant de les convertir vers un format aux normes actuelles (.fbx), principalement pour l'expérimentation et l'apprentissage. Ce projet m'a énormément appris, que ce soit ma compréhension des fichiers binaires, de la façon dont ils stockent les informations, mais il a aussi consolidé mes notions de 3D et mes compétences en C++.
Recherche et compréhension du sujet
Cette partie a été la plus compliquée étant donné la documentation quasi inexistante. Après quelques semaines de recherches, j'ai trouvé 2/3 sites comme le wiki sur Tockdom ou le wiki sur Luma Workshop qui évoquaient les sections de données des fichiers BMD, bien que certaines informations soient incomplètes. J'ai également trouvé des projets comme BLEMD pour l'import BMD dans Blender. J'ai appris les fichiers binaires, les données, les offsets, et le format FBX ainsi que son SDK afin de convertir les données récupérées.
Réalisation du projet
Récupération des données
Architecture
Pour recupérer les données, j'ai organisé le projet de façon optimale. La gestion de l'extraction des données du fichier .bmd est séparée en plusieurs fichiers. Il y a un fichier pour chaque sous-section principale (exemple : vtx1.cpp pour la section des sommets).
Fonctions utilitaires
J'ai créé des fonctions utilitaires pour récupérer les données primitives (entiers, flottants) en gérant l'endianness. Exemples : read_int16(), read_uint32(), read_float(). Les données sont ensuite stockées dans des structures adaptées.
Execution concrète
- Créer un objet de type BMD.
- Le BMD crée les objets des sous-sections (VTX1, SHP1, JNT1, etc.).
- Chaque sous-section extrait et traite ses données.
- L'objet BMD contient toutes les données nécessaires pour la conversion FBX.
Conversion en FBX
Modèles 3D et vocabulaire
Un modèle 3D est une forme construite à partir de sommets (vertices) reliés pour former des faces. Chaque sommet peut avoir des normals, des matériaux, des textures, des coordonnées UV, et des bones avec des weights pour l'animation.
Déroulement de la conversion
- Extraction des données du
.bmd. - Construction de l'arborescence (shapes, matériaux, bones).
- Création des bones via matrices et injection dans FbxMesh.
- Traitement des vertices (positions, UV, normals).
- Assemblage final dans FbxMesh.
Extraction d'autres types de fichiers
Le programme peut aussi extraire des archives (Yaz0, RARC) via des outils comme wszst, et convertir des fichiers .gtx en .dds, fonctionnalité initiale de TwilightToolsCLI.
Ce que ce projet m'a apporté
Ce projet m'a permis de comprendre en profondeur les fichiers binaires, les notions d'offsets et de structures de données. Il a renforcé mes compétences en C++, ma compréhension des formats 3D, et ma capacité à analyser et reconstruire des formats complexes à partir de documentation incomplète.






