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.materialerişimi materyalin kopyasını oluşturup batching'i bozar, paylaşılan değişiklik içinsharedMaterialveyaMaterialPropertyBlockkullanı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.
İlgili Grafik & Render soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.