Rehber Shader Compiled (Gölgelendirme oluşturma) nedir? Detaylı konu

Özellikle son oyunlarda girişte karşımıza çıkan ve Last of Us Part 1 de çeşitli mizahlara konu olan Shader Compiled veya Gölgelendirici Oluşturma nedir? Sorusuna bilmeyen arkadaşlar için ışık tutmaya çalışacağım.

Öncelikle ne olduklarına bakalım​


Shader​

Aslında kelime itibarıyla Shadow yani gölge kelimesinden türemiştir. Shader da "Gölgelendirici" olarak türkçeye çevirebiliriz. Fakat burada bir nesnenin gölgesi değil, her pikselin gölgesi, rengi, parlaklığı, dokusu, yansıması içine girer yani bu çok geniş bir konudur. Bütün GPU'lar için bunlar farklıdır çünkü GPU da aslında CPU'nun grafiksel işleme konusunda süper hızlı halidir ve her işlemcinin mimarisi farklı olduğu için birbiriyle aynı kodu okuyarak anlaşamazlar.

Aynı marka içinde bile farklı mimariler olduğundan her GPU da shader yüklemesi ayrı ayrı olarak gerçekleşmektedir.

Compiled/Compiler/Compile​

Compile kısaca derlemek demektir. Yani, insanın okuyabileceği bir programlama kodunu CPU sınıfına kadar indiren(makine kodu) programlamanın temel mantıklarından birisidir. Örneğin, C dilinde yazılan bir kodu derleyerek çalışan bir uygulama elde edersiniz, bu CPU'nun okuyup, matematiksel işlemleri yerine getirdiği executable kodlarıdır ve bu kodları okumak en azından insan gözüyle çok zordur.

API​

API'ler, bir işletim sisteminde grafiksel hesaplamaların nasıl yapılacağını ve geliştiriciyle GPU arasındaki bağlantıyı sunan kütüphane diyebiliriz. DirectX, OpenGL, Vulkan bunlardan sadece birkaçı.

Shader Compiled nedir?​

Yukarıda anlattıklarımdan yola çıkarak basitçe; bir pikselin her özelliğini GPU'ya anlatmaktır.

  • Her grafik sürücüsü yüklediğinizde/güncellediğinizde oyun yeniden derleme yapmak zorundadır.
  • Donmalar arttıkça artacaktır, donmalar olduğunda ve donanımızdan kesinlikle eminseniz oyuna biraz ara verin veya etrafa baktıkça derleme yapmasına müsaade edin.
  • Eğer bir oyun arkada sessizce derleme yapıyorsa(Örnek: Last of Us Part 1) bitmesini bekleyin. Çünkü böyle durumlarda CPU/GPU kullanımları çok yüksek olur bu da sistemden tam potansiyeli alamamaya ve oyunun direkt düşük FPS oynanmasına doğrudan sebebiyet verir. Bu durumlarda bekleyin ve bittikten sonra da oyunu kapatıp tekrar açın.
  • Eğer sisteminiz yeterince modern değilse ve oyunda seçenek varsa DirectX 11 seçebilirsiniz. Bu durumda DX12 özelliklerinden faydalanamazsınız fakat GPU'nuz için en doğru API sistemini seçmiş ve shader kaynaklı donmalardan bir nebze kurtulmuş olursunuz.

Neden eski oyunlar buna ihtiyaç duymuyor?​

Çünkü DirectX 12 ve Vulkan bu işi başlatan API'ler. Önceden oyunlar, oyun içinde bunu yapıyorlardı.

20230405184838_1.jpg


Örneğin, modern bir oyun olupta eski teknolojilerden faydalanan Elden Ring de ilk defa gördüğünüz her şey (atı çağırmak, bir bossun size vurarken yaptığı animasyon dahil) hafif bir donmaya sebebiyet verir. İşte bu anlarda shader derleme yapmakta oyun ve bu donmayla bir kere karşılaşırsanız bazı durumlar hariç(anlatacağım) tekrar anlık donmayacaktır. Bu durum, motorun eskiliği, kullanılan API'nın motora tam uymaması gibi sorunlar doğurabilir.

Örneğin, DirectX 11 her zaman sisteme daha fazla yük bindiren API olmuştur, yukarıdaki sebepten dolayı. Daha fazla CPU kullanımı = daha az GPU kullanımı demektir. Ve biz bir oyunda bunu istemeyiz.

Elden Ring örneğinde, DirectX 12 kullanılmasına karşın, yapımcılar shader derlemesini oyunun açılışında yapmaması gibi tercihleri elbette var. Ancak bu oyunun optimizasyonuna zarar verecektir ve hesaplama kapasitesi düşük veya eski ama güçlü GPU'larda bile problemle karşılaşılmaktadır.

Stutter veya donma diyebileceğimiz sorunların kaynağı bu mudur?​

Sisteminizin çok iyi olduğu halde, yine de anlık donmaların kesin kaynağı tam olarak budur. Fakat diğer türlü işlemciniz, ekran kartınız bu sorunun altından kalkabilecek bir teknolojisi olmayabilir.

Neden konsollarda shader derlemesine ihtiyaç duyulmaz?​

Bu sorunun çok basit bir cevabı var; herkesin evindeki PS5'in donanımı aynıdır da ondan!

Yapımcılar, donanımı bildikleri için oyunlar hazır olarak pre-compiled yani önceden derlenmiş olan shaderları hazır sunarlar.

Daha da geniş bir konu olan Emülasyon/Emülatör/Simüle nasıl çalışır?​

Herkesin bildiği üzere, piyasada bir sürü emülatör bulunmakta. Mobil emülatörlerden tutta, PS3, PSP, Nintendo ve Xbox 360 gibi son derece yol katetmiş olan emülatörler bulunmakta.

Bu oyunlar, önceden shader derlendiği için sizin makinenizde emülasyon yapılırken baştan derleme yapmak durumunda kalır. Fakat bu brute-force yani zorla açmaktan farksızdır. Bu sebepten PS4 donanımı şu an modern PC'ler için güçsüz diyebileceğimiz donanıma sahipken akıcı oynatma sebebi budur. Brute-force yaparak çok güçlü bir işlemciyle adeta konsolu taklit edersiniz ve bunun için süper hızlı bilgisaylar gerekir. Örneğin, PS4 örneğinde şu an emülatörler ancak oyunların logosuna kadar çalıştırabilmektedir. Gelişen PC teknolojisi sayesinde, elbette PS4 emülasyonu yapılabilecek fakat bunun için süper hızlı teknolojiler gerekiyor, dediğim gibi.

Bir diğer hususta sistemlerin kapalı kaynak oluşundan kaynaklanıyor. Öncelikle bu tür işlere kalkışmadan önce tersine mühendislik gibi kavramları araştırmak ve gerekirse kursunu almak gerekiyor.

Son olarak native oyun/program nedir?​

Kısaca tek bir yazılım tabanından yüzlerce platforma dağıtım şeklinde anlatılabilir.

Oyunların ve programların kapsama alanının artması ve platformların fazlalaşması sebebiyle, iş yükünü azaltma amaçlı diyebiliriz. Bir oyun veya program, birden çok platforma çıkma düşüncesi varsa native olarak geliştirilmesi gerekir. Örneğin, bir çok kişinin kullandığı Discord programı bütün platformlarda aynıdır, çünkü arkaplanında native olarak yazılmış kodlardan oluşmaktadır. Sadece diğer platformlara build edilmesi gerekir o kadar.

Oyunlarda ise hem konsola ve Windows'a özel olarak geliştirmek yerine sadece platformun gereksinimlerini karşılayıp rahatlıkla çalışabilirler. Ancak burada dediğim gibi shader derlemeleri ve API gibi konular devreye girdiğinden dolayı port edilmesi zorlaşabilir, özellikle Last of Us gibi sadece konsol odaklı custom bir oyun motoruna sahipseniz, sorunlar çıkması içten bile değildir.

steamuserimages-a.akamaihd.jpg


Peki Last of Us'daki sorun genel olarak nedir?​

Yukarıdan anlattığım kadarıyla problemi tamamen oyun motoru olduğunu düşünebilirsiniz. Fakat burada Windows ve sistem karmaşası da önemli bir faktördür. Windows'un API sistemlerine son derece bağlı kalması ve bunları işlemesi gibi durumlar düşünüldüğünde işletim sistemi genel olarak oyunlar için tasarlanmadığı açıktır. Sistem karmaşası ise, bir sürü GPU/CPU denizinden boğulmaktır. Her ekran kartının bir piksele verdiği tepki farklı olduğundan bu tarz portlar hep sorun yaratmıştır.

Bunlar sorunun %49'luk kısmıdır. %51 oyun motorudur. Last of Us oyun motoru eskidir, remake değildir. Firma öyle lanse etmiştir fakat oyun motoru PS3'den kalmadır. Bu tarz bir sorunu Arkham Knight da yaşamıştık. Bir motora haddiden fazla özellik eklendiğinde bu tarz darboğaz dediğimiz problemler açığa çıkar. Eski bir oyuna 4K texture eklendiğinde kasma nedeni de tam olarak budur.

Özetleyecek olursak​

Daha girmediğim yüzlerce teknik konu olduğu gibi, bir o kadarda benim de bilmediğim konular var. Bildiğim kadarıyla sizlere anlattım. Bir oyunun optimizasyonunun kötü olmasının en büyük nedeni çalışanlar değil, maliyettir. Teknolojiden kısmaktır, yetersiz denetimdir bunu unutmayın arkadaşlar. Herkese iyi sosyaller dilerim.
 
Bu rehberin neden daha fazla ilgi görmediğini anlamıyorum; fakat bana öğretici ve faydalı bilgiler sağladığı kesin. Sizin başka rehberleriniz de varsa onlar hakkında da bilgi almak almak isterim. Bilgi aktarımınız çok güzel, abartısız. Ayrıca, kendimi geliştirmek için bu rehbere ara sıra döneceğim, teşekkürler.
 
Bu rehberin neden daha fazla ilgi görmediğini anlamıyorum; fakat bana öğretici ve faydalı bilgiler sağladığı kesin. Sizin başka rehberleriniz de varsa onlar hakkında da bilgi almak almak isterim. Bilgi aktarımınız çok güzel, abartısız. Ayrıca, kendimi geliştirmek için bu rehbere ara sıra döneceğim, teşekkürler.
Daha yeni yeni maruz kalınan bir durum olduğu için insanlar merak ettikçe rehberi görürler diye düşünüyorum. Teşekkür ederim düşünceleriniz için. Emülatör rehberlerim var, onlara göz atabilirsiniz, mobilde olduğum için atamıyorum fakat profilimde bütün konular kısmında görebilirsiniz.
 

Technopat Haberler

Yeni konular

Geri
Yukarı