14 dk. Serkan KÖSE 08.03.2022

Performans Takviyesi: VALORANT’ta Genel Geçersizlik Ayarı

VALORANT resmi sayfasında Genel Gerçersizlik’le ilgili yeni bir makale yayımlandı. İşte “Performans Takviyesi: VALORANT’ta Genel Geçersizlik Ayarı” makalesi:

Birkaç aydır üzerinde çalıştığımız Genel Geçersizlik özelliğiyle ilgili gelişmeleri sizinle paylaşmanın heyecanını duyuyoruz. Birazdan bu özelliğin detaylarından bahsedeceğiz ama gelin önce özelliğin 4.03 Yaması’ndan beri istemci performansını nasıl eklediğine bir bakalım.

Sürprizi bozmak istemeyiz ama aldığımız sonuçlar harika.

Genel Geçersizlik, oyuncu kitlemizin büyük bir bölümünde kayda değer gelişmeler sağladı. Hatta, oyunun çıkışından beri istemcilerde görülen en büyük performans kazanımı oldu.

Grafikler çok heyecan verici ve biz de bu durumdan çok mutluyuz. Yine de tam olarak neye baktığınızı anlamanız önemli. Büyük ve karmaşık veri gruplarıyla çalışıyoruz. Verileri düzenlemek, filtrelemek ve kontrol etmek oyuncu deneyimini anlamamıza yardımcı oluyor. Büyük resmi görebilmek için şunları aklınızda tutmalısınız:

  • “Yama” – “ortalama FPS” grafiklerinde sayılar ne kadar büyükse o kadar iyi.
  • Satırların her biri oyuncu kitlesinin yaygın olarak kullandığı donanım kombinasyonlarını (işlemci ve ekran kartı eşlemeleri) temsil ediyor. Performans verilerini analiz ederken bu eşlemelerin beklenebilecek performansa dair en önemli gösterge olduğunu düşünüyoruz. Aynı işlemci ve ekran kartı eşlemesine sahip bilgisayarları grafiklerde küme halinde gösterdik.
  • Veri örnekleri derecesiz ve dereceli olmak üzere iki eşleştirme sırasından toplandı. Bunlar VALORANT’taki en popüler oyun modları olduğu için bu bölgelerdeki performansı anlamak ve geliştirmek adına çok büyük çaba harcıyoruz.
  • Tam olarak 10 oyuncunun yer almadığı karşılaşmaları dahil etmedik. Bu sayede istisnaların verileri saptırmadığından emin oluyoruz (daha az oyunculu karşılaşmalar daha iyi performans gösterir).

GENEL GEÇERSİZLİĞİN ÖZETİ

Genel Geçersizlik işlemcinin ön planda olduğu istemcilerde (genellikle orta ve üst düzey bilgisayarlarda) %15’e varan kazanım sağlıyor. Bu kazanımı tespit edebilmek için birden fazla ekip aylar boyunca çaba gösterdi. Oyunun iyileştirmeler için hazır olan alanlarını tespit etme çalışmamız işe yaradı. Bu sırada yaptığımız risk yönetimi de oyuncuların daha tutarlı bir deneyim yaşayacağını temin etmemize yardımcı oldu.

Beklentileri Ayarlamak ve Faydasını Görecek Oyuncular

Mevcut ölçütlerimizden yola çıkarak işlemcilerin ön planda olduğu donanımlarda (genellikle orta ve üst düzey bilgisayarlarda) Genel Geçersizlik’in %15’e varan kazanım sağladığını gördük.

Toplu sonuçlarda bir yükseliş olduğu görülse de bu anlık oynanış performansını temsil etmiyor. Ayrıca aynı donanıma sahip bilgisayarların aynı sonuçları alacağını da garanti etmiyor.

Yani işlemcinin ön planda olduğu makinelerde VALORANT’ın taban performansı genel itibarıyla arttı fakat bilgisayarınızın nasıl bir performans sergileyeceği size bağlı olan birçok etkene göre farklılık gösteriyor.

GENEL GEÇERSİZLİK’İ ANLAMAK

Genel Geçersizlik’e yönelik genel bir bakış sunmadan önce Unreal Engine’deki kullanıcı arayüzü öğelerine biraz değinmemiz gerekiyor.

Araçlar ve Ağaç Yapıları

Araçlar olarak da bilinen kullanıcı arayüzü öğeleri, ağaç yapısına küçük inşa blokları ekleyerek oluşturulur. Ağaç yapısı bilgisayarınızdaki dosyalama sistemiyle benzerlik gösterir. Bir aracın herhangi sayıda çocuğu olabilir (bir klasörde herhangi bir sayıda dosya olabilmesi gibi).

Bu inşa blokları bir araya getirilerek karmaşık araçlar yapılabilir. Mesela cephane sayacımız birçok farklı bölümden oluşuyor ve onun ağaç yapısı şuna benziyor:

Hepsini bir araya getirdiğimizde cephane sayacının inşa blokları böyle görünüyor:

(Yeşil çizgiler net görünmesi için vurgulandı. Normalde bu çizgilerin çoğu üst üste biner.)

Ağaç yapısı içindeki bir veya daha fazla araç değiştiğinde bu durum diğer araçları da etkileyebilir. Örneğin, bir araç ekranda yer değiştirdiğinde onun altındaki diğer tüm araçlar da bulunduğu konumu yeniden hesaplamalıdır. Bu değişiklikler “Geçersizlik” adı verilen bir sistemle yönetilir. Sıradaki bölümde ondan bahsedeceğiz.

Geçersizlik

Geçersizlik, Unreal Engine’in bir aracın yeri değiştiğinde ve güncellenmesi gerektiğinde kullandığı mekanizmadır.

Bir araç; animasyon, renk, opaklık, boyut, düzen, metin, resimler ve birçok başka özellik sebebiyle geçersiz kılınır çünkü bu öğelerin hepsi oyunda gerçekleşen bir şey sonucunda değişebilir. Araç bu değişimlere uğradığında “Geçersiz” olur ve güncellenmesi gerektiğine işaret eder.

Bu işlemin biraz daha derinlerine inersek bir araç birden fazla geçersizlik türüne sahip olabilir. Buna verilebilecek bazı örnekler şunlar:

  • Yerleşim – Aracın boyutu değiştiğinde görülür (bedeli yüksektir).
  • Boya – Aracın görünümü değiştiğinde fakat boyutu değişmediğinde görülür.
  • Çocuk Sırası – Ağaç yapısı içindeki araçların sırası değiştiğinde görülür (yerleşimin değiştiği anlamına da gelir ve bu nedenle bedeli yüksektir).
  • Görünürlük – Aracın görünmez veya görünür hale gelmesi sonucunda görünürlüğü değiştiğinde görülür (yerleşimin değiştiği anlamına da gelir ve bu nedenle bedeli yüksektir).

Bu geçersizlik türleri, aracı doğru çizmek için gereken işlem türlerini belirlemek için kullanılır.

Bir araç başka bir araca bağlı olduğunda işler daha da karmaşıklaşır. Araçlar hiyerarşik olarak sıralanır ve yerleşimleri birden fazla etkene bağlıdır. Bir aracı geçersizleştirdiğinizde arayüzü doğru çizebilmek için ilgili başka araçları da geçersizleştirmeniz gerekebilir. Örneğin, birden fazla araç dikey bir yerleşimde düzenlendiğinde (örn. arkadaş listenizdeki sosyal panel) araçların sırası değişirse (örn. bir arkadaşınız çevrimiçi olduğunda) yerleşimdeki araçların hepsinin güncellenmesi gerekir.

Bu türden bir sistemde birden fazla hedef vardır:

  • Mümkün olduğunca az sayıda araç geçersiz kılınmalı. Doğru bir görünüm çizmek için güncellenmesi gereken araç sayısını azaltır.
  • Araç sadece gerektiğinde geçersiz kılınmalı. Bir aracı gereksiz yere geçersiz kılmak değerli işlemci döngülerini boşa harcar.
  • Bir araç geçersiz kılınmadığında tüm karelerde hızlıca görselleştirilebilmesi için sonucu önbelleğe kaydedilmeli. Hiçbir değişiklik olmazsa işlemci döngüleri harcanmamış olur.

Araçların nasıl güncellendiğini ve ne tür durumların geçersizliğe sebep olduğunu yeterince ayrıntılı anlattık. Şimdi de geliştiricilerin bunu nasıl hayata geçirdiğine bakalım.

Geçersizlik Kutuları

Unreal Engine, birden fazla aracı gruplamak için Geçersizlik Kutusu isimli bir bileşen sunuyor. Geçersizlik Kutusu içinde bulunan araçların ön geçişi, işaretlenmesi veya boyanması önleniyor. Onun yerine, toplanan sonuç bir tepe (vertex) ara belleğinde depolanıyor.

Geçersizlik Kutusu içindeki araçlardan biri geçersiz olduğunda önbellekte tutulan veriler siliniyor ve araç güncellenip yeniden boyanıyor. Tek bir kare uğruna önbelleği yenilemenin bedeli biraz yüksek olsa da küçük parçalara ayrılmış sonuçlar uzun vadede çok daha iyi.

Geçersizlik Kutuları, VALORANT’ın kullanıcı arayüzü performansında kilit öneme sahip ve bu oyunu çıkarmaya hazırlandığımız dönemde özellikle ön plandaydı. Fakat bunların da bazı bedelleri var:

  • Geliştiricilerin hangi araçların Geçersizlik Kutusu’nda gruplanmaya uygun olduğunu anlayabilmesi gerekiyor. Düzenli olarak güncellenen araçlar buna uygun değil.
  • Araçları Geçersizlik Kutusu’na yerleştirmek geliştiricilerin tarafında elle düzenlemeler yapılmasını gerektiriyor. Bu, oyundaki araçların hepsi için ideal değil ve bu nedenle geliştiricilerin hangi araçların Geçersizlik Kutusu’na eklenmeye değeceğini anlaması gerek.

Geçersizlik Kutularıyla ilgili daha fazla bilgi edinmek için Epic’in dokümanını inceleyebilirsiniz.

Artık Genel Geçersizlik hakkında konuşabilecek kadar bilgi edindik.

Genel Geçersizlik’e Giriş

Bu aşamada, “Neden tüm kullanıcı arayüzü öğelerini Geçersizlik Kutusu’na koymuyorsunuz ki?” diye düşünüyor olabilirsiniz. Genel Geçersizlik de tam olarak bunu yapıyor (aşağı yukarı).

Genel Geçersizlik tüm oyun genelindeki kullanıcı arayüzünü ciddi oranda iyileştirmeyi hedefliyor. Ayrıca geliştiricilerin araçları tek tek Geçersizlik Kutularına ekleme işini de hafifletiyor. Her açıdan faydalı.

Fakat UE4.25 (VALORANT’ta kullanılan Unreal Engine sürümü) itibarıyla Genel Geçersizlik tüm araç türleri için desteklenmiyor. Unreal Engine’in daha yeni sürümleri bu alanda iyileştirmeler yapsa da VALORANT bunlardan hemen faydalanamadı. Ayrıca Genel Geçersizlik’in VALORANT’ı ne kadar hızlandırabileceğini daha tam algılayamamıştık.

Çalışmalarımıza bu dönemde başladık.

NEDEN BU İŞE GİRİŞMEYE KARAR VERDİK?

2021 yılının temmuz ayının sonunda ekip dahili bir oynanış testi sırasında Genel Geçersizlik’i test etmeye karar verdi. Oynanış testinin başarıyla tamamlanabilmesi için bazı hataları giderecek minik değişiklikler yaptık. Fakat oynanış sırasında yeni hatalar çıkabileceğini biliyorduk… nitekim öyle de oldu.

Oynanış testinin sonucunda yaklaşık 20 hata tespit ettik ve bunlar sadece bariz olanlardı. Daha sinsi hatalar muhtemelen bulunmayı bekliyordu. Özel olarak test etmediğimiz bazı uç senaryolardan bahsetmiyoruz bile.

Peki Genel Geçersizlik performans kazanımı sağladı mı? Kesinlikle sağladı.

O oynanış testinden elde ettiğimiz verileri incelediğimizde kullanıcı arayüzünün yaklaşık %35 daha hızlı olduğunu gördük. (Not: Kullanıcı arayüzü, tek bir karedeki bedelin sadece bir kısmını oluşturuyor.)

Yine de hâlâ cevaplanmamış sorularımız vardı:

  • Tüm hataları gidermek ne kadar vaktimizi alacak?
  • Bu işten hangi ekipler sorumlu olmalı?
  • Bu planladığımız işlerden daha öncelikli mi? Düzenli içerik yayınlama programına uymak için tüm planlarımızı aylar öncesinden belirliyoruz ve her ne kadar çok heyecan verici olsa da bu türden acil bir işi bu programa yerleştirmek zor.
  • Hataları düzeltmek performans kazanımını azaltacak mı? Tüm hataları gidermek için çok fazla kod değişikliği yapmak gerekebilir ve bu değişikliklerin her biri kullanıcı arayüzünün muhtemel bedelini arttırabilir.
  • Bu işi ne zaman yapmalıyız? Genel Geçersizlik’in Enreal Engine’in sonraki sürümlerinde geliştirilmeye devam ettiğini bildiğimiz için Epic’teki değişiklikleri sisteme dahil ederken zamanlamamızı göz önünde bulundurmamız gerekiyordu.

En sonunda bazı sebeplerden dolayı yapacağımız çalışmanın emeklerimize değeceğini düşündük.

Unreal Engine Entegrasyonları ve Zamanlama Endişeleri

Unreal Engine 4.26 ve 4.27, Genel Geçersizlik alanında kayda değer bir ilerleme kaydetmiş olsa da VALORANT daha gecikmeli bir entegrasyon programına bağlı. “Son teknolojiyle” çalışmıyoruz çünkü risk yönetebilmek ve oyuncular için tutarlığı temin edebilmek istiyoruz.

Programımıza göre gelecek aylar boyunca Unreal Engine 4.25’te kalmaya devam edeceğimiz için oyuncular bu değişikliklerden bir yıldan daha uzun süre sonra faydalanabilecekti. Bu bize uygun gelmedi.

VALORANT’ın Unreal Engine güncellemelerine bakışına yönelik ayrıntlı bilgi edinmek için VALORANT’ın Teknoloji Lideri Marcus Reid’ın Twitter’da paylaştığı bu tweet dizisine göz atabilirsiniz.

Bilinen Performans Kazanımları

Genel Geçersizlik performans çalışmaları açısından çok eşiz bir şey olan ölçülmüş değeri sundu. Dahili oynanış testlerimizde muhtemel kazanımları ölçtük ve o değere ulaşmanın yolu (çoğunlukla) belliydi.

Performansla ilgili çalışmak zor. Aşırı detaylı bir iş. Kademeli değişiklikler genellikle performansı zaman içinde iyileştiriyor ve tek bir değişiklikle iki haneli performans kazanımı sağlamak çok nadir bir durum. Bu hayır diyemeyeceğimiz bir iyileştirme imkânıydı.

Hata gidermeleri sebebiyle daha az kazanım sağlasak da Genel Geçersizlik makul bir sürede oyunculara kayda değer performans kazanımı sunmak için en iyi şansımızdı.

BU İŞİ NASIL BAŞARDIK?

Genel Geçersizlik’e yönelik dahili testler Temmuz 2021’in sonuna doğru başlamış olsa da özelliği dengeli hale getirmeye yönelik ciddi çalışmalara Eylül 2021’in sonuna kadar odaklanmadık.

Epic’in Değişikliklerini Seçerek Entegre Etmek

Unreal Engine 4.26 ve 4.27’yi tamamıyla entegre etmemiz mümkün değildi fakat Epic’in Genel Geçersizlik üzerinde etkin bir şekilde çalıştığını biliyorduk. Bu nedenle binlerce değişikliğin arasına dalıp bizi daha dengeli ve her şeyiyle çalışan bir Genel Geçersizlik’e ulaştıracak değişiklikleri tespit etmeye karar verdik.

Değişiklikleri parça parça entegre etmek zor bir işti. Epic’teki işimize yarayacak değişiklikleri çekerken denge sorunlarına mahal vermemek adına tüm temel motor özelliklerini mümkün olduğunca az değiştirmemiz önemliydi. Diğer geliştiricileri etkilemesini önlemek için bu iş ana VALORANT departmanından ayrı bir departmanda yürütüldü.

Epic’in değişikliklerini seçip kendi motorumuza entegre ettikten sonra mümkün olduğunca fazla hatayı giderdik ve aynı zamanda Genel Geçersizlik’i ana VALORANT departmanına tanıtmaya hazırlandık. Bu süreçte (korkunç bir sorun çıkması ihtimaline karşın) özelliği hızlıca etkinleştirip devre dışı bırakmamıza yarayan bir işlev ekledik.

Hataların büyük bir kısmının giderilmesi ve Epic’in 4.26 ve 4.27 sürümlerinde getirdiği değişikliklerin entegre edilmesinden sonra izole ettiğimiz departmanı ana departmanla tekrar birleştirdik.

Hatalar Arasında Benzerlik Bulmak

Genel Geçersizlik’teki hataların büyük bir kısmı farklı şekillerde baş gösterse de kaynağı genelde tek bir soruna dayanıyordu. Bunlar giderilebilecek en değerli hatalardı çünkü tek bir değişiklikle birden fazla sorunu çözmemizi sağlıyorlardı. Mesela değişikliklerden biri oyunun çeşitli yerlerine dağılmış 10’dan fazla hatayı çözdü. Kaynaktaki soruna yönelik dikkatli analizler sonucunda Genel Geçersizlik’in güvenilirliği ve dengeliliğini geliştiren sağlam sonuçlara ulaştık.

Hataları Tespit Et, Hataları Gider, Oynanışı Test Et, Süreci Tekrarla

Ondan sonraki haftalar ve aylarda oynanış testinden önce Genel Geçersizlik’i etkinleştirdik, bir dizi hatayı tespit ettik, oynanış testinden sonra Genel Geçersizlik’i devre dışı bıraktık ve bu hataları giderdik. Bu düzenli bir döngü haline geldi.

Her döngüde daha az hata tespit edildi. Bulduğumuz hata sayısı giderek azalana ve sonunda tamamen sıfırlanana kadar bu döngüyü devam ettirdik.

Kasım 2021’in sonuna kadar tüm ciddi sorunlar çözülmüştü ve Genel Geçersizlik büyük oranda dengeliydi.

Dikkate Değer Hatalar
  • Astra oyunun çökmesine sebep oluyor – Bir dönem Astra oyuncularının oyunu yüklendikten sonra çöküyordu. Epic’in yaptığı değişiklikleri entegre ettikten sonra bu sorun çözüldü.
  • Çoklu katılım sebebiyle çökmeler – C++’ta çoklu katılım alengirli bir konu. Çok ayrıntıya girmeden anlatırsak, bir sınıftaki silici dizisi doğru sırayla işlem yapmadığı için çökmelere sebep oluyordu. Katılım sırasını düzenlemek için iki kod satırının yerini değiştirmek bu sorunu çözdü. Çoklu katılımla ilgili daha fazla bilgi edinmek için bu sayfaya göz atabilirsiniz.
  • Sonsuz sohbet sesi – Menüdeyken üzerine imlecinizle geldiğinizde sohbet çubuğu ses çıkarıyor. Herkesi sinir eden bir hata sesin bir saniye içinde birkaç kez çalmasına sebep oldu. Bu hatayı düzeltmek için araçların fare eylemlerini bir karede birden çok kez algılamasının zamanlamasını anlamamız gerekti.

Test Yöntemleri

Genel Geçersizlik’in bizi özelilkle temkinli davranmaya (ve bu kadar kapsamlı testler yapmaya) iten yönü oyunu her açıdan etkilemesiydi. Gerçekten.

Arkadaş listenizi? Kesinlikle. Sıraya girmek için bastığınız düğmeyi? Onu da. Ayarlar menüsünü? Doğru bildiniz. Kafadan vuruş yüzdenizi? Eh…

Kısacası kullanıcı arayüzü öğeleri oyunun her yerinde var ve genel itibarıyla oyunculara kritik bilgiler sunuyor. Bu kullanıcı arayüzü öğelerinden birini bile bozmamız kabul edilemezdi.

Bu yüzden Kalite Kontrol Ekibi, Genel Geçersizlik’in olması gerektiği gibi çalıştığından emin olmak adına birden fazla stratejiden oluşan bir test planı hazırladı.

Dikey Kesit Testi

VALORANT’ın “dikey kesiti” (vertical slice) oyuncuların istemciyi çalıştırmak, karşılaşma sırasına girmek, bir karşılaşmayı sonuna kadar oynamak ve oyun sonu ekranıyla etkileşime girmek için genel olarak izlediği temel yolu temsil ediyor. Oyunun kritik öğelerine odaklandığımızda Kalite Kontrol Ekibi oyunda en çok kullanılan öğeleri hızlıca test ederek sorunları önceden tespit edebildi.

Yıkıcı Test

Dikey kesit testi bittikten sonra yıkıcı test başladı. Bu tür bir testin amacı genellikle harici etkenleri (ağ bağlantısı ping’i, kare hızı, alt tab yapmak vb.) değiştirerek beklenmedik sorunları tespit etmektir. Kalite Kontrol Ekibi elindeki dahili araçları kullanarak birkaç hafta boyunca yıkıcı testler yaptı.

İstisnai Durum Testi

VALORANT’ın çoğu kısmı oyuncu kitlesinin sadece küçük bir yüzdesi tarafından deneyimleniyor. Oyunun bazı kısımları sadece bir kere deneyimleniyor (örn. yeni oyuncu deneyimi). Oyunun bu kısımlarına daha az uğranması bu bölümlerin önemini azaltmıyor. İstisnai durumları tespit etmek ve hepsini test etmek gizli kalmış hataları yakalamamızı sağladı.

Açık Beta Testi

Açık Beta (PBE), Genel Geçersizlik için çok önemli bir dönüm noktasıydı.

  • Dışarıdaki oyuncular bu özelliği ilk kez test edebilecekti. Yani, Genel Geçersizlik “gerçek dünya” şartları altında test edilebilecekti.
  • Açık Beta birçok farklı donanım özelliğini temsil ediyor. Açık Beta düşük özelliklerden yüksek özelliklere uzanan bir donanım yelpazesini destekliyor. Bu denli kapsamlı oyuncu bilgisayarı çeşitliliği sayesinde Genel Geçersizlik’in daha geniş bir oyuncu kitlesinde iyi çalışacağına güvenmeye başladık.

22-23 Ocak 2022 tarihleri arasındaki Açık Beta testlerinden sonra Genel Geçersizlik’in rekabet bütünlüğüyle çakışmadığını ve tahmin ettiğimiz ölçüde performans kazanımı sağlandığını gördük.

Genel Geçersizlik’i Oyuna Eklemek

4.03 Yaması’nda Genel Geçersizlik’i oyuna ekledikten sonra hatalarla ilgili oyuncu raporlarını yakından takip etmeye başladık. Tahminlerimizin aldığımız sonuçlarla uyumlu olduğunu doğrulamak için performans verilerini yakından izledik. En nihayetinde Genel Geçersizlik oyuncular için büyük bir başarı oldu. Umarız düzelen kare hızınızın tadını çıkarıyorsunuzdur.

Genel Geçersizlik dünyaya açıldığına göre Performans Ekibi daha da fazla kazanım sağlamak için çalışmalarına geri dönebilir. Daha sonra görüşmek üzere, iyi oyunlar!

 

Serkan KÖSE

Esporlab yazarı.
Neyse ki iki hakkım daha var.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-BÜLTEN’E ABONE OL

E-Bültene abone olarak espor dünyasında yer alan güncel haberlerden,
rehberler, röportajlar, pro dünyası ve benzeri tüm güncel haberlerden
önce sizin haberiniz olsun.

eksikgedik.com gamerdunyasi.com cemre.com takipçi satın al