Conqueror's Blade'de, topraklar fethetme ve muharebelerde zafer kazanma hayallerinizi gerçekleştirebileceğiniz bir dünya yaratmayı hedefliyoruz. Bu amaçla engin bölgeler, arazide zigzag çizen surlar oluşturduk ve binlerce askerin hücuma kalktığı, oklar attığı ve ağır silahlar ateşlediği muharebeler hazırladık.

Devasa Muharebelerin Zorluğu

Devasa haritalar, bolca karakter, öğeler ve özel efektler oyunun arka yüzünde muazzam miktarda hesaplama yapılmasını gerektiriyor. Çıkış yaptığımızdan beri geçen üç yılda yeni içerikler, birimler, daha büyük haritalar ve bir dizi grafik iyileştirmeyi hayata geçirdik. Bunca şey yazılım olarak da donanım olarak da yükümüzü artırdı.

Birimlerin, kahramanların ve haritaların hepsinin arayüzleri çok komplike sistemlere bağlı. Muharebenin hararetli anlarında tüm bunların aynı anda çalışması işlemcinin yükünü artırıyor. FPS'i yükseltmek amacıyla çok çekirdekli işlemcilerden azami derecede faydalanabilmek için olabildiğince çok algoritmanın paralel olarak çalışmasını sağlayabilmek üzere yoğun bir çalışma yürüttük. Bunların bir araya gelmesi oyunun işlemcinin kapasitesinin çoğunu kullanarak grafik kartın derleme kapasitesini zorlamasına yol açtı. İşlenmesi gereken büyük miktardaki yüksek kaliteli dokunun da üstüne eklenmesi, çoğu oyuncunun boşta çok az işlemci belleğinin kalması demek. Öte yandan oyun arayüzünde, çarpışma mekaniğinde ve sahne efektlerinde iyileştirme yapıldıkça işlemcinin daha çok derleme yapması gerekiyor. Çok miktarda yüksek çözünürlüklü doku kullanan oyunlar, görüntü belleği ihtiyacını da artırıyor. Bu etkenler oyunların çalışırken daha çok işlemci kaynağı ve görüntü belleği gerektirmesine yol açıyor. Dolayısıyla pürüzsüz oynanış deneyimleri sunmak için, oyunun gelecekteki geliştirme çalışmalarında işlemci optimizasyonuna daha çok odaklanacağız.

Ayrıca devasa sahneler ve çok fazla sayıda karakter de işlemci üstündeki baskıyı artırıyor. İşlemci performansını artırmak için bellek tüketimini sıklıkla yükseltmek zorunda kalıyoruz. Ama algoritma optimizasyonu konusundaki mevcut idare stratejimizde zaaflar olduğunu kabul ediyor ve bunu öncelikli hedeflerimizden biri olarak görüyoruz.

Yeni içerikler oluşturup ekledikçe FPS düşüşü, lag ve performans sorunlarına dair şikâyetler de alıyoruz. Performansın ne kadar önemli olduğunun gayet farkındayız. Yine de sonuç olarak performansın ve grafik kalitesinin ideal dengesini bulmak zorundayız.

Performansı artırmak için yaptıklarımızın detaylarına girelim ve gelecek planlarımıza değinelim.

Eternal'da Neler Yaptık?

Her biriminin hareket etmek, saldırmak ve beceri kullanmak gibi eylemleri, özel efektlerinin kalitesi oranında sistem kaynağı meşgul ediyor. Özel efektler gösterilirken sistemlere ne kadar yük bindireceği içerdiği partikül miktarına bağlı. Dolayısıyla partikül sayısı, özel efektlerin performansa etkisini ölçmek için ilk akla gelen ölçüt. Genel oyun deneyiminden ödün vermeden özel efekt partiküllerinin şu anda aşırı yüksek olan miktarını makul bir aralığa indirerek oyun performansını iyileştireceğiz.

Birimler & Çarpışma

Birçok oyuncunun Zikalyan Milisleri patlayıcı kapsüllerini atarken yaşadığı FPS düşüşü, bu becerinin çok fazla partikül kullanıyor olmasından kaynaklanıyor.

Güzel görsel efektleri koruyarak kapsamlı bir performans artışı sağlamak için Eternal sezonunda, patlamalar dahil, birçok becerinin efekt partikülü miktarını düşürdük. Bunun performansa doğrudan etkisi oldu. Belirli becerilerin eski ve yeni partikül miktarları şöyle:

  • Silahtarlar Kelle Uçurma becerisi - 410 partikül oldu (eskiden 1.200'dü)
  • Silahtarlar Ölüm Vuruşu becerisi - 890 partikül oldu (eskiden 1.120'ydi)
  • Aksaçlı Garnizon Son Savunma becerisi - 420 partikül oldu (eskiden 1.120'ydi)
  • Shenji Elbombacıları Bomba At becerisi - 210 partikül oldu (eskiden 850'ydi)
  • Zikalyan Milisleri - 118 partikül oldu (eskiden 310'du)
  • Şarapnel Topu (Ender) - 2.700 partikül oldu (eskiden 6.400'dü)
  • Berserkerler Cinnet hali - 370 partikül oldu (eskiden 1.050'ydi)
  • Glev Muharebe İlahı becerisinin etkilediği birimlerin özel efekti - 240 partikül oldu (eskiden 410'du)

Hava Durumu & Objeler

Her haritada bulunan çok sayıdaki obje oyunun zevkini artırdığı gibi, stratejik tercihlere de etki ediyor. Her sur, engel ve bitki örtüsü haritaya can katıyor. Doğal olarak birçok objenin varlığı ve çok sayıda birimin yoğunlaşması yükü artırarak muharebelerde FPS düşüşlerine yol açıyor.

Buna çare olarak büyük muharebelerde sıklıkla gerçekleşen anlardaki dinamik obje performansının idaresinde iyileştirmeler yaparak, derleme gecikmesini büyük oranda düşürdük. Bu sayede böyle durumlarda daha istikrarlı bir FPS oranı göreceğiz.

Önümüzdeki Performans Optimizasyonları

Oyunun FPS'te genel bir küçük yükselişe yol açan birçok alanında performans iyileştirmelerine başladık bile. Bazı sorunlu alanlar tabii ki hâlâ var ve bunların birçoğu kilit noktalarda bulunuyor, bunun da oynanış deneyimine olumsuz bir etkisi oluyor.

Daha hedefe yönelik optimizasyonlar için şu anda büyük testler gerçekleştiriyoruz ve önümüzdeki günlerde de şunları yapmayı planlıyoruz:

  • Performansı düşüren ve bellek kullanımını kötüleştiren karmaşık algoritmalardan kaçınmak için arka planda çalışan arayüz algoritmalarını optimize etmek. Bunlar arasında mini harita, beceri çubukları ve birim bilgileri var.
  • Derleme sadakati oyundaki şeylerin nasıl göründüğünü etkiler. Ama çoğu durumda farklı katmanların aynı sadakat seviyesinde derlenmesi gerekmiyor. Mesela Surlu Kale'deki A suru üstünde çarpışırken üs bayrağının aslında gerekmemesine rağmen mükemmel şekilde gösterilmesi performansı düşürür. Ama mevcut derleme sadakati her durumda uygulanmıyor. Bu yüzden, objelerin haritadaki mesafesine bağlı olarak daha fazla derleme katmanı ekleyeceğiz. Mesela 100 metre uzaktaki objelerin derleme sadakati derecesini 1, 50 metre uzaktakilerinkini 2, 10 metre uzaktakilerinkini 3, 5 metre uzaktakilerinkini de 4 olarak belirleyebiliriz. Bunlar derleme hesaplamalarını, dolayısıyla da işlemci kullanımını azaltacak.
  • Saç, mızrak püskülü, cübbe eteği ve pelerin gibi görece küçük birçok modüllerin performansını optimize edecek şekilde kumaş ve fizik simülasyonlarının kodunu yeniden yazmak.
  • Grafik kalitesi ve performans arasında daha iyi bir denge oluşturmak için özel efekt partikülü miktarını azaltmaya devam etmek.
  • Doku kalitesinin daha iyi dağıtılmasını sağlayarak onunla performans arasında daha iyi bir denge oluşturmak, böylece bellek kullanımını daha da azaltmak.
  • Daha fazla seçenek ve konfigürasyon ekleyerek grafik ayarlarını iyileştirmek, bir yandan da donanımı tanıyarak öntanımlı ayarları iyileştirmek.

Yukarıda belirttiğimiz tüm iyileştirmeler komplike işlemler ve hayata geçirilmeleri uzun zaman alıyor. Daha çok içerik ekledikçe denkleme yeni değişkenler de eklemiş oluyoruz. Yine de bu sorunları sizlerle paylaşmak ve tartışmaktan mutluluk duyuyoruz. Uzun zamandır bu sorunlarla mücadele ediyoruz ve onlar üzerine sizlerden gelen sorulara, eylemlerle ve somut sonuçlarla karşılık vermek istiyoruz. Performans sorunlarıyla mücadelenin uzun zaman alacağının farkındayız ama yine de bu sorunlu alanları teker teker iyileştirmeyi sürdüreceğiz. Uzun soluklu bir faaliyete girişmiş bulunuyoruz.

Sizleri de bu süreçte bizimle çalışmaya davet ediyoruz. Optimizasyonlarımızın sonuçlarını açık, alfa ve beta testleriyle ölçmeyi düşünüyoruz. Bunların nasıl işleyeceğine dair ayrıntılı bilgileri daha sonra duyuracağız. Gelecek Geliştirme Blogu yazılarımızda performans optimizasyonlarımızın nasıl ilerlediğine dair de bilgiler sunacağız.