paint-brush
The Legend Of Zelda - Alacakaranlık Prensesi için Seviye Görüntüleyici Oluşturmaile@hackerclz1yf3a00000356r1e6xb368
396 okumalar
396 okumalar

The Legend Of Zelda - Alacakaranlık Prensesi için Seviye Görüntüleyici Oluşturma

ile Tommy6m2024/08/03
Read on Terminal Reader

Çok uzun; Okumak

Twilight Princess (Nintendo GameCube) için bir web BMD görüntüleyici programlamaya başladım çünkü bu oyunu seviyorum ve bir oyun yapımcısı olarak seviyeleri analiz etmekten ve nasıl yapıldıklarının ayrıntılarına kendimi kaptırmaktan büyüleniyorum.
featured image - The Legend Of Zelda - Alacakaranlık Prensesi için Seviye Görüntüleyici Oluşturma
Tommy HackerNoon profile picture
0-item


Bu proje kesinlikle benimkilerin en gelişmişlerinden biri. Alacakaranlık Prensesi (Nintendo GameCube) için bir web BMD görüntüleyici programlamaya başladım çünkü bu oyunu seviyorum ve bir oyun yapımcısı olarak seviyeleri analiz etmekten ve nasıl yapıldıklarının ayrıntılarına kendimi kaptırmaktan büyüleniyorum. Bu proje benim için bu tutkuyu keşfetmenin ve sevdiğim oyun hakkında daha derin bir anlayış kazanmanın bir yolu. Bu zorlu ve ödüllendirici bir öğrenme deneyimidir. Bu projenin beni nereye götüreceğini ve yol boyunca ne gibi yeni keşifler yapacağımı görmek beni heyecanlandırıyor. Şu ana kadar bu proje aylarca araştırmamı aldı. rarc, bmd, gcm yaz0, j3d, tev vb. hakkında bilgi ve bulgularını araştıran ve paylaşan 20'den fazla kişinin çalışmasına dayanan araştırma. Kredi vermek için yazdığım bir kişiyle karşılaştım:


Öncü çabaları için ("LordNed", "thakis", "Jasper St. Pierre", "Kiwi", "Dolphin Emulator Team", "Gamma", "Zan") teşekkürler!

Su, Sis ve animasyonlu Dokular şu anda yol haritasında yer alan özelliklerdir

Gösteri

Program three.js ve webGL kullanılarak programlandı. Chrome tarayıcısında sabit 60 fps hızında çalışır. Maalesef interaktif Viewer'ı (modeller, odalar vb.) sizinle paylaşamıyorum çünkü araştırmanın adil kullanımı sınırlarının ne kadar olduğunu görmek istemiyorum. Montajımın tadını çıkarın:


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

Özellikler

BMD ve BDL, Nintendo'nun GameCube ve Wii oyunlarında model verilerini depolamak için kullandığı dosya formatlarıdır. Bunlar, daha büyük JSYSTEM araç setinin bir bileşeni olan Nintendo'nun J3DGraph kütüphanesinin bir parçasıdır. BMD ilk olarak Luigi's Mansion oyununda ortaya çıktı. O zamanlar Super Mario Sunshine'da kullanılan tek model formatıydı. Wind Waker ayrıca, MDL3 adı verilen malzeme FIFO talimatları için ek bir bölüm içeren BMD'nin bir uzantısı olan BDL formatını da tanıttı. MDL3, işleme verimliliğini artırmak için kullanılır. Super Mario Galaxy 2 bu model formatını kullanan son oyundu.


JSYSTEM, Nintendo'nun konsolları için oyunlar oluşturmak amacıyla kullandığı özel bir oyun geliştirme araç setidir. 3D modelleme, animasyon ve fizik gibi görevler için çeşitli kütüphaneler ve araçlar içerir. J3DGraph, JSYSTEM içerisinde 3D grafiklerin işlenmesine yönelik işlevler sağlayan ve BMD ve BDL dosya formatlarından sorumlu olan bir kütüphanedir. BMD, İkili Model anlamına gelir ve BDL, İkili Görüntüleme Listesi anlamına gelir.


JSYSTEM araç seti, tersine mühendisler ve oyun modlayıcıları tarafından 2000'li yılların başında Nintendo GameCube ve Wii oyunlarının kodunu analiz etmeye ve derlemeye başladıklarında keşfedildi. Oyunların çoğunun benzer kod yapılarını ve kitaplıklarını paylaştığını buldular, bu da onları ortak bir geliştirme araç setinin varlığından şüphelenmeye yöneltti. Pek çok araştırma ve deneyden sonra, oyunlardan JSYSTEM kütüphanelerini tanımlayıp çıkarmayı başardılar ve J3DGraph kütüphanesi ile BMD ve BDL dosya formatları da dahil olmak üzere çeşitli bileşenlerini belgelemeye ve tersine mühendislik yapmaya başladılar.


JSYSTEM anlayışı büyüdükçe mod geliştiriciler JSYSTEM formatıyla çalışmak için kendi araçlarını geliştirmeye ve JSYSTEM kütüphanelerini kullanarak kendi özel modellerini, dokularını oluşturmaya ve hatta yeni oyunlar yaratmaya başladılar. Bu, birçok modlayıcının bulgularını ve araçlarını çevrimiçi olarak paylaştığı, bugün de varlığını sürdüren canlı bir modlama topluluğunun yaratılmasına yol açtı.

Gelişim

Başlangıçta, gerçek *.dol veya *.gcm kapsayıcı formatlarıyla pek ilgilenmiyordum çünkü diğer insanlar kullanıma hazır araçlar sağlayarak zaten harika bir iş çıkarmışlardı (daha sonra gcm okuyucusunu kendim oluşturdum). Biraz aradıktan sonra odalar ve diğer öğeler gibi ilginç şeyler içerebilecek gibi görünen klasörler buldum. Faron Woods gibi geniş alanlar parçalara bölündü ve ayrı dosyalara kaydedildi; bunlar daha sonra birleştirilerek alanın tamamı oluşturuldu.


Ama ben kolaydan başlamak istedim. Belki basit bir şey! Klasördeki çoğu şeyi açtıktan sonra dosyaları boyutlarına göre sıraladım ve son derece basit bir nesne buldum. Dosyayı HexWorkshop'ta kontrol ettiğimde VTX, INF, DRW ve SHP gibi işaretleyicilere rastladım. Tepe noktalarından basit bir kapı tokmağı olan düz bir kutu olduğunu anlayabiliyordum. Çok geçmeden bunun göl yatağı tapınağının kapısı olduğunu anladım.


Nesnenin neye benzeyebileceğini biliyordum ve doku bilgisinin yanı sıra köşe koordinatları gibi temel bilgileri nerede arayacağımı da biliyordum.


BMD Formatlı Dokümantasyon


Bazı bilgilerin sizin durumunuza göre yanlış olması nedeniyle dikkatli olmanız gerekir. Bazı özellikler bu dokümanların anlattıklarından sadece farklıydı. Ancak bir 3 boyutlu modeli ve dokusunu çıkarmak için ihtiyacınız olan tek şey böyle bir format sayfasına sahip olmaktır!


En azından basit bir nesneyi çıkarma konusundaki başarılı girişimimden sonra, daha fazla kazmanın ve tüm alanı ele almanın zamanının geldiğini düşündüm! Az önce yazdığım algoritmanın aynısıyla donanmış olarak R00_00.dll adlı dosyayı seçtim. Ordon Village ya da Faron Woods olmasını umuyordum. Ama bunun bir önemi yoktu çünkü sahip olduğum tek şey bir çöp yığınıydı. Açıkça yanlış köşe sırası durumu. Bu resme bakarak hangi odanın olduğunu söyleyebilir misiniz?


Şekil şekil, yavaş yavaş suları test ettim. Orada burada uçurumlar ve mezar taşları görünmeye başladı. Kakariko Mezarlığı bölgesine baktığım belli oldu.


Uzun bir süre sonra şu sonucu elde edebildim: bazı nesneler eksikti, bazı yüzler ters çevrilmişti ve tek bir doku bile doğru şekilde uygulanmamış gibi görünüyordu.


Çözüm biraz kafa karıştırıcıydı. Her ne kadar belirli şekillerin belirli malzeme endeksleri tanımlanmış olsa da, bunların doğrudan 1:1 ilişkisi yoktu. Bunun yerine BMD dosyasının INF bölümünde tanımlanan Sahne Hiyerarşisine bakmanız gerekiyordu. Bu hiyerarşi, bir şekli veya malzemeyi temsil edebilen bir düğüm ağacından oluşuyordu. Tipik olarak hiyerarşi bir malzemeyle başlar ve ardından bazı şekiller gelir. Örneğin, (mat1, shp2, shp5, shp6, mat2, shp1, shp12...) gibi bir şey görebilirsiniz. Bu durumda, şekil 2, 5 ve 6'nın tümü malzeme 1'i vb. kullanır.



Harika ama bu oyunu oynayan herkes malzemelerin bozulduğunu fark edebilir. Renkler soluk, malzemeler arasında karışım yok ve genel olarak oldukça koyu görünüyor. Bu noktada işin en akıllara durgunluk veren kısmına dalmış olacaktım. GameCube, bu görevleri yerine getirmek için TEV aşamalarını veya Doku Ortamı aşamalarını kullanır. TEV aşamaları dokuların harmanlanmasından, renklerin yönetilmesinden ve şeffaflık efektlerinin uygulanmasından sorumludur. GameCube'ün, bugün bildiğimiz gibi, iki render geçişi ve uzaktaki nesnelerin ilk olarak render edildiği şeffaflık efektlerini gerçekten desteklemediğine dikkat edin. Bazı GitHub depoları, bazı makaleler, bazı forum konuları var. Olabildiğince fazla bilgiye sahip olun!


Eklemem gereken bir diğer önemli kısım ise sis, çiçek ve bulutlar gibi atmosferik etkilerdi. Bu noktaya kadar sis ve çiçeklenme efektlerini başarılı bir şekilde oluşturamadım, ancak bulut gölgesini buldum ve onları harmanlayan bir TEV Sahnesi'ne koydum. Hala bulutlar için doğru UV koordinatlarını arıyorum.


O odanın nihai sonucu şöyle olacaktır: (Aslında bu noktaya gelmek epey zaman aldı)


Çözüm

Bu proje inanılmaz bir yolculuktu. Zamanımı akıllı insanların geçmişteki teknik sınırlamaları nasıl çözdüğünü bulmaya harcamak, Alacakaranlık Prensesi'nin karmaşık güzelliğini takdir etmeme yardımcı oldu. İyi bir ilerleme kaydettim ama hâlâ keşfedilecek ve uygulanacak çok sayıda şey var. Bu görüntüleyici üzerinde çalışmaya devam etmeyi, sis, BTK (Doku Animasyonu) ve diğer atmosferik efektler gibi özellikleri ekleyerek onu olabildiğince doğru ve sürükleyici hale getirmeyi planlıyorum.