- Mesaj
- 50
- Çözümler
- 2
- Beğeni
- 15
- Puan
- 689
- Ticaret Puanı
- 0
Merhaba arkadaşlar,
Yıllardır 32-bit clientlerde 61 FPS max cap ile, kalabalık alanlarda 10-30 frame oyun oynamaya, PvP yapmaya zorunlu bırakıldık. Özellikle yapay zekanın gelişmesiyle artık Metin2 clientlerinin kalabalık alanlarda dahil 200+ FPS alabilecek hale sokulmasının pek de zor olmayacağını düşünüyorum.
Özellikle Render, Network ve Game Logic'in ağır CPU-bound işlemlerinin sadece main thread'de yapılıyor olması 2000'li yılların mimarisi. Artık GPU, ağır render işlemlerinde CPU'dan bayrağı alarak mimari düzeni kökünden değişti. 2000'lerde varlığıyla yokluğu bir olan GPU'lar artık oyun piyasasının bel kemiği haline gelmiş durumda. Ancak Metin2 clientleri bu treni kaçırdı.
Ben bu konuda codebase'i baştan sona analiz ettim (EterLib, EterGrnLib, GameLib, EffectLib, SpeedTreeLib, tüm rendering pipeline ve thread yapısı) ve uygulanabilir bir yol haritası çıkardım.
Yıllardır 32-bit clientlerde 61 FPS max cap ile, kalabalık alanlarda 10-30 frame oyun oynamaya, PvP yapmaya zorunlu bırakıldık. Özellikle yapay zekanın gelişmesiyle artık Metin2 clientlerinin kalabalık alanlarda dahil 200+ FPS alabilecek hale sokulmasının pek de zor olmayacağını düşünüyorum.
Özellikle Render, Network ve Game Logic'in ağır CPU-bound işlemlerinin sadece main thread'de yapılıyor olması 2000'li yılların mimarisi. Artık GPU, ağır render işlemlerinde CPU'dan bayrağı alarak mimari düzeni kökünden değişti. 2000'lerde varlığıyla yokluğu bir olan GPU'lar artık oyun piyasasının bel kemiği haline gelmiş durumda. Ancak Metin2 clientleri bu treni kaçırdı.
Neden DX9 Değil, DX11?
Toplulukta DX9 upgrade'leri yapılıyor biliyorum, ama DX9 temelde DX8'in biraz daha düzenli hali — hâlâ single-threaded, hâlâ per-draw-call CPU overhead'i yüksek, hâlâ GPU skinning ve instancing desteği sınırlı. DX11 ise oyunun kaderini değiştirecek üç şeyi getiriyor: GPU Skinning (CPU'daki frame başına 100,000+ vertex transform işlemini GPU'ya taşıyarak ~7ms/frame kazanım), Instanced Rendering (aynı zırhı giyen 20 savaşçıyı 20 draw call yerine tek draw call'da çizerek ~85ms/frame kazanım) ve Multi-threaded Rendering (Deferred Context ile render komutlarını birden fazla CPU core'a dağıtma). DX9 ile bunların hiçbirini düzgün yapamazsınız.Ne Yapılması Gerekiyor?
Kısaca: DX8 Fixed-Function Pipeline'dan DX11 + HLSL shader mimarisine geçiş, GrannyDeformVertices() CPU skinning'inden GPU bone transform'a geçiş, tek thread'deki game loop'un (network, game logic, render) ayrı thread'lere dağıtılması ve instanced draw call sistemi. Mevcut asset'ler (.gr2, .dds) aynen kalır — sadece codebase güncellenir.Ben bu konuda codebase'i baştan sona analiz ettim (EterLib, EterGrnLib, GameLib, EffectLib, SpeedTreeLib, tüm rendering pipeline ve thread yapısı) ve uygulanabilir bir yol haritası çıkardım.
Bazı sorularım var:
- Bunu daha önce yapan veya deneyen var mı? Deneyimlerinizi paylaşırsanız çok değerli olur.
- Ücretli olarak projeye dahil olabilecek, projeyi üstlenebilecek C++ / Graphics Programmer var mı? DirectX 11, HLSL, multi-threaded engine ve tercihen Granny 2 SDK deneyimi olan birini arıyorum.
- Ekip arkadaşı olmak isteyen var mı? C++ rendering pipeline, DX11 veya multi-threaded architecture konularında deneyiminiz varsa birlikte çalışabiliriz.