mavzermete 1
mavzermete
Bodyguardd 1
Bodyguardd
Vahsi Uzman 1
Vahsi Uzman
noisiv 1
noisiv
Manwe Work 1
Manwe Work
TuZaKK 1
TuZaKK
Hikaye Ekle

Dx9ex to Vulkan Geçiş Süreci

  • Konuyu başlatan Konuyu başlatan ZyneFin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 1
  • Görüntüleme Görüntüleme 179

Öncelikle Merhaba Arkadaşlar;​

Yaklaşık 3 aydır üzerinde çalıştığım bir projedir şuan %70 lik kısmını tamamladım.Hala zemin Terrain kısımlarını çizdirebilmiş değilim.​

Üzerinde çalışıyorum arada kesinlikle wrapper yok saf vulkan RHI.dir​

1. Neden Vulkan Tercih Etmeliyiz?​

Metin2'nin mevcut grafik motoru (Direct3D 9 / 9Ex), 2000'li yılların başındaki ekran kartı mimarileri için tasarlanmıştı. Günümüz donanımlarında yaşanan FPS düşüşlerinin, kalabalık pazar alanlarındaki anlık takılmaların (stuttering) ana sebebi donanım yetersizliği değil, API (Sürücü) Overhead'idir.

1. Düşük CPU Sürücü Yükü (Reduced CPU Overhead)​

DirectX 9, her bir çizim çağrısını (Draw Call) işlemci üzerinden tek bir hatta sürücüye iletir. Ekrandaki oyuncu, pazar, efekt ve nesne sayısı arttıkça CPU sürücü seviyesinde kilitlenir (CPU Bottleneck).

  • Vulkan Çözümü: Vulkan, donanıma doğrudan (Low-Level) erişim sağlar. Komut listelerini (Command Buffers) sürücüye iletirken işlemciye binen gereksiz yükü kaldırır. Bu sayede özellikle kalabalık alanlarda işlemci kaynaklı FPS çökmeleri minimuma iner.

2. Gelişmiş Bellek Yapılandırması (VRAM / RAM Yönetimi)​

Direct3D 9, 32-bit mimarinin getirdiği adresleme sınırları ve eski bellek yönetim mekanizmaları nedeniyle yüksek çözünürlüklü kaplamalarda veya yoğun efekt durumlarında kolayca bellek sızıntısına (Memory Leak) uğrayabilir.

  • Vulkan Çözümü: Bellek tahsisi (Memory Allocation) doğrudan geliştirici ve API kontrolündedir. Bellek daha efektif kullanılır, GPU VRAM’ine veriler daha hızlı yüklenir.

3. Kararlı Çerçeve Zamanlaması (Frametime & Smoothness)​

Metin2'de 120 FPS alsanız dahi oyunun "akıcı hissettirmemesinin" sebebi Frametime (Kare Süresi) dalgalanmalarıdır.

  • Vulkan Çözümü: Vulkan komut işleme sırasını daha düzenli yönettiği için kareler arası milisaniye farklarını (frametime spikes) düzeltir. Sonuç: Daha pürüzsüz ve takılmasız bir görüntü akışı.

4. Güncel Ekran Kartı Sürücü Desteği​

NVIDIA ve AMD, yeni mimari ekran kartlarında (RTX serisi, RX 6000/7000 serisi vb.) DirectX 9 sürücü desteğini (Legacy Driver Support) minimuma indirdi veya tamamen emülasyon katmanlarına devretti.

  • Vulkan Çözümü: Vulkan, günümüz GPU mimarilerinin yerel olarak tam performansla desteklediği modern bir standarttır. Yeni nesil ekran kartlarında DX9'a kıyasla çok daha stabil çalışır.
Önemli Gerçeklik Notu (Uyarı):Vulkan bir mucize değildir. Metin2'nin çekirdek kodlamasındaki tek çekirdek (Single-Thread) bağımlılığını veya zayıf optimize edilmiş C++ kodlarını sihirli bir şekilde çok çekirdekli hale getirmez. Vulkan'ın yaptığı şey, grafik katmanındaki darboğazı kaldırmak ve var olan sistem kaynağını GPU'ya sıfır kayıpla iletmektir.

Bu Kısımları Çizdirmeyi Başardım Bu kısımlara elene kadar ekrana üçgen bile çizdirmek günlerimi almıştı.​



]
loading.png
krallık.png

server.png
login.png

karakersecme.png



Şuan Yaşadığım Problem Ve Üzerinde Çalıştığım Kısım Harita terrain sis ve özel efectlerde problemlerim var katman sayısını arttırmam bunu vulkan tarafında doğru yönlendirmem gerekiyor.​

kanıt.png



Düzeltme Güncelleme v1.
Direct3D 9 (Dx9Ex) grafik motorundan Vulkan grafik API'sine geçiş sürecinde yaşanan zemin görünmeme), zeminin gökyüzünde ters çıkması, alpha splatting kaplama renk kaymaları, (SkyBox), (Water/Lake) ve gölge rendering problemlerinin tespiti ve çözümü.


[PROBLEM 1] Zemin Render Edilemiyor / Oyun Zemin Tamamen Beyaz Görünüyor
--------------------------------------------------------------------------------
- Neden: Vulkan grafik pipeline'ında Direct3D 9 Clip Space NDC koordinat farkları ($Y$-axis flip) ve `terrain_projected.vert` ile `terrain_2d.frag` shader'larında projeksiyon ve vertex buffer layout uyumsuzluğu.
- Çözüm & Yapılan Değişiklikler:
1-.vert ve .frag shaderları Vulkan standartlarına uygun olarak yeniden hesaplanarak
SPIR-V bayt kodları yeniden derlendi.
Sorun çözüldü.

v1düzeltme.png



"Cross-platform" (çapraz platform) yaklaşımı; yazılan kodun minimal değişiklikle veya hiç değişiklik olmadan Windows, Linux, macOS, Android, iOS veya Web gibi farklı işletim sistemlerinde çalışabilmesidir.

Direct3D 9Ex vs. Vulkan Karşılaştırması


Özellik / ParametreDirect3D 9ExVulkan
Mimari YaklaşımYüksek seviyeli (High-Level), sürücü odaklı yönetimDüşük seviyeli (Low-Level), donanıma doğrudan erişim
CPU Sürücü Yükü (Overhead)Yüksek. Tek çekirdeğe binen sürücü yükü fazlaÇok Düşük. İşlemci komutları GPU'ya doğrudan iletilir
Draw Call KapasitesiSınırlı. Kalabalık alanlarda CPU kilitlenmesine yol açarÇok Yüksek. Aynı anda binlerce nesneyi daha az yükle çizer
Kare Süresi (Frametime) StabilitesiDalgalı. Anlık mikro takılmalara (stuttering) açıkKararlı. Kare geçiş aralıkları daha düzenli ve pürüzsüz
Bellek Yönetimi (VRAM/RAM)Sürücü kontrolünde, bellek sızıntısına (memory leak) yatkınDoğrudan API ve uygulama kontrolünde, daha efektif
Shader İşleme MimarisiÇalışma anında sürücü tarafından dinamik işlenirShader Pipeline Cache kullanır (İlk yüklemede kısa süreli drop yapabilir, sonrasında takılmaz)
Güncel GPU Sürücü DesteğiZayıf. NVIDIA/AMD yeni kartlarda DX9 desteğini emülasyona devrettiTam Destek. Modern GPU mimarilerinin (RTX / RX) yerel standardıdır
Çoklu Ekran Kartı (iGPU/dGPU)Laptoplarda GPU geçişlerinde çökme veya yanlış kartı seçme riski yüksekdxvk.conf üzerinden istenen GPU doğrudan zorlanabilir
Alt-Tab ve Pencere YönetimiDX9'a göre daha iyi olsa da tam ekranda kilitlenmelere meyilliBorderless/Windowed modlarında yüksek stabilite

Özet: Direct3D 9Ex, donanım ne kadar güçlü olursa olsun oyunun grafik komutlarını tek bir CPU dar boğazından (bottleneck) geçirmeye zorlar. Vulkan ise bu dar boğazı ortadan kaldırarak var olan donanım gücünün GPU'ya kayıpsız aktarılmasını sağlar.




Şuan Yaşadığım Problem Ve Üzerinde Çalıştığım Kısım Harita terrain sis ve özel efectlerde problemlerim var katman sayısını arttırmam bunu vulkan tarafında doğru yönlendirmem gerekiyor.​

Kısacası :​

Metin2 altyapısını Vulkan API'sine geçirmek, 20 yıllık grafik motorunun günümüz modern ekran kartları ve işlemcileriyle daha stabil, kararlı frametime (kare süresi) değerlerinde çalışmasını sağlar.

Bu rehberdeki adımlar donanım seviyesindeki sürücü yükünü (overhead) düşürmeyi hedefler. Ancak unutulmamalıdır ki her sistem kombinasyonu (CPU/GPU/Sürücü sürümü) farklı sonuçlar verebilir.

Bu geçiş sürecinde yaşadığım tüm sorunları geçiş sürecini tek tek kayıt altına alıyorum.​

 
Son düzenleme:
Düzeltme Güncelleme v1.
Direct3D 9 (Dx9Ex) grafik motorundan Vulkan grafik API'sine geçiş sürecinde yaşanan zemin görünmeme), zeminin gökyüzünde ters çıkması, alpha splatting kaplama renk kaymaları, (SkyBox), (Water/Lake) ve gölge rendering problemlerinin tespiti ve çözümü.


[PROBLEM 1] Zemin Render Edilemiyor / Oyun Zemin Tamamen Beyaz Görünüyor
--------------------------------------------------------------------------------
- Neden: Vulkan grafik pipeline'ında Direct3D 9 Clip Space NDC koordinat farkları ($Y$-axis flip) ve `terrain_projected.vert` ile `terrain_2d.frag` shader'larında projeksiyon ve vertex buffer layout uyumsuzluğu.
- Çözüm & Yapılan Değişiklikler:
1-.vert ve .frag shaderları Vulkan standartlarına uygun olarak yeniden hesaplanarak
SPIR-V bayt kodları yeniden derlendi.
Sorun çözüldü.
v1düzeltme.png
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst