Этот проект определенно один из самых продвинутых моих. Я начал программировать веб-просмотрщик BMD для Twilight Princess (Nintendo GameCube), потому что мне нравится эта игра, и как продюсер игры мне интересно анализировать уровни и погружаться в детали того, как они были созданы. Этот проект — для меня способ раскрыть эту страсть и глубже понять игру, которую я люблю. Это сложный и полезный опыт обучения. Мне не терпится увидеть, куда меня приведет этот проект и какие новые открытия я сделаю на этом пути. До сих пор этот проект занимал у меня месяцы исследований. Исследование, основанное на работе более 20 других людей, которые исследовали и делились своими знаниями и выводами о rarc, bmd, gcm yaz0, j3d, tev и т. д. Я встретил одного человека, которого я записал, чтобы выразить ему благодарность:
Благодарим: ("LordNed", "thakis", "Jasper St. Pierre", "Kiwi", "Dolphin Emulator Team", "Gamma", "Zan") - за их новаторские усилия!
Вода, туман, анимированные текстуры — это функции, которые в настоящее время находятся в планах.
Программа была написана с использованием Three.js и webGL. В браузере Chrome он работает с постоянной частотой 60 кадров в секунду. К сожалению, я не могу поделиться с вами интерактивным средством просмотра (моделями, комнатами и т. д.), поскольку не хочу видеть, насколько широки пределы добросовестного использования исследований. Наслаждайтесь моим монтажом:
https://api.fenixfox-studios.com/assets/d43523dd-5cbe-4da4-9c7d-2d275690050a
BMD и BDL — это форматы файлов, используемые Nintendo для хранения данных моделей в играх GameCube и Wii. Они являются частью библиотеки J3DGraph компании Nintendo, которая является компонентом более крупного набора инструментов JSYSTEM. БМД впервые появилась в игре Luigi's Mansion. Тогда это был единственный формат модели, использовавшийся в Super Mario Sunshine. Wind Waker также представил формат BDL, который является расширением BMD с дополнительным разделом для инструкций FIFO материала, называемым MDL3. MDL3 используется для повышения эффективности рендеринга. Super Mario Galaxy 2 была последней игрой, в которой использовался этот формат модели.
JSYSTEM — это собственный набор инструментов для разработки игр, используемый Nintendo для создания игр для своих консолей. Он включает в себя различные библиотеки и инструменты для таких задач, как 3D-моделирование, анимация и физика. J3DGraph — это библиотека в составе JSYSTEM, которая предоставляет функции для обработки 3D-графики и отвечает за форматы файлов BMD и BDL. BMD означает двоичную модель, а BDL означает двоичный список отображения.
Набор инструментов JSYSTEM был обнаружен реверс-инженерами и моддерами игр в начале 2000-х годов, когда они начали анализировать и декомпилировать код игр Nintendo GameCube и Wii. Они обнаружили, что многие игры имеют схожие структуры кода и библиотеки, что заставило их заподозрить существование общего инструментария разработки. После долгих исследований и экспериментов они смогли идентифицировать и извлечь библиотеки JSYSTEM из игр, а также начали документировать и реконструировать ее различные компоненты, включая библиотеку J3DGraph и форматы файлов BMD и BDL.
По мере того как понимание JSYSTEM росло, моддеры начали разрабатывать собственные инструменты для работы с форматом JSYSTEM и начали создавать свои собственные модели, текстуры и даже создавать новые игры, используя библиотеки JSYSTEM. Это привело к созданию активного сообщества моддеров, которое продолжает существовать и сегодня, и многие моддеры делятся своими открытиями и инструментами в Интернете.
Вначале меня не особо интересовали форматы контейнеров *.dol или *.gcm, поскольку другие люди уже проделали большую работу, предоставив готовые к использованию инструменты (позже я сам создал программу чтения gcm). После небольшого поиска я нашел папки, которые выглядели так, будто в них могут быть какие-то интересные вещи, например комнаты и другие элементы. Большие территории, такие как Фарон Вудс, были разделены на фрагменты и сохранены в отдельных файлах, которые позже были объединены в единую территорию.
Но я хотел начать с легкого. Может быть, что-то простое! Распаковав большую часть содержимого папки, я отсортировал файлы по размеру и нашел очень простой объект. Когда я проверял файл в HexWorkshop , я наткнулся на такие маркеры, как VTX, INF, DRW и SHP. По позициям вершин я мог сказать, что это плоская коробка с простой дверной ручкой. Вскоре я понял, что это дверь из храма на дне озера.
Я знал, как может выглядеть объект, и знал, где искать основную информацию, такую как координаты вершин, а также информацию о текстуре.
Вы должны быть осторожны, так как некоторая информация просто неверна для вашего случая. Некоторые атрибуты просто отличались от того, о чем говорят эти документы. Но наличие такой таблицы форматирования — это все, что вам нужно для извлечения 3D-модели и ее текстуры!
После моей успешной попытки извлечь хотя бы простой объект, я подумал, что пора копать дальше и обследовать всю территорию! Вооружившись тем же алгоритмом, который я только что написал, я выбрал файл с именем R00_00. Я надеялся, что это будет Ордон-Виллидж или Фарон-Вудс. Но это не имело значения, потому что все, что я получил, — это куча мусора. Очевидно, случай неправильного порядка вершин. Сможете ли вы, глядя на это изображение, сказать, что это за комната?
Форма за формой я медленно проверял воду. Тут и там стали появляться скалы и надгробия. Стало ясно, что я смотрю на кладбище Какарико.
Спустя некоторое время мне удалось добиться такого результата: некоторые объекты отсутствовали, некоторые грани были инвертированы, и ни одна текстура, похоже, не была применена правильно.
Решение было несколько запутанным. Хотя для некоторых форм были определены определенные индексы материалов, они не имели прямой зависимости 1:1. Вместо этого вам нужно было просмотреть иерархию сцен, определенную в разделе INF файла BMD. Эта иерархия состояла из дерева узлов, которые могли представлять либо форму, либо материал. Обычно иерархия начинается с материала, за которым следуют некоторые формы. Например, вы можете увидеть что-то вроде (mat1, shp2, shp5, shp6, mat2, shp1, shp12...). В этом случае формы 2, 5 и 6 будут использовать материал 1 и так далее.
Что ж, отлично, но каждый, кто когда-либо играл в эту игру, мог заметить, что материалы выглядят не очень хорошо. Цвета выключены, материалы не смешиваются, и в целом он выглядит довольно темным. На этом этапе я бы погрузился в самую умопомрачительную часть всего этого. Для решения этих задач GameCube использует этапы TEV или этапы текстурной среды. Этапы TEV отвечают за смешивание текстур, управление цветами и применение эффектов прозрачности. Обратите внимание на тот факт, что GameCube на самом деле не поддерживал эффекты прозрачности, которые мы знаем сегодня, с двумя проходами рендеринга и первыми отрисовываемыми удаленными объектами. Есть несколько репозиториев GitHub, несколько статей, несколько тем на форуме. Получите как можно больше информации!
Еще одна важная часть, которую мне нужно было добавить, — это атмосферные эффекты, такие как туман, цветение и облака. До этого момента мне не удавалось успешно создавать эффекты тумана и цветения, но я нашел тень от облаков и поместил их в сцену смешивания TEV. Я все еще ищу правильные UV-координаты облаков.
Конечный результат этой комнаты будет таким: (На самом деле, чтобы зайти так далеко, потребовалось довольно много времени)
Этот проект стал невероятным путешествием. Потратив время на выяснение того, как умные люди решали технические ограничения прошлого, я помог мне оценить сложную красоту «Сумеречной принцессы». Я добился хорошего прогресса, но впереди еще огромный список вещей, которые нужно изучить и реализовать. Я планирую продолжать работать над этой программой просмотра, добавляя такие функции, как туман, BTK (текстурная анимация) и другие атмосферные эффекты, чтобы сделать ее максимально точной и захватывающей.