Daha iyi bir Türkiye mümkün! Türkiye'nin girişimcilik ve inovasyon topluluğu·2018'den beri

Oyun Geliştirme

/oyungelistirme

Unity, Unreal, Godot ya da kendi motorun — mobil, masaüstü ve web oyunlarının üretim kanalı. Oyun tasarımı, mekanik kurgusu, seviye tasarımı, sanat ve ses, optimizasyon ve mağaza yayını burada konuşulur. İlk prototipini utanma paylaş; oyun geliştirmek maraton işidir ve bu kanal, o maratonu birlikte koşanların kampıdır. Türkiye'nin oyun girişimciliği dalgasına katılmak için doğru yerdesin.

#oyun geliştirme akışına dön

Mobilde 60 kare tutturmak: profiler ile darboğaz avı ve işe yarayan optimizasyonlar

Mobil oyunumuz orta seviye cihazlarda 35 ile 45 kare arasında geziniyordu. Üç haftalık bir optimizasyon çalışmasıyla çoğu cihazda sabit 60 kareye çıktık. Yaptıklarımı sırayla yazayım.

Birinci kural: ölçmeden optimize etmeyin. İlk haftada tahminle optimizasyon yaptık ve hiçbir şey değişmedi. Profiler açıp bakınca sorunun tahmin ettiğimiz yerde olmadığını gördük. Her oyun motorunun profiler aracı var ve gerçek cihazda çalıştırmak şart; editörde ölçülen değerler yanıltıcı.

İkinci kural: işlemci mi ekran kartı mı? Önce darboğazın nerede olduğunu belirleyin. Çizim çağrısı sayısı, üçgen sayısı ve doku belleği ekran kartı tarafı; betik çalışma süresi, fizik ve çöp toplama işlemci tarafı. Bizde ikisi de vardı ama baskın olan işlemci tarafıydı.

Üçüncü: çöp toplama. En büyük takılma sebebimiz buydu. Her karede çalışan kodda bellek ayıran işlemler vardı ve bu, periyodik takılmalara yol açıyordu. Çözüm: nesne havuzu kullanmak, her karede yeni nesne oluşturmamak, metin birleştirme gibi işlemleri döngü dışına almak.

Dördüncü: çizim çağrısı azaltma. Çok sayıda ayrı nesne, çok sayıda çizim çağrısı demek. Doku atlası kullanarak aynı malzemeyi paylaşan nesneleri birleştirdik. Arayüz tarafında da aynı sorun vardı; arayüz öğelerini katmanlara ayırıp sık değişenleri ayrı tuttuk.

Beşinci: fizik. Fizik hesaplaması her karede yapılıyordu ve gerek yoktu. Sabit adım sayısını düşürdük, çarpışma katmanlarını sadeleştirdik ve gereksiz çarpışma kontrollerini kapattık.

Altıncı: her karede çalışan kodu azaltmak. Pek çok işlem her karede çalışıyordu ama saniyede bir çalışması yeterliydi. Zamanlayıcıya bağladık.

Yedinci: doku çözünürlüğü. Mobil cihazda kimsenin fark etmeyeceği çözünürlükte dokular kullanıyorduk. Çözünürlüğü düşürüp sıkıştırma formatını mobil için uygun olana çevirdik; bellek kullanımı belirgin biçimde düştü ve ısınma azaldı.

Sekizinci: ısınma ve kısıtlama. Mobilde asıl düşman ısınma. Cihaz ısındığında sistem performansı kısıyor ve ilk ölçümde iyi görünen oyun, on beş dakika sonra kötüleşiyor. Testlerinizi kısa değil uzun oturumlarla yapın.

Sonuç. 35 kareden 60 kareye çıktık ve daha önemlisi, kare süresi tutarlı hale geldi. Oyuncu için ortalama kare sayısından çok, takılma olmaması önemli.

Optimizasyon yapanlar, sizde en büyük kazanç nereden geldi?
12 1 yorum
Yorumlar (1)
@noway · 8 gün önce 3
Uzun oturumla test etme uyarısı çok önemli ve çoğu ekip atlıyor. Isınma kaynaklı kısıtlama, iki dakikalık testte hiç görünmüyor. Biz yirmi dakikalık otomatik test oturumları kurduk ve kare süresi grafiğini kaydediyoruz.
Tanıtım videosu · 1 dk

inovanadolu'yu 1 dakikada tanı

Kanallar, sözlük, İlham blogu, kişilik testleri ve 102 ücretsiz araç. Üretenlerin buluşma noktasında neler olduğunu kısaca izle.