Draw call nedir? Batching teknikleri ile draw call sayısı nasıl azaltılır?

Cevap

Draw call, CPU'nun GPU'ya "bu mesh'i bu materyalle çiz" komutunu göndermesidir. Asıl maliyet çoğu zaman çizimin kendisi değil, her çağrıdan önce yapılan state değişimleridir (shader, doku, buffer bağlama). Çok sayıda draw call CPU-bound darboğaz yaratır, özellikle mobilde.

Unity'de bu sayı Frame Debugger ve Stats penceresindeki Batches / SetPass calls değerlerinden izlenir.

Azaltma teknikleri

  • Static batching: Hareket etmeyen ve aynı materyali kullanan nesneler build sırasında tek büyük mesh'te birleştirilir. Hızlıdır ama ek bellek kullanır.
  • Dynamic batching: Küçük (az vertex'li) hareketli mesh'ler her kare CPU'da birleştirilir. CPU maliyeti nedeniyle modern projelerde faydası sınırlıdır.
  • GPU Instancing: Aynı mesh ve materyalin çok sayıda kopyası (ağaç, çimen, asker) tek çağrıyla, kopya başına farklı matris/renk verisiyle çizilir.
  • SRP Batcher (URP/HDRP): Draw call sayısını değil, çağrılar arasındaki materyal verisi yükleme maliyetini azaltır; aynı shader varyantını kullanan nesneler hızlı çizilir.
  • Texture atlas: Farklı dokuları tek dokuda toplayarak nesnelerin aynı materyali paylaşmasını sağlar. UI'da Sprite Atlas batching için kritiktir.
  • Mesh birleştirme: Elle veya araçla birden fazla mesh'i tek mesh'e çevirmek.
  • Materyal sayısını azaltmak: Her farklı materyal ayrı batch demektir; renderer.material erişimi materyalin kopyasını oluşturup batching'i bozar, paylaşılan değişiklik için sharedMaterial veya MaterialPropertyBlock kullanılır.

Batching'i bozan durumlar

  • Farklı materyal veya doku
  • Farklı lightmap indeksleri
  • Saydam nesnelerin sıralama gereksinimi
  • Negatif ölçek (bazı batching türlerinde)

Optimizasyona başlamadan önce darboğazın CPU mu GPU mu olduğu Profiler ile belirlenmelidir; GPU fill-rate'e takılıyorsanız draw call azaltmak işe yaramaz.

  1. Forward ve deferred rendering arasındaki fark nedir? Hangisi ne zaman tercih edilir?ZorGrafik & RenderGame Dev
  2. LOD, frustum culling ve occlusion culling nedir?KolayGrafik & RenderGame Dev
  3. Rendering pipeline nasıl işler? Vertex shader ile fragment shader arasındaki fark nedir?OrtaGrafik & RenderGame Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle