PC veya konsol fark etmeksizin, oynadığınız her oyunun gelişim sürecinde en az bir grafik API’si rol oynar. Genellikle DirectX (DX11, DX12) seçenekleri görürsünüz, ancak artık oyun geliştiricileri daha fazla seçenek sunmaya başladı. Bazı oyunlarda, DirectX 12 ve Vulkan arasında seçim yapmanıza imkan tanıyan bir ayar ekranıyla karşılaşmış olmalısınız.
Bunlar arasında seçim yapacaksınız ama bir fikriniz yok mu? Şimdi aklınızdaki tüm soruları yanıtlamaya çalışacağız. Doğrusu cevaplar tamamen açık değil. En iyi oyun deneyimini hangisi sağlıyor derseniz, bu cevap duruma göre değişkenlik gösteriyor. Biz mümkün olan her şeyi anlatmaya çalışacağız.
Ardında Microsoft olan DirectX ve Khronos Group tarafından geliştirilen Vulkan, günümüzde çoğu oyun geliştiricisinin kullandığı iki popüler grafik API’si. Temel olarak, Vulkan ve DirectX donanım kaynaklarının (CPU ve GPU) uygun şekilde tahsis edilmesini kolaylaştırır. Oyunun işletim sistemi ve donanımlarla en iyi şekilde iletişim kurması hedeflenmekte. Böylece oynadığınız oyunlarda kare hızları artar ve render süreleri hızlanabilir.
DirectX’in halen çok yaygın şekilde kullanılan DirectX 11 sürümü var. DirectX 12 ise her geçen gün daha çok yaygınlaşıyor. Peki nedir bu grafik API’si denilen Vulkan ve DirectX? Nasıl performans sergiliyorlar? Önce API’nin ne demek olduğunu açıklayalım, sonra derinlere inelim.
Bilgi işlem dünyasında arayüz, bir bilgi işlem sisteminin iki veya daha fazla yönü arasında oluşturulan köprüyü temsil eder. Bu köprü, donanım (örneğin USB) veya yazılım şeklinde olabilir.
Esasen arayüz, bilgi işlem elemanlarının birbirlerine bilgi göndermesini sağlar; bazen tek yönlü olarak (örneğin bir USB soketi kullanarak bir dizüstü bilgisayara giriş sinyalleri gönderen bir fare) köprü görevi görür. Ancak arabirim olarak da tabir ettiğimiz arayüzler genelde iki yönlü olarak çalışır.
Uygulama Programlama Arayüzü (Application Programming Interface) anlamına gelen API, web uygulaması, işletim sistemi, veri tabanı, donanımlar, grafikler ve yazılım kütüphanesi için kullanılabilir. Birazdan detaylarına değineceğimiz üzere, API sadece uygulama geliştirmek için değildir.
Bir API söz konusu olduğunda, perde arkasında veri aktarımından çok daha fazlası gerçekleşir. Hangi veri taleplerinin yapılabileceğine ilişkin kurallar burada belirlenir, taleplerin nasıl yapılacağını tanımlanır ve verilerin hangi formatta olması gerektiği bildirilir. Özetle bir aracı görevi gören API’ler birçok önemli işlevi yerine getirir, programlamayı çok daha kolay hale getirmemize yardımcı olur.
API’ler sayesinde bilgisayar sisteminin iş işleyişi ve tüm arka plan ayrıntıları programcıdan gizlenir, sadece ihtiyaç duyulan araçlara basit bir şekilde erişim sağlanır. Bazı programlama arayüzleri çok geniş kapsamlıyken, bazıları daha kısıtlı bir amaca hizmet edecek şekilde daha özel rollere sahiptir.
Grafik API’leri
PC oyunları oynuyorsanız 3D grafikler oluşturmak için kullanılan öncü API’lere aşina olmalısınız; OpenGL, Direct3D ve Vulkan. Bunlar herhangi bir render kodu için temel iskele görevi görerek programcıların karmaşık görselleri nispeten kolay bir şekilde oluşturmasına olanak tanır.
Grafik API’leri, her şeyin nasıl biçimlendirilmesi ve yapılandırılması gerektiğine dair belirli kuralları ortaya koyar ve rutin matematik algoritmalarını işlemek için basit talimatlar sunar. Bunların hepsi yıllar içinde önemli ölçüde güncellendi ve hesaplama gölgelendiricileri sayesinde güzel görüntüler oluşturmaktan daha fazlasını yapmak için kullanılabiliyor.
Bilgisayarlar dışındaki oyun platformları da API’lerden yararlanıyor: Microsoft Xbox için Direct3D’nin değiştirilmiş bir versiyonunu kullanırken, Nintendo (Switch) ve Sony (PlayStation) kendi API’lerini kullanıyor. Ancak bunların her ikisi de işin sonunda OpenGL’ye dayanıyor. Eğer telefonda oyun oynuyorsanız, yine aynı şekilde Apple ürünlerine özel olan Metal gibi çeşitli grafik API’leri mevcut.
1990’larda bazı ekran kartı üreticilerinin kendi API’lerine sahip olduğunu hatırlarsınız; 3dfx’in Glide ve S3 Graphics’in S3D API’leri vardı. Bunun nedeni OpenGL’nin nispeten yeni olması ve üreticilerin ihtiyaç duyduğu özellik seti ve performanstan yoksun olmasıydı.
Bir dönem Glide, programlaması kolay olduğu ve 3dfx’in Voodoo mimarisini mümkün olan en iyi şekilde kullandığı için grafik API’lerinin lideriydi. Glide ve S3D çok kısa ömürlü oldu çünkü açık kaynaklı değil, oldukça özel API’lerdi. Aslında Direct3D de açık kaynak kodlu değil, ancak Windows ile sınırlı olması dışında herhangi bir GPU üreticisi kendi ürünlerinde desteklemek için sürücüler yaratabiliyor.
Bununla birlikte, tescilli grafik API’leri bugün hala çeşitli alanlarda kullanılmakta. NVIDIA’nın CUDA API’si şirket içi GPU’lara özel olsa da 3D render yerine genel amaçlı hesaplama işlerine yönelik.
AMD, 2013 yılında Battlefield oyunlarının geliştiricileriyle işbirliği yaparak ‘düşük seviyeli’ bir API oluşturmak için çalışmaya başladı. AMD’nin Mantle için hedefi, Direct3D ve OpenGL’den daha az CPU bağımlı olmasının yanı sıra daha fazla programlanabilirlik sunmasıydı. Projenin geliştirilmesi 2015 yılında durduruldu ve kırmızı takımın çalışmalarını Vulkan’dan sorumlu kuruluş olan Khronos Group’a ücretsiz olarak devretmesi nedeniyle 2019 yılına kadar tamamen rafa kaldırıldı.
DirectX 11 ve DirectX 12 arasındaki en önemli fark, DirectX 11’in üst düzey bir API, DirectX 12’nin ise alt düzey bir API olmasıdır. Oyununuz ve donanımınız arasında çeşitli katmanlar vardır. Düşük seviyeli API’ler donanıma daha yakınken, yüksek seviyeli API’ler daha uzakta ve daha geneldir.
Kısacası DirectX 12, oyun geliştiricilerinin optimizasyonları donanıma daha yakın hedeflemesine olanak tanıyarak API ve grafik sürücüsünden kaynaklanan ek yükü azaltır. Buna karşılık, geliştiricilerin çalışması da daha zor.
- DirectX 12 vs DirectX 11: Oyunlarda Hangisi Daha İyi?
DirectX 12 piyasaya sürüldüğünde karmaşık yapısı nedeniyle DirectX 11’den biraz daha düşük performans gösterdi. Ancak geliştiriciler geçtiğimiz birkaç yıl içinde biraz da mecburi olarak DirectX 12’ye daha fazla odaklandılar, daha fazla optimizasyon yaptılar. Birazdan performans testlerine geleceğiz, ancak her oyunda olmasa bile DirectX 12’nin çoğu oyunda DirectX 11’den daha iyi performans gösterdiğini söyleyebiliriz.
DirectX 11 ve DirectX 12 arasında pek çok teknik fark olsa da oyuncular doğrudan performansa bakar. Bazı oyunlarda DX 12, bazı oyunlarda ise DX 11 API’si daha iyi performans gösteriyor. Bu arada, API performanstaki tek faktör değildir. Bazı oyunlar DirectX 12’den çok fazla fayda görmüyor çünkü bu oyunlar genel olarak düşük seviyeli optimizasyona sahip. Örneğin Dying Light 2’nin performansında temelde hiçbir değişiklik olmuyor. Ancak eşzamansız hesaplamadan yararlanan devasa yapay zeka iş yüklerine sahip Civilization VI’da büyük bir iyileşme görülüyor. Shadow of the Tomb Raider ve Tiny Tina’s Wonderlands ise yine DX12 ile daha iyi çalışan oyunlardan.
Aslında kıyaslama yaparken DirectX 11 ve DirectX 12’yi ayrı ayrı ele almak gerekiyor. İki DX sürümü arasında ciddi performans farkları dahil olmak üzere önemli farklar var. Her şey DX sürümleri arasında bile değişkenlik gösteriyor lakin biz genel olarak DirectX ve Vulkan arasındaki farklara bir bakalım. Öncelikle gelişim süreçlerini ve tarihlerini ele alalım.
PC Oyun Dünyası DirectX ile Oluştu
Başlangıçta DirectX, Windows tabanlı PC’lerde oyun oynayabilmemiz amacıyla geliştiricilere yönelik olarak Microsoft’taki bir ekip tarafından geliştirildi. DirectX ortaya çıkmadan önce geliştiriciler DOS için oyun yapmayı tercih ediyor ve Windows için yeni oyunlar yayınlamayı düşünmüyorlardı.
Bahsettiğimiz dönem Windows 95’in çıkacağı zamanlara denk geliyor. O zamanlar DOS oyunlarının yanı sıra konsol oyunları da giderek büyüyordu. DirectX 1.0 Eylül 1995’te piyasaya sürüldü ve Windows Game SDK olarak adlandırıldı.
DirectX ekibinin parçası olan Alex St John, verdiği bir röportajda Microsoft’un oyun geliştiricilerini DirectX kullanmaya başlamaları için ısrarla ikna etmek zorunda kaldığını açıkladı. Geliştiricilerin endişelerine kulak verildi ve daha sonra Windows’ta oyun oynamayı geliştirmek için ayrılmaz bir geri bildirim olarak kullanıldı, böylece geliştiriciler milyonlarca kişi tarafından kullanılan işletim sistemi için yeni oyunlar yapmaya başladı.
DirectX’in ilk zamanlarında oyun endüstrisini API’yi kullanmaya teşvik etmek ve geliştiricileri Windows PC oyunları yapmaya motive etmek için bazı çılgın pazarlama taktikleri benimsendi. Oyun geliştiricileri, DirectX sayesinde işletim sistemiyle fazla haşır neşir olmadan PC donanımını kullanma fırsatı yakaladılar.
DirectSound (ses işlemeden sorumlu), DirectPlay (oyun içi iletişimleri yöneten) ve DirectDraw (grafik işleme), o zamanlar “Game SDK” veya “Project Manhattan” olarak adlandırılan DirectX 1.0’ın bir parçasıydı. Günümüzde DirectX, API’lerin bir koleksiyonu olarak bilinmekte ve birçok oyun için yaygın olarak kullanılmakta. Başka bir deyişle DirectX, birden fazla şeyi barındıran bir API koleksiyonu. Bahsettiğimiz gibi DX11 çok yaygın olarak kullanılıyor. Son sürüm ise DX12.
Vulkan’a sıra gelmişken, temelleri Amerikalı çip üreticisi AMD’nin Mantle API’sinin tanıtımına kadar uzanıyor. AMD, Mantle’ı oluşturmak için DICE ile birlikte çalıştı. Sniper Elite III, Battlefield 4 ve Civilization: Beyond Earth gibi oyunlarda Vulkan kullanıldı.
Vulkan’ın DirectX 11’den daha iyi performansa sahip olduğu lanse edildi. Dahası, CPU’nun tıkandığı durumlarda performansı artırdığı iddiaları vardı. Daha fazla oyun motoru Mantle’ı bir API olarak kullanmaya başladı. Ancak tüm çaba ve avantajlara rağmen Vulkan beklendiği kadar hızlı benimsenmedi. Çip üreticisi zaman için de Mantle API’sini (“bağış” olarak) Khronos Group’a devretti.
Daha sonra Khronos, GDC 2015’te Vulkan’ı yeni bir grafik API’si olarak tanıttı. Bugün Vulkan daha çok biliniyor giderek daha fazla oyunda kendine yer buluyor. DirectX 11/12’ye ek olarak birçok oyunda kullanılmakta.
Vulkan’ın DirectX’e kıyasla en önemli farkı, platformlar arası bir API (masaüstü ve mobil) olması. Yani DirectX sadece Windows PC’lere özelken, Vulkan Windows’un yanı sıra farklı birçok platform ile uyumlu: Linux, Android, Nintendo ve macOS gibi. Böylelikle geliştiriciler bir oyunu birden fazla platforma sunmak istediklerinde işleri daha kolay şekilde yürütebiliyor.
Uzun vadede bu Vulkan için bir kazanç faktörü olabilir. Oyunlar geleneksel bilgisayar ve konsollardan mobil ve bulut tabanlı oyunlara doğru kaymaya devam ettikçe, Vulkan’a odaklanmak geliştiriciler için çok daha cazip hale gelebilir.
Hem DirectX hem de Vulkan son beş yılda büyük ölçüde gelişti ve kendilerine has avantajları var. Şimdi bunları tartışalım ve günümüzün çeşitli oyunlarında DirectX ile Vulkan’ın performansını karşılaştıralım.
Ne Gibi Farklar Var?
Vulkan’ın donanım kaynaklarını daha verimli kullandığı biliniyor. Yani CPU, GPU ve RAM kullanımının DirectX 12’ye kıyasla daha “dengeli” olduğu belirtilmekte. Vulkan daha düşük seviyeli bir API ve açık kaynak kodlu. Ayrıca çapraz platform şeklinde çalışan bir API, böylece geliştiriciler oyunlarını hem PC hem de mobil platformlarda yayınlamak istiyorlarsa zamandan tasarruf edebiliyor. Bunun yanında, bazıları Vulkan kullanımının daha karmaşık olduğunu, bu durumun diğer API’lere kıyasla harcanan toplam süreyi artırabileceğini söylüyor.
Bir geliştiricinin gözünden bakıldığında, Vulkan’ın açık kaynaklı ve platformlar arası olması kullanımını oldukça cazip hale getiriyor. Bununla birlikte, grafik ve oyun geliştirmeye yeni başlayanlar için Vulkan’ı öğrenebilecekleri çokça eğitim materyali de mevcut. Hatta bazıları Vulkan API’sinin DirectX’e kıyasla daha iyi dokümantasyona sahip, kullanımı daha kolay ve temiz olduğunu söylüyor. Değindiğimiz gibi, bazı oyunlarda ikisi arasında seçim yapma şansımız var.
Öte yandan DirectX, Windows PC’ler ve Xbox oyun konsolları için kullanılıyor. Ancak Vulkan Linux, Windows ve mobil platformlarda kullanılabiliyor. Nintendo Switch, Vulkan’ı da desteklediği bilinen bir Nvidia Tegra GPU’ya sahip. PlayStation’ın arkasındaki isim olan Sony ise söylenilenlere göre PC’delere göre daha iyi API’lere sahip: PlayStation API’leri çok doğrudan ve çok düşük oranda ek yük bindiriyor.
Hangisi Seçilmeli?
Birçok modern oyun ve uygulamada DirectX 12, Vulkan veya her ikisi birlikte görebilirsiniz. Başlatmadan veya yüklemeden önce size bunlar arasında bir seçim sunulmakta. Hangisinin en iyisi olduğunu soruyorsanız, bu cevap PC donanımınıza, oyunun türüne ve görsel efektlere mi yoksa yüksek kare hızına mı daha fazla önem verdiğiniz gibi çeşitli faktörlere bağlı.
Aynı zamanda oyun geliştiricilerinin API’leri kullanım şekline ve uygulama becerilerine de bağlı. DirectX 12 için oyun geliştirmek daha zor, ancak Vulkan’dan daha uzun süredir piyasada olduğundan dolayı geliştiriciler daha yakından tanıyor.
Sözünü ettiğimiz gibi, Vulkan düşük yüke sahip bir API: Senaryoya bağlı olarak DirectX’e göre CPU hesaplama, bellek ve bant genişliği gibi konularda daha az sistem kaynağı gerektirebiliyor. Bu da onu düşük özellikli bilgisayarlarda DirectX 12’den daha iyi bir seçenek haline getiriyor. Ya da en azından daha zayıf bir CPU ile.
Çoğu kıyaslama testi Vulkan’ı kare hızlarında biraz daha önde gösteriyor, ancak daha sık FPS dalgalanması yaşandığını özellikle belirtmek gerekiyor. Yani genel kanı şu yönde: Vulkan daha iyi performans gösterse bile, DirectX çok daha kararlı oyun deneyimi sunuyor.
Görsel olarak, Vulkan ve DirectX 12 ile çalışan bir oyun arasında belki çok minik farklar görebilirsiniz. Aynı oyun içi grafik ayarları uygulanırsa, Red Dead Redemption 2 gibi bir oyunda Vulkan ve DirectX arasında hiçbir fark yok.
Kağıt üzerinde, DirectX 12 (ve DX 12 Ultimate) CPU/GPU yoğun oyunlar için daha iyi bir API gibi görünüyor. Bilgisayarınız bir oyunu DX 12’de sorunsuz bir şekilde çalıştırabiliyorsa kullanmamak için hiçbir neden yok. Eğer grafik API seçeneği yoksa, kullanıcı oyun ne kullanıyorsa onunla oynamak zorunda. Ancak seçenek varsa oyunlarınızı farklı API’ler kullanarak test etmenizde yarar var. Her ikisiyle de 10’ar dakika test gerçekleştirin ve en iyi oyun deneyimini hangisinin sunduğunu kendi gözlerinizle görün.
Bazı kişiler bir oyunda Vulkan’ın daha iyi çalıştığını, bazıları ise DirectX’in daha başarılı olduğunu söyleyebilir. Yanıtlar oyundan oyuna, donanımdan donanıma değişecektir. Ekran kartları bu noktada en önemli bileşen. Bazı kişiler, AMD ekran kartları kullanıldığında Vulkan’ın daha iyi performans gösterdiğini söylüyor.
Vulkan hem AMD hem de NVIDIA ekran kartlarıyla kullanılabilir. Ancak biraz önce söylediğimiz gibi, Vulkan API Mantle adlı eski bir AMD API’sinden türetildi. Bu nedenle Vulkan’ın AMD GPU’larla NVIDIA kartlara göre biraz daha iyi çalışmasını normal karşılayabiliriz.
Vulkan ile geliştirilen oyun ve uygulamaların güncel listesine aşağıdan ulaşabilirsiniz:
- Vulkan destekli yazılımlar