Mobil Oyun Optimizasyonu: Draw Calls Düşürme Teknikleri

03.02.2026
Burak Erol
55 Görüntülenme
Mobil Oyun Optimizasyonu: Draw Calls Düşürme Teknikleri

Mobil Oyun Optimizasyonu: Draw Calls Düşürme Teknikleri

Mobil cihazlarda CPU ve GPU gücü masaüstüne göre daha sınırlıdır. Bu yüzden oyun geliştirirken draw call (çizim çağrısı) sayısını düşük tutmak, akıcı FPS için en kritik optimizasyonlardan biridir. Özellikle Unity gibi motorlarda, sahnede “aynı karede kaç ayrı çizim işi gönderildiği” performansı doğrudan etkiler.

Draw Call Nedir ve Neden Önemlidir?

Draw call, CPU’nun GPU’ya “şu mesh’i, şu materyal/shader ile, şu texture’larla çiz” diye gönderdiği komuttur. Kulağa basit gelse de draw call sayısı arttıkça CPU tarafında hazırlık yükü büyür; GPU da sık sık state change (özellikle materyal/shader/texture değişimi) yaşadığı için verimli çalışamaz.

En pahalı senaryolardan biri şudur: Aynı karede onlarca hatta yüzlerce objede sürekli materyal değişimi yapmak. Çünkü her materyal değişimi, GPU’nun farklı bir “çizim durumuna” geçmesini ister.

Unity’de Draw Call’ları Nasıl Takip Edersiniz?

  • Stats Penceresi: Game view’da sağ üstte (Editor) "Batches" veya "SetPass Calls" değerlerine bakın.
  • Profiler: Rendering bölümünde CPU/GPU yükünü ayrıntılı görürsünüz.
  • Frame Debugger: Kare kare hangi draw call’ların atıldığını ve neden bölündüğünü gösterir. (En net araç budur).

1) Texture Atlas Kullanımı

En etkili ve en kolay uygulanabilir yöntemlerden biri texture atlas kullanmaktır. Birden fazla küçük görseli (UI butonları, ikonlar, karakter parçaları) tek bir büyük görselde birleştirirsiniz. Böylece Unity, bu görselleri tek materyal + tek texture ile tek seferde çizdirebilir.

???? Pro İpucu: 2048px Kuralı
Mobil cihazlar için Texture Atlas boyutunu genelde 2048x2048 ile sınırlı tutmaya çalışın. 4096px ve üzeri texture'lar eski cihazlarda bellek sorununa (crash) yol açabilir veya texture yüklenirken anlık donmalar yaşatabilir.

Texture Atlas Ne Kazandırır?

  • Materyal/texture değişimi azalır → Draw call sayısı düşer.
  • UI tarafında özellikle büyük fark yaratır.

Unity’de Atlas Uygulaması

  • Sprite Atlas (2D/UI için): Unity’nin yerleşik çözümüdür. Project settings'den "Sprite Atlas" modunu "Always Enabled" yapmayı unutmayın.

2) Materyal Sayısını Azaltın (Kod ile Optimizasyon)

Draw call’ların en büyük düşmanı genellikle materyal çeşitliliğidir. Yazılım tarafında yapılan en büyük hata, objenin rengini değiştirmek için renderer.material özelliğine erişmektir. Bu işlem, o objeye özel yeni bir materyal kopyası (Instance) oluşturur ve Batching'i bozar.

Bunun çözümü MaterialPropertyBlock kullanmaktır:

❌ YANLIŞ KULLANIM (Batching Bozulur)
// Bu kod her obje için yeni bir materyal oluşturur (Memory Leak & Draw Call artışı)
GetComponent().material.color = Color.red;
✅ DOĞRU KULLANIM (MaterialPropertyBlock)
// Bu yöntemle materyal kopyalanmaz, sadece GPU'ya giden parametre değişir.
// Batching bozulmaz, draw call artmaz.

MaterialPropertyBlock propBlock = new MaterialPropertyBlock();
Renderer renderer = GetComponent();

// Mevcut değerleri al
renderer.GetPropertyBlock(propBlock);

// Rengi değiştir
propBlock.SetColor("_Color", Color.red);

// Bloğu geri yükle
renderer.SetPropertyBlock(propBlock);

3) Batching’i Doğru Kullanın

Static Batching

Hareket etmeyen objeler (binalar, dekor, zemin parçaları) için Unity’nin Inspector panelindeki Static kutucuğunu işaretleyin. Unity, bu objeleri build alırken "tek bir dev mesh" gibi birleştirir ve tek seferde çizer.

Dynamic Batching

Küçük ve az vertex sayılı (genelde 300 vertex altı) hareketli objeler için işe yarar. Ancak modern Unity sürümlerinde (URP/HDRP) bunun yerine SRP Batcher tercih edilmektedir.

GPU Instancing

Eğer sahnede aynı ağaçtan, aynı taştan veya mermiden yüzlerce varsa, Materyal ayarlarına gidip "Enable GPU Instancing" seçeneğini işaretleyin. Bu, donanım destekliyse tüm kopyaları tek bir draw call ile çizer.


4) Mesh Birleştirme (Mesh Combining)

Çok sayıda küçük 3D objeyi tek tek çizdirmek yerine, uygun durumlarda mesh’leri birleştirerek draw call’ı azaltabilirsiniz. Bu işlem için Asset Store'daki "Mesh Baker" gibi toolları kullanabilir veya Blender'da modelleri birleştirip import edebilirsiniz.


5) UI Tarafında Draw Call Düşürme

Mobil oyunlarda menüler bile FPS’i öldürebilir. UI optimizasyonu için altın kurallar:

  • Sprite Atlas Şart: İkonları tek dosyada toplayın.
  • Canvas Bölümlemesi: Sürekli hareket eden bir "Yükleme Ikonu" ile sabit duran "Arka Planı" aynı Canvas'a koymayın. Hareket eden her şey, tüm Canvas'ın yeniden hesaplanmasına (Rebuild) neden olur. Hareketli parçaları ayrı bir Canvas (Sub-canvas) içine alın.
  • Görünmezleri Kapatın: SetActive(false) yapmak yerine Alpha'yı 0 yaparsanız draw call gitmez. Obje görünmeyecekse mutlaka disable edin.

Sonuç

Mobil oyun optimizasyonunda draw call sayısını düşürmek, daha stabil FPS ve daha düşük pil tüketimi demektir. En hızlı kazanımlar genellikle texture atlas + MaterialPropertyBlock kullanımı + Static Batching üçlüsünden gelir. Optimizasyon bir süreçtir; Frame Debugger ile sürekli ölçüm yaparak ilerlemeyi unutmayın.