Ben burada "Garantiye gönderip çözenler olmuş" yazmış mıyım acaba bir bakın bence.
Aşağıda detayları açıklayacağım, ama öncelikle şunu söyleyeyim, sizin yapabileceğiniz bir şey yok, ancak oyun yapımcıları (ya da Nvidia ve AMD) bunu düzeltebilirler. Onlar da yıllardır başarısız oldukları 4K satışlarını arttırma stratejisini bu şekilde çirkefliklerle arttırmak istedikleri için bunu yapmayacaklardır.
Bugün bütün profesyonel youtuberlar 4K testler yaparlar, monitör incelerler ama biri bile çıkıp "4K oyun oynayın, herşey harika, asla daha düşük çözünürlük kullanmayın" demez. Bu da hem monitor hem de ekran kartı üreticilerini baya mutsuz ediyor olmalı.
Önce LOD nedir ile başlayayım. "Level of Detail". Bildiğiniz gibi oyunlarda her bir sahne için önce geometrik olarak herşeyin ekrandaki yeri, uzaklığı, açısı vs belli oluyor. Sonra da üstüne kaplamalar/texture eklenerek görüntü oluşturuluyor. Diyelim ki bu kaplama çok yüksek çözünürlüklü olsun, mesela 2048x2048 (burası monitörden bağımsız, resim çözünürlüğü). Fakat bu kaplamayı yapacağımız nesnemiz ekranda çok uzak bir yere düştüğü için ekranımızda hepi topu 25x25 piksel işgal etsin. İdeal ve düzgün hazırlanmış bir oyunda "mipmap"ler devreye girer.
Mipmap nedir?
Oyun yükleme ekranında ekran kartı, 2048x2048 kaplamanın hem enden hem boydan yarısını oluşturur. 1024x1024. Sonra onun da yarısı, 512x512. Bu böyle 1x1'e kadar gider ve hepsi hafızada tutulur. 25x25 görüntüye en yakın olanı da kaplama olarak kullanır. Bu durumda 32x32 kaplamayı birazcık "sıkıştırarak" 25x25 yapması, 2048x2048'lik kaplamayı sıkıştırmayı denemesinden daha mantıklıdır.
Anisotropic Filtering'in ne olduğunu daha önce merak etmiş arkadaşlara burası yabancı gelmemiştir, çünkü benzer mipmapleme ve filtrelemeler orada da yapılıyor. Sadece tüm görüntüyü küçültmek yerine, uzak açılı parçaya küçük resim, yakın açılı parçaya büyük resim yerleştiriliyor.
Peki mipmapler olmadığında ne oluyor? Oyun gerçekten 2048x2048'lik kaplamayı 32x32'ye düşene kadar "sıkıştırıyor". Sıkıştırmada iki önemli detay vardır, pikselleri eleyerek mi sıkıştırıyorsunuz yoksa ortalamalarını alarak mı? Elerseniz detaylar ve renkler "kaybolur", ortalama alarak filtre ederseniz detaylar "azalır", renkler çoğunlukla "muhafaza" edilir. Ama ortalama almak işlem yükü olan bir iştir. Mipmapler bu muhafaza etme işini çok daha başarılı yapıyor ama tembel oyun yapımcıları bunları sürücülerin otomatik değerlerine bırakıp oyun esnasında oluşmaya bırakıyorlar.
Peki işin scaling kısmı ne?
Az önce 25x25 bir alana 32x32 bir kaplama sıkıştırma örneği okudunuz, bir diğer seçenek ise 16x16 olan (32x32'nin yarısı) küçük bir mipmapin "esnetilmesidir". Bu durumda da düşük kalite kaplama, olduğundan büyük hale getirilir. Peki buna ne karar veriyor? DirectX 9 çağının sonuna kadar buna sürücüler karar veriyordu. Hatta Nvidia ya da AMD ayarlarından bunu elle değiştirebiliyorduk.
İdeal bir dünyada LOD skalası "0" olmalıdır. Yani atıyorum 15x15 piksellik bir parçaya 15x15 piksellik bir resim yapıştırılmalı ve "cuk" oturmalıdır. Böylece asla "sıkıştırma ya da esnetme" olmayacaktır. Ama tabi ki bu mümkün değil. Onun yerine "en yakın alt ya da üst" değer seçilir, ona göre de "esnetilir ya da sıkıştırılır".
Eskiden LOD, 0 veya 0'dan büyük değerler alıyordu. Bu sayede 1, 2 vs gibi değerler için ekrandaki kaplamaların tamamının birer boy küçük mipmaplerinin esnetilmiş halleri kullanılıyordu. Böylece genel olarak bütün sahnenin texture/kaplama kalitesi biraz azaltılmış oluyordu.
Eski oyunlarda çözünürlükler daha düşük, kaplamalar daha küçük ve detaylar daha az olduğu için bu tip detayları sadece yarı şeffaf, kendini tekrar eden desenlerde açıkça görüyorduk. Google'a "Half Life positive LOD" yazarak kolayca farkı görebilirsiniz. Genellikle CS:GO gibi oyunların oyuncuları dikkat dağıtan herşeyi yok edip oyun hamuru gibi basit renkler elde etmek için çok yüksek LOD değerleri kullandılar, çünkü bu kolaylıkla sürücü ayarlarından ayarlanabilen bir şeydi. Üstelik başka avantajları da vardı.
1) Ekran kartında VRAM yükü çok az da olsa azalıyordu. Yakın geçmişte 64MB ekran kartı kullanmış olanlar bunun önemini daha iyi anlayacaktır.
2) Anti-Aliasing ihtiyacı azalıyordu. Tüm görüntüler "esnetilmiş" olduğu için pastel bir şekilde bütün renkler birbirlerine yaklaşmış oluyor ve köşeler de kolayca çizilip gözü yormuyorlardı.
3) Uzaktaki nesnelerin detayları daha da fazla azaldığı için bu nesneler çok basit bir kaç renkle çiziliyorlar ve "az detay = az aliasing" mantığından yararlanıp titremiyorlardı. Çünkü bir pikselin bir önceki sahnede görüntülediği renk ile sonra görüntüleyeceği renk birbirine yakın, hatta çoğu zaman aynı idi.
Dezavantajları da var tabi, ama şu an çok önemli değiller.
Bunları sürücülerde kurcalamak mümkün olduğu gibi, müdahale olmadığında oyunun ön tanımlı değerleri geçerli oluyordu.
Sonra bir gün, büyük ihtimalle kazayla (burasını Reddit'te okudum, belki kazara değildir) sürücülerde negatif LOD skalası atamak mümkün oldu. -1, -2, -3 gibi değerler ile bütün kaplamalar hep bir, bazen bir kaç boy büyük olarak hazırlanıp "sıkıştırma" işleminden geçecek şekilde üretilebilir hale geldiler. Yapımcılar hemen bunu benimsediler. Çünkü yüksek çözünürlüklü ortamlarda avantajları vardı. Tabi dezavantajları da var. Madde madde yazayım. Hatta görsel arayanlar için Nvidia'nın, The Witcher 3 oyunu ve LOD hakkında karşılaştırmalı örnekler verdiği güzel bir sayfası bile var.
Avantajlar:
1) Her daim bir ya da bir kaç boy büyük kaplamalar kullanıldığı için daha fazla detay görüntünün içine "sıkıştırılabiliyor".
2) Günümüz oyunlarında çoğunlukla post-processing anti-aliasing kullanılıyor. Özellikle FXAA gibi, sahneyi bulanıklaştıran ve detayı azaltan bu tip anti-aliasing tekniklerinde peşinen "detayı arttırmak" görüntü kalitesini dengede tutmak için kullanılabiliyor.
3) Aynısı temporal anti-aliasing için de geçerli. Hatta orada faydaları açıkça görülebiliyor.
4) Yapımcıların hedefleri hep 4K'da olduğu için, yüksek çözünürlüklü sahnelere daha fazla detay rahatlıkla doldurulabiliyor ve özellikle uzak nesnelerin bütün detayları kolayca görülebilir hale geliyor.
5) Sabit duran, fotoğraflık görüntüler için harika bir opsiyon.
Dezavantajlarına gelelim:
1) En büyük dezavantajı, "sıkıştırma" işlemini yaparken filtreleme yatay ve dikey taramaları içerdiği için, azıcık bile eğimli veya yuvarlak bir yüzeyde ciddi miktarda aliasing olabiliyor, ortalık tırtıklardan geçilmiyor.
2) Sadece geometrik değil, kaplama içinde de kalıntılara (texture artifacts) sebep olabiliyor. Örneğin The Witcher 3 sayfası örneğinde saman desenli bir çatı örneği var. Detay artmasına rağmen, kaplamanın çözünürlüğü, gerçek piksellerde kendilerine yer bulmak için birbirleriyle savaşıyor. Hareket ederken çatıdaki samanlar anlamsızca titriyor.
3) Aynı sebepten dolayı küçücük detaylar büyük değişiklikler yapabiliyor. Örneğin bir karede, elektrik direği üzerindeki bir çatlak çok küçük olduğu için görüntülenmezken bir sonraki sahnede açı değiştiği için görüntülenmesi gerekiyor ama negatif LOD değerinden dolayı o piksele bir sürü detay "tıkıştırılıyor". İki resim arasında kısacık sürede kocaman ek farklılıkları çıktığı için biz bunu "yürüyen pikseller/Pixel shimmering" olarak görüyoruz ve özellikle GTA V gibi oyunlarda işi baş dönmeleri ve kusmalara kadar götürebiliyor.
4) Bu gibi titremeler ne yazık ki FXAA gibi post-processing tekniklerle giderilemiyor, ancak azaltılabiliyor. Yani yüksek çözünürlükler ve temporal anti-aliasing şart.
Hatta "4K'da anti-aliasing kullanmıyorum ben ya" diyenlerin aksine her daim güçlü bir temporal anti-aliasing mecburiyet haline geliyor.
Peki buradaki en kötü haber ne? Kötü haber şu, DirectX 10'la başlayarak, artık sürücü içerisinde manuel LOD ayarı yapılamıyor. Oyun yapımcılarının "ben o kadar uğraştım, o kaplamalar yüksek çözünürlüklü görünecek kardeşim" ısrarları, benchmarklarda "eşitsizlik" bahaneleri, hatta ve hatta türlü yarışmalarda hile sayılması gibi sebeplerle artık LOD, müdahale edilemez bir hale getirildi. Hatta Nvidia Inspector'da bulunan ve negatif değerlere izin vermemekle yükümlü "LOD clamp" tuşu bile aslında boş bir tuş ve hiç bir fonksiyonu yok (yine burayı Reddit'ten okudum, bir AMD kullanıcısı olarak deneme şansım olmadı. Ama AMD'de kesinlikle yeni oyunlarda LOD müdahalesi mümkün değil).
Buna bir de oyun yapımcılarının Mipmapleri üretmedeki tembellikleri ve de şeffaf yüzeyler için (örneğin çitler aslında şeffaf boşlukları olan tek parca kaplamalar) aplha-blending yapmaya da üşenmeleri eklenince LOD'den doğan titreme, aliasing, köşelenme ve bozulmaların tamamı kaçınılmaz oluyor.
Tuz biber ekeyim; yeni oyunlar ve sürücüler birbirlerini tanıdıkları için her karta ve her çözünürlüğe farklı LOD değerleri atanıyor ve bunları biz kullanıcılar göremiyoruz. Örneğin GTA V'te GTX 1060 ile oynarken negatif LOD devrede oluyor ve oyun sizi TXAA ya da yüksek çözünürlük kullanmaya adeta zorluyor. GTX 750 Ti gibi bir kartta ise 0'a yakın bir değer kullanarak resmen FXAA yeterli mesajı veriyor.
Gizli amaç; yeni ve yeni sayılabilecek kartlarda çözünürlüğü ve arttırmaya sizi zorlamak. Ondan sonra gidip 4K monitor alacaksınız. Bu sefer 4K'da oyun oynamak için daha güçlü ekran kartı alacaksınız, masraf da masraf.
Özellikle 2012-2016 arasında çıkan oyunlarda bu tip zorlamalar görmek mümkün. Crysis 3'te SMAA 4x'in yetmemesi, GTA V'in halleri ve yine bunun gibi oyunlara bakıldığı zaman o dönemin insanlara zorla yüksek çözünürlük dayatmak isteme çabası direk göze batıyor. Nvidia da bundan kendine pay çıkarmak isteyip "monitör satamazsak TXAA bahanesi ile Nvidia satarız" kafasına girdi o dönem. Onun açıkça desteklediği Unreal Engine de bugün bile hala o aklımdan parçalar taşıyor.
Kısacası bugün temporal anti-aliasing ile işler yoluna birazcık girmiş gibi olsa da negatif LOD'nin hayatımıza girişi zorla ve dayatmalarla oldu.
Alıntıdır.
Artık umarım anlamışızdır arkadaşlar.