Media

Twilight Tools

2024 - 2025
  • 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.

  • Media
  • Media
  • Media

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.

  • Media
  • Media

Execution concrète

  1. Créer un objet de type BMD.
  2. Le BMD crée les objets des sous-sections (VTX1, SHP1, JNT1, etc.).
  3. Chaque sous-section extrait et traite ses données.
  4. 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

  1. Extraction des données du .bmd.
  2. Construction de l'arborescence (shapes, matériaux, bones).
  3. Création des bones via matrices et injection dans FbxMesh.
  4. Traitement des vertices (positions, UV, normals).
  5. Assemblage final dans FbxMesh.
  • Media
  • Media

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.