Mobilde 60 kare tutturmak: profiler ile darboğaz avı ve işe yarayan optimizasyonlar
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?



@keremyldz