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:

  1. 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.
  2. 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.

ÖzellikForwardDeferred
Çok sayıda dinamik ışıkPahalıUcuz
Bellek ve bant genişliğiDüşükYüksek (G-Buffer)
MSAADoğrudan desteklenirPratikte desteklenmez, TAA/FXAA gerekir
Saydam nesnelerDoğalAyrı forward pass ile çizilir
Materyal çeşitliliğiSerbestG-Buffer formatıyla sınırlı
Mobil / VRUygunGenellikle 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.
  1. LOD, frustum culling ve occlusion culling nedir?KolayGrafik & RenderGame Dev
  2. Draw call nedir? Batching teknikleri ile draw call sayısı nasıl azaltılır?OrtaGrafik & 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