Stellaris’te Performans ve Teknik Sorunlar

Stellaris geliştirici günlüklerinde bu hafta oyun performansından ve teknik sorunlardan bahsediliyor.

Herkese merhaba! Ben Moah, Stellaris’in teknoloji direktörüyüm. Sonunda sizlerin beklediği şey hakkında konuşabilirim: Federations’ta kaç tane yeni platypi olacak? Haftalar sonra…

Görünen o ki “daha teknik” olmam lazım. Stellaris’in gizem dolu koduna atlamadan önce biraz yeni özellikler arası dengeden, geliştirilmiş performanstan ve stabiliteden – özellikle multiplayer ve korkunç senkronizasyon hataları açısından konuşmak istiyorum (en azından kendi adıma korkunç).

Hassas Denge

Stellaris, kod bazlı birçok oyun gibi, Mikado veya Jenga gibi kompleks bir oyundur: her parçası diğer her parçaya bir şekilde bağlıdır. Bir yenilik eklediğinizde daha fazla bağlantı eklemiş oluyorsunuz. Eğer dikkatli iseniz sadece az miktarda, eğer aceleniz var ise çok miktarda eklersiniz. Bu genel olarak Plansız Yeniliklere (yani hatalara) sebep olur. Ek olarak, onları asıl oyunda işlerken gördüğümüzde yenilikleri beklenmeyen şekillerde genişletmeye çalışırız, bu da daha çok Plansız Yenilikler’e yol açmakta.

Neler olduğunu anladığımız zaman daha dikkatli olmaya çalışıyoruz. Belki fazla dikkatli. Çok fazla şeyi kontrol eder, asla gerçekleşmemesi gereken bir etkileşimin gerçekte yaşanmadığından emin oluruz. Ne şimdi, ne sonra. Asla.

Plansız yenilikleri kaldırdınız ama oyun biraz, ah… çok özenli. Bazıları yavaş olduğunu söyler.

Böylece bazı kontrolleri kaldırdınız. Galaksi etrafında dönmenize gerek olmadığını kavradınız, bu minik gezegen etrafında da dönebilirsiniz. Sonra bir adım öteye gider ve “bu kontrolü belki de üç haftada bir yapabilirim ve bu hesaplama tüm bu kontroller için gerekli, onu burada saklayabilir ve daha sonra değişiklik olduğunda tekrar kullanabilirim” diye düşünürsünüz.

Böylece oyun artık o kadar özenli değil, plansız yenilikler bölgesine geri döndük. Ama ön belleğe alma (depolama/hesaplamaları tekrardan kullanma) farklı zamanlarda farklı makinelerde gerçekleşiyorsa biraz farklı sonuçlar elde edersiniz (bir geliştiriciye kahve içmeden önce ve sonra bir şey sormak gibi).

Biraz farklı sonuçlar OOS’un öne çıktığı andır! İstemci ve sunucular 0.00001 maliyet farkına sahiptir, zaman içinde birleşir, satın aldığınız corvette sunucudadır ama istemcide değildir.

Böylece “zeki” algoritmanızı kaldırırsınız. Onun yerini doğru algoritma ile değiştirirsiniz. İkinci adımda kazandıklarınızın yarısını kaybeder ve yeni hatalar ile tanışırsınız. Muhtemelen.
Durulayın ve tekrarlayın.

Ama benim sabah rutinimden bu kadar konuşmak yeter. Hadi şimdi şey hakkında konuşalım…

Performans

Stellaris fanları C++ programcıları gibidir: performans her zaman akıllarındadır. Dürüst olmak gerekirse son zamanlarda bizim de. Performansın olabileceğinin en iyi halinde olmadığını biliyoruz, özellikle oyunun ileri aşamalarında ve büyük galaksilerde. Bunlar bir kenarda dursun, vaktimizi performansı normalden biraz daha derinlemesine iyileştirmek için ayırdık. Neyin en fazla zaman tükettiğine baktık ve bunu herkes biliyor ki bu…

Nüfuslardı.

Stellariste nüfusların çok fazla zaman tüketmesinin birden fazla sebebi var ama asıl olanı oyun sonunda onlardan ÇOK FAZLA olması. ÇOK, çok, çok, çok, çok fazla. Ve etkileri de çok fazla! Nüfuslar her meslekte ne kadar iyi olabileceklerini hesaplamak zorundalar (her 7 günde bir). Daha sonra en iyi oldukları mesleği alabilmek için gezegendeki diğer her nüfusla savaşmak zorundalar. Ayrıca spesifik bir etiğe sahipler mi onu kontrol etmelidirler. Spesifik bir politik gruba katılabilir mi? Ne kadar mutlular? Ne kadar mutlu olabilirler? Az ilerideki gezegende olsalar ne kadar mutlu olurlardı?

Tüm bunlar değişkenlerin hesaplamalarını tetikler. Benim son geliştirici günlüğümü hatırlıyorsanız sadece değişkenlerin nüfuslardan daha çeşitli olduğunu biliyorsunuzdur. Ve hepsi birbirine bağlı. Onları hesaplamak, bir ipliği çekerek tüm süveteri elde etmek gibidir.

Peki ama bunun hakkında ne yapabiliriz?

İlk olarak “meslek dağılımını her gün yapmak zorundayız çünkü yeni meslekler ne zaman eklendi bilmiyoruz” konusunda biraz inatçılık yapmış olabilirim. Bu varsayımı tekrar inceledik ve meslek dağılımı artık sadece talep olduğunda gerçekleşecek. Ayrıca tekrarlamaların daha az gerçekleşmesi için onu baştan yazdık.

Ayrıca bir imparatorlukta her nüfusu kapsayan bir veya daha fazla nüfusun köleleşmiş veya gerilemiş olup olmadıklarını, aynı zamanda diğer tür bazlı test edilebilir şeyleri kontrol eden birkaç tetikleyici fark ettik. Böylece bu şeyleri tür bazında test edecek yeni tetikleyiciler yaptık. Aynı ruhla, yeni filo bulabilmeleri için tüm gemileri kapsayan olaylarımız vardı, böylece filo bazında yeni tetikleyiciler ekledik.

İkinci olarak kontrolün, nüfusların etik değiştirip değiştiremeyeceğini (ve bunun yeniden çalışmasını sağladık) veya politik gruplara katılıp katılamayacaklarını ele alışını yeniden yapılandırdık.

Son olarak daha fazla thread kullanmanın sunduğu fırsatları araştırdık (ve bulduk).

Ama bu kadar konuşma yeter! Sonuç ne? Şey, eğer bir resim bin kelimeye bedelse cevabınız saniyede 30000 kelimeyle burada:

Videoda 2.5.1 “Shelley” ile 2.6 “Verne” arasında 20000’den fazla nüfuslu bir oyun kaydında performans kıyaslaması yapılıyor. Benim çalışma bilgisayarımda (Intel Core7-7900X @ 3.30Ghz, 10 çekirdek 20 thread ve AMD R9 Fury) kaydedildi. Aynı sonuçları alamayabilirsiniz, performanstaki asıl fark bilgisayarınıza göre ve elbette kayıtlı oyunlarınızın duruma göre çeşitlilik gösterebilir. Ortalama olarak ileri oyun aşamalarında %15 ile %30 arasında iyileşme gözlemledik. Bu kayıt nüfustaki iyileştirmeyi göstermek için idealdir.

Bu ortalama neyin nesidir? Bunu nereden biliyorsunuz?

Şey, oyunu tüm gece oynayan synth’lerimiz var. Sabahları ne kadar ilerlemiş olduklarını kontrol ediyoruz. Ayrıca kaç tane hata ile karşılaştıklarını, oyun sonlarının nasıl göründüğüne, OOS elde edip etmediklerine bakıyoruz ve bunların hepsini tablolara ve grafiklere birçok renk eşliğinde döküyoruz. Sonra synth’leri siliyoruz ki ruhlar ve ıvır zıvır diğer şeyler hakkında sinir bozucu sorular sormasınlar.

Son Olarak

Her ne kadar performansı aklımızda tutup onu kabul edilebilir yapabilmek için en iyisini yapsak da, bu sorunu daha derinlemesine ele alabilecek şansı bulduğumuz için mutluyuz. Umarım bu değişiklikler bizde yarattığı kadar sizde de neşe yaratır ve geri bildirimlerinizi bekliyor olacağız!

Önümüzdeki hafta başka bir geliştirici günlüğünde hepinizin beklediği diğer bir şey ön planda olacak… DAHA FAZLA PLATYPI!

Yazar: İhsan Berkay Erdem

Yorumla

STRATEGYTURK

Strategyturk'te strateji oyunlarından haberleri, yama notlarını, geliştirici günlüklerini ve daha birçok içeriği Türk strateji oyuncularına Türkçe bir biçimde sunuyoruz. Aynı zamanda yeni çıkan strateji oyunlarının ve eklentilerinin incelemelerini yapıyor, bu oyunlara dair sürekli olarak içerik oluşturuyoruz.

Sosyal medya sayfalarımızı takip ederek strateji oyunlarındaki gelişmelerden haberdar olabilirsiniz.

STRATEGYTURK TWITTER

18:00'da Imperator: Rome Magna Graecia ön gösterimiyle yayında olacağız: https://t.co/dEkfLjgjDK https://t.co/asuHLCTTXt
Crusader Kings III'te Örgütleşmeler ve İç Savaşlar #ck3 https://t.co/SfKA5Etuae

Strategyturk Flickr