Forward ve deferred rendering arasındaki fark nedir? Hangisi ne zaman tercih edilir?
Cevap
Forward rendering
Her nesne çizilirken onu etkileyen tüm ışıklar aynı anda shader'da hesaplanır. Klasik maliyet yaklaşık nesne sayısı × ışık sayısıdır. Unity'nin built-in pipeline'ında ek ışıklar ek pass'lere yol açar; URP'de ise ışıklar tek pass'te, nesne başına sınırlı sayıda hesaplanır.
Deferred rendering
İki aşamada çalışır:
- Geometry pass: Tüm nesneler bir kez çizilir; ışık hesaplanmaz. Her pikselin albedo, normal, derinlik, metalik/pürüzlülük gibi bilgileri birden fazla render target'tan oluşan G-Buffer'a yazılır.
- Lighting pass: Her ışık, sadece etkilediği ekran pikselleri için G-Buffer'ı okuyarak ışık hesabı yapar.
Maliyet yaklaşık ekran pikseli × piksel başına ışık olur; nesne sayısından bağımsızdır.
| Özellik | Forward | Deferred |
|---|---|---|
| Çok sayıda dinamik ışık | Pahalı | Ucuz |
| Bellek ve bant genişliği | Düşük | Yüksek (G-Buffer) |
| MSAA | Doğrudan desteklenir | Pratikte desteklenmez, TAA/FXAA gerekir |
| Saydam nesneler | Doğal | Ayrı forward pass ile çizilir |
| Materyal çeşitliliği | Serbest | G-Buffer formatıyla sınırlı |
| Mobil / VR | Uygun | Genellikle uygun değil |
Ne zaman hangisi
- Forward: Mobil, VR (MSAA ve bant genişliği önemli), az ışıklı sahneler, stilize grafikler, çok sayıda saydam nesne.
- Deferred: PC/konsolda çok sayıda dinamik ışık (gece şehri, patlamalar), SSAO ve screen space reflection gibi G-Buffer'dan faydalanan efektler.
Hibrit yaklaşımlar
- Forward+ (tiled/clustered forward): Ekran tile'lara veya 3B cluster'lara bölünür, her tile'ı etkileyen ışık listesi compute shader ile çıkarılır. Forward'ın esnekliği ve MSAA desteğiyle çok sayıda ışığı birleştirir. Unity URP'de Forward+ seçeneği vardır.
- Modern motorların çoğu deferred ana pass + forward saydamlık pass kombinasyonu kullanır.
İ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.