Ce projet est certainement l’un des plus avancés de mes projets. J'ai commencé à programmer un visualiseur Web BMD pour Twilight Princess (Nintendo GameCube) parce que j'adore ce jeu et en tant que producteur de jeux, je suis fasciné par l'analyse des niveaux et par la plongée dans les détails de leur création. Ce projet est pour moi une façon d’explorer cette passion et d’acquérir une compréhension plus profonde du jeu que j’aime. C'est une expérience d'apprentissage stimulante et enrichissante. J'ai hâte de voir où ce projet me mènera et quelles nouvelles découvertes je ferai en cours de route. Jusqu'à présent, ce projet m'a demandé des mois et des mois de recherche. Recherche basée sur le travail de plus de 20 autres personnes qui ont enquêté et partagé leurs connaissances et leurs découvertes sur rarc, bmd, gcm yaz0, j3d, tev etc. Je suis tombé sur une personne que j'ai écrite pour lui donner crédit :
Merci à : ("LordNed", "thakis", "Jasper St. Pierre", "Kiwi", "Dolphin Emulator Team", "Gamma", "Zan") - pour leurs efforts de pionnier !
L'eau, le brouillard et les textures animées sont des fonctionnalités actuellement sur la feuille de route
Le programme a été programmé en utilisant three.js et webGL. Il fonctionne à une vitesse constante de 60 ips dans le navigateur Chrome. Malheureusement, je ne peux pas partager la visionneuse interactive (modèles, pièces, etc.) avec vous, car je ne veux pas voir jusqu'où sont les limites d'une utilisation équitable de la recherche. Profitez de mon montage :
https://api.fenixfox-studios.com/assets/d43523dd-5cbe-4da4-9c7d-2d275690050a
BMD et BDL sont les formats de fichiers utilisés par Nintendo pour stocker les données de modèle dans ses jeux GameCube et Wii. Ils font partie de la bibliothèque J3DGraph de Nintendo, qui est un composant de la plus grande boîte à outils JSYSTEM. BMD est apparu pour la première fois dans le jeu Luigi's Mansion. C'était alors le seul format de modèle utilisé dans Super Mario Sunshine. Le Wind Waker a en outre introduit le format BDL, qui est une extension de BMD avec une section supplémentaire pour les instructions matérielles FIFO appelée MDL3. MDL3 est utilisé pour améliorer l'efficacité du rendu. Super Mario Galaxy 2 a été le dernier jeu à utiliser ce format de modèle.
JSYSTEM est une boîte à outils de développement de jeux propriétaire utilisée par Nintendo pour créer des jeux pour ses consoles. Il comprend diverses bibliothèques et outils pour des tâches telles que la modélisation 3D, l'animation et la physique. J3DGraph est une bibliothèque au sein de JSYSTEM qui fournit des fonctions de gestion des graphiques 3D et est responsable des formats de fichiers BMD et BDL. BMD signifie Binary MoDel et BDL signifie Binary Display List.
La boîte à outils JSYSTEM a été découverte par les ingénieurs inverseurs et les moddeurs de jeux au début des années 2000, lorsqu'ils ont commencé à analyser et décompiler le code des jeux Nintendo GameCube et Wii. Ils ont constaté que de nombreux jeux partageaient des structures de code et des bibliothèques similaires, ce qui les a amenés à soupçonner l'existence d'une boîte à outils de développement commune. Après de nombreuses recherches et expérimentations, ils ont pu identifier et extraire les bibliothèques JSYSTEM des jeux, et ont commencé à documenter et à procéder à l'ingénierie inverse de ses différents composants, notamment la bibliothèque J3DGraph et les formats de fichiers BMD et BDL.
Au fur et à mesure que la compréhension de JSYSTEM grandissait, les moddeurs ont commencé à développer leurs propres outils pour travailler avec le format JSYSTEM et ont commencé à créer leurs propres modèles et textures personnalisés et même à créer de nouveaux jeux à l'aide des bibliothèques JSYSTEM. Cela a conduit à la création d’une communauté de moddeurs dynamique qui continue d’exister aujourd’hui, avec de nombreux moddeurs partageant leurs découvertes et leurs outils en ligne.
Au début, je n'étais pas vraiment intéressé par les formats de conteneurs *.dol ou *.gcm car d'autres personnes avaient déjà fait un excellent travail en fournissant des outils prêts à l'emploi (j'ai moi-même créé gcm reader plus tard). Après quelques recherches, j'ai trouvé des dossiers qui semblaient contenir des éléments intéressants, comme des pièces et d'autres éléments. De grandes zones, telles que Faron Woods, ont été divisées en morceaux et enregistrées dans des fichiers séparés, qui seraient ensuite fusionnés pour former la zone complète.
Mais je voulais commencer doucement. Peut-être quelque chose de simple ! Après avoir décompressé la plupart des éléments du dossier, j'ai trié les fichiers par taille et j'ai trouvé un objet super simple. Lorsque j'ai vérifié le fichier dans HexWorkshop , je suis tombé sur des marqueurs tels que VTX, INF, DRW et SHP. D’après les positions des sommets, je pouvais dire qu’il s’agissait d’une boîte plate avec un simple bouton de porte. J'ai vite réalisé que c'était la porte du temple du lit du lac.
Je savais à quoi pourrait ressembler l'objet et je savais où chercher les informations de base telles que les coordonnées des sommets ainsi que les informations sur la texture.
Vous devez être prudent car certaines informations sont tout simplement incorrectes pour votre cas. Certains attributs étaient simplement différents de ce que disent ces documents. Mais avoir une telle feuille de format est tout ce dont vous avez besoin pour extraire un modèle 3D et sa texture !
Après ma tentative réussie d’extraire au moins sur un objet simple, j’ai pensé qu’il serait temps de creuser davantage et de m’attaquer à une zone complète ! Armé du même algorithme que celui que je viens d'écrire, j'ai choisi le fichier nommé R00_00. J'espérais que ce serait Ordon Village ou Faron Woods. Mais cela n’avait pas d’importance car je n’avais qu’un tas d’ordures. Il s'agit clairement d'un cas de mauvais ordre des sommets. Pouvez-vous dire en regardant cette image de quelle pièce il s'agit ?
Forme par forme, j’ai lentement tâté le terrain. Ici et là, des falaises et des pierres tombales ont commencé à apparaître. Il est devenu clair que je regardais la zone du cimetière Kakariko.
Après un certain temps, j'ai pu arriver à ce résultat : certains objets manquaient, certaines faces étaient inversées et aucune texture ne semblait appliquée correctement.
La solution était quelque peu déroutante. Bien que certaines formes aient des indices de matériaux spécifiques définis, elles n'avaient pas une relation simple de 1:1. Au lieu de cela, vous deviez examiner la hiérarchie de scènes définie dans la section INF du fichier BMD. Cette hiérarchie consistait en un arbre de nœuds pouvant représenter soit une forme, soit un matériau. En règle générale, la hiérarchie commence par un matériau, suivi de quelques formes. Par exemple, vous pourriez voir quelque chose comme (mat1, shp2, shp5, shp6, mat2, shp1, shp12...). Dans ce cas, les formes 2, 5 et 6 utiliseraient toutes le matériau 1, et ainsi de suite.
Eh bien, super, mais tous ceux qui ont déjà joué à ce jeu remarqueront peut-être que les matériaux ne sont pas à la hauteur. Les couleurs sont ternes, il n'y a pas de mélange entre les matières et le rendu est généralement assez sombre. À ce stade, j’aurais plongé dans la partie la plus époustouflante de tout cela. Le GameCube utilise des étapes TEV, ou étapes Texture Environment, pour gérer ces tâches. Les étapes TEV sont chargées de mélanger les textures, de gérer les couleurs et d'appliquer des effets de transparence. Notez le fait que GameCube ne supportait pas vraiment les effets de transparence tels que nous les connaissons aujourd'hui avec deux passes de rendu et des objets lointains rendus en premier. Il existe des dépôts GitHub, des articles, des fils de discussion sur le forum. Mettez la main sur autant d’informations que possible !
Une autre partie importante que je devais ajouter était les effets atmosphériques comme le brouillard, la floraison et les nuages. Jusqu'à présent, je n'arrivais pas à créer les effets de brouillard et de floraison, mais j'ai trouvé l'ombre du nuage et je l'ai mis dans une scène TEV de mélange. Je cherche toujours les coordonnées UV correctes pour les nuages.
Le résultat final de cette pièce ressemblerait à ceci : (Cela a pris un certain temps pour arriver jusqu'ici en fait)
Ce projet a été un voyage incroyable. Passer mon temps à comprendre comment des gens intelligents ont résolu les limitations techniques du passé m'a aidé à apprécier la beauté complexe de Twilight Princess. J'ai bien progressé, mais il reste encore une énorme liste de choses à explorer et à mettre en œuvre. Je prévois de continuer à travailler sur cette visionneuse, en ajoutant des fonctionnalités telles que le brouillard, le BTK (Texture Animation) et d'autres effets atmosphériques pour la rendre aussi précise et immersive que possible.