paint-brush
Construindo um visualizador de níveis para The Legend Of Zelda - Twilight Princesspor@hackerclz1yf3a00000356r1e6xb368
396 leituras
396 leituras

Construindo um visualizador de níveis para The Legend Of Zelda - Twilight Princess

por Tommy6m2024/08/03
Read on Terminal Reader

Muito longo; Para ler

Comecei a programar um visualizador web BMD para Twilight Princess (Nintendo GameCube) porque adoro esse jogo e como produtor de jogos, sou fascinado por analisar níveis e mergulhar nos detalhes de como eles foram feitos.
featured image - Construindo um visualizador de níveis para The Legend Of Zelda - Twilight Princess
Tommy HackerNoon profile picture
0-item


Este projeto é definitivamente um dos meus mais avançados. Comecei a programar um visualizador web BMD para Twilight Princess (Nintendo GameCube) porque adoro esse jogo e como produtor de jogos, sou fascinado por analisar níveis e mergulhar nos detalhes de como eles foram feitos. Este projeto é uma forma de explorar essa paixão e obter uma compreensão mais profunda do jogo que adoro. É uma experiência de aprendizado desafiadora e gratificante. Estou animado para ver aonde esse projeto me levará e quais novas descobertas farei ao longo do caminho. Até agora este projeto me levou meses e meses de pesquisa. Pesquisa baseada no trabalho de mais de 20 pessoas que investigaram e compartilharam seus conhecimentos e descobertas sobre rarc, bmd, gcm yaz0, j3d, tev etc.


Os agradecimentos vão para: ("LordNed", "thakis", "Jasper St. Pierre", "Kiwi", "Dolphin Emulator Team", "Gamma", "Zan") - por seus esforços pioneiros!

Água, neblina e texturas animadas são recursos atualmente no roteiro

Demonstração

O programa foi programado usando three.js e webGL. Ele roda a 60fps constantes no navegador Chrome. Infelizmente não posso compartilhar o Viewer interativo (modelos, salas etc.) com vocês, pois não quero ver até que ponto estão os limites para o uso justo da pesquisa. Aproveite minha montagem:


https://api.fenixfox-studios.com/assets/d43523dd-5cbe-4da4-9c7d-2d275690050a

Especificações

BMD e BDL são os formatos de arquivo usados pela Nintendo para armazenar dados de modelo em seus jogos GameCube e Wii. Eles fazem parte da biblioteca J3DGraph da Nintendo, que é um componente do kit de ferramentas JSYSTEM maior. BMD apareceu pela primeira vez no jogo Luigi's Mansion. Foi então o único formato de modelo usado em Super Mario Sunshine. O Wind Waker introduziu ainda o formato BDL, que é uma extensão do BMD com uma seção adicional para instruções materiais FIFO chamada MDL3. MDL3 é usado para melhorar a eficiência de renderização. Super Mario Galaxy 2 foi o último jogo a utilizar este formato de modelo.


JSYSTEM é um kit de ferramentas de desenvolvimento de jogos proprietário usado pela Nintendo para criar jogos para seus consoles. Inclui várias bibliotecas e ferramentas para tarefas como modelagem 3D, animação e física. J3DGraph é uma biblioteca dentro do JSYSTEM que fornece funções para manipulação de gráficos 3D e é responsável pelos formatos de arquivo BMD e BDL. BMD significa Binary MoDel e BDL significa Binary Display List.


O kit de ferramentas JSYSTEM foi descoberto por engenheiros reversos e modders de jogos no início dos anos 2000, quando começaram a analisar e descompilar o código dos jogos Nintendo GameCube e Wii. Eles descobriram que muitos dos jogos compartilhavam estruturas de código e bibliotecas semelhantes, o que os levou a suspeitar da existência de um kit de ferramentas de desenvolvimento comum. Depois de muita pesquisa e experimentação, eles conseguiram identificar e extrair as bibliotecas JSYSTEM dos jogos e começaram a documentar e fazer engenharia reversa de seus vários componentes, incluindo a biblioteca J3DGraph e os formatos de arquivo BMD e BDL.


À medida que a compreensão do JSYSTEM cresceu, os modders começaram a desenvolver suas próprias ferramentas para trabalhar com o formato JSYSTEM e começaram a criar seus próprios modelos personalizados, texturas e até mesmo a criar novos jogos usando as bibliotecas JSYSTEM. Isso levou à criação de uma comunidade de modding vibrante que continua a existir até hoje, com muitos modders compartilhando suas descobertas e ferramentas online.

Desenvolvimento

No início, eu não estava realmente interessado nos formatos de contêiner *.dol ou *.gcm reais porque outras pessoas já haviam feito um ótimo trabalho fornecendo ferramentas prontas para uso (eu mesmo criei o leitor gcm mais tarde). Depois de pesquisar um pouco, encontrei pastas que pareciam conter algumas coisas interessantes, como salas e outros elementos. Grandes áreas, como Faron Woods, foram divididas em pedaços e salvas em arquivos separados, que posteriormente seriam mesclados para formar a área completa.


Mas eu queria começar fácil. Talvez algo simples! Depois de descompactar a maior parte do material da pasta, classifiquei os arquivos por tamanho e encontrei um objeto super simples. Quando verifiquei o arquivo no HexWorkshop , me deparei com marcadores como VTX, INF, DRW e SHP. Pelas posições dos vértices, pude perceber que era uma caixa plana com uma maçaneta simples. Logo percebi que era a porta do templo no leito do lago.


Eu sabia como seria a aparência do objeto e onde procurar as informações básicas, como coordenadas de vértice e também informações de textura.


Documentação em formato BMD


Você deve ter cuidado, pois algumas informações estão simplesmente incorretas para o seu caso. Certos atributos eram apenas diferentes do que esses documentos contam. Mas ter uma folha de formato como essa é tudo que você precisa para extrair um modelo 3D e sua textura!


Após minha tentativa bem-sucedida de extrair pelo menos um objeto simples, pensei que seria hora de cavar mais e abordar uma área completa! Armado com o mesmo algoritmo que acabei de escrever, escolhi o arquivo chamado R00_00. Eu esperava que fosse Ordon Village ou Faron Woods. Mas isso não importava porque tudo que consegui foi uma pilha de lixo. Claramente um caso de ordem de vértices errada. Você consegue dizer, olhando para esta imagem, que sala é essa?


Forma por forma, testei lentamente as águas. Aqui e ali, falésias e lápides começaram a aparecer. Ficou claro que eu estava olhando para a área do Cemitério Kakariko.


Depois de algum tempo, consegui produzir este resultado: faltavam alguns objetos, algumas faces estavam invertidas e nem uma única textura parecia estar aplicada corretamente.


A solução foi um tanto confusa. Embora certas formas tivessem índices de materiais específicos definidos, elas não tinham uma relação direta de 1:1. Em vez disso, você tinha que observar a hierarquia de cenas definida na seção INF do arquivo BMD. Essa hierarquia consistia em uma árvore de nós que podiam representar uma forma ou um material. Normalmente, a hierarquia começaria com um material, seguido por algumas formas. Por exemplo, você pode ver algo como (mat1, shp2, shp5, shp6, mat2, shp1, shp12...). Nesse caso, as formas 2, 5 e 6 usariam o material 1 e assim por diante.



Bem, ótimo, mas todos que já jogaram esse jogo podem perceber que os materiais estão parecendo estranhos. As cores estão erradas, não há mistura entre os materiais e parece bastante escuro em geral. Neste ponto, eu teria mergulhado na parte mais alucinante de tudo isso. O GameCube usa estágios TEV, ou estágios Texture Environment, para lidar com essas tarefas. Os estágios TEV são responsáveis por misturar texturas, gerenciar cores e aplicar efeitos de transparência. Observe o fato de que o GameCube realmente não suportava efeitos de transparência como os conhecemos hoje, com duas passagens de renderização e objetos distantes renderizados primeiro. Existem alguns repositórios GitHub, alguns artigos, alguns tópicos de fórum. Obtenha o máximo de informações que puder!


Mais uma parte importante que precisei adicionar foram os efeitos atmosféricos como neblina, flores e nuvens. Até este momento não consegui criar com sucesso os efeitos de neblina e florescimento, mas encontrei a sombra da nuvem e coloquei-os em um estágio TEV de mistura. Ainda estou procurando as coordenadas UV corretas para as nuvens.


O resultado final daquela sala seria assim: (Demorou um pouco para chegar até aqui, na verdade)


Conclusão

Este projeto tem sido uma jornada incrível. Gastar meu tempo descobrindo como pessoas inteligentes resolveram as limitações técnicas do passado me ajudou a apreciar a beleza complexa de Twilight Princess. Fiz bons progressos, mas ainda há uma lista enorme de coisas para explorar e implementar. Pretendo continuar trabalhando neste visualizador, adicionando recursos como neblina, BTK (animação de textura) e outros efeitos atmosféricos para torná-lo o mais preciso e envolvente possível.