TA Toolbox Home / TA Glossary

Forward Rendering and Deferred Rendering: Principles, Differences, and Selection

2026-08-24

Rendering Paths Overview

In real-time rendering, forward rendering and deferred rendering are two main rendering paths. Forward rendering calculates lighting per object, while deferred rendering writes geometry information to a G-Buffer first and then computes lighting uniformly. Choosing which path depends on scene complexity, number of lights, platform performance, and other factors.

Forward Rendering

Forward rendering is the most direct approach: for each object, in the fragment shader, iterate over all lights affecting the object, compute lighting, and output color. It is often combined with multi-pass forward rendering, where each light gets a pass and results are blended.

**Advantages**:

  • Supports hardware MSAA for anti-aliasing.
  • Transparency handling is simple; transparent objects render naturally.
  • Lower memory usage, no G-Buffer needed.
  • Suitable for mobile and simple scenes.

**Disadvantages**:

  • As light count increases, computational complexity grows O(objects × lights), performance drops quickly.
  • Light culling is difficult, requiring CPU-side management.
  • Does not support complex screen-space effects (like SSAO) without extra passes.

Deferred Rendering

Deferred rendering splits rendering into two stages:

  1. **Geometry Pass**: Render geometry information (position, normal, albedo, material properties, etc.) into multiple render targets (G-Buffer).
  2. **Lighting Pass**: For each pixel on screen, read data from G-Buffer, iterate over all lights to compute lighting, and output final color.
  3. **Advantages**:

    • Lighting computation decoupled from geometric complexity, supports many dynamic lights, each light only affects screen pixels.
    • Suitable for complex scenes and high-end PCs.
    • Naturally supports screen-space effects (e.g., SSAO, SSR).

    **Disadvantages**:

    • G-Buffer consumes significant video memory bandwidth, may be a bottleneck on mobile.
    • Does not support hardware MSAA (usually uses post-process AA like TAA).
    • Transparency handling is complex; transparent objects require forward rendering pass.
    • For simple scenes, performance may be worse than forward rendering.

    Selection Recommendations

    • **Mobile**: Prioritize forward rendering due to bandwidth and memory constraints.
    • **PC/Console**: If scene has many dynamic lights, use deferred; if scene is simple or high-quality MSAA is needed, use forward.
    • **Hybrid**: Some engines support forward+deferred hybrid, like Unreal's Forward+.

    Frequently Asked Questions

    Which is better performance, forward or deferred rendering?

    Depends on scene: deferred is better with many lights and complex geometry; forward is better with few lights and simple geometry. Mobile typically favors forward.

    Why doesn't deferred rendering support MSAA?

    Because G-Buffer has multiple render targets, MSAA would require multisampling all targets, causing huge memory and bandwidth overhead.

    How are transparent objects handled in deferred rendering?

    Usually render opaque objects first (deferred), then render transparent objects using a forward pass, sorted by depth.

    How to choose rendering path in Unity?

    In Project Settings, select Forward or Deferred; URP defaults to forward, HDRP defaults to deferred.

    What G-Buffers are needed for deferred rendering?

    Typically include albedo, normal, depth, metallic, roughness, etc., depending on engine and material model.

FAQ

Which is better performance, forward or deferred rendering?

Depends on scene: deferred is better with many lights and complex geometry; forward is better with few lights and simple geometry. Mobile typically favors forward.

Why doesn't deferred rendering support MSAA?

Because G-Buffer has multiple render targets, MSAA would require multisampling all targets, causing huge memory and bandwidth overhead.

How are transparent objects handled in deferred rendering?

Usually render opaque objects first (deferred), then render transparent objects using a forward pass, sorted by depth.

How to choose rendering path in Unity?

In Project Settings, select Forward or Deferred; URP defaults to forward, HDRP defaults to deferred.

What G-Buffers are needed for deferred rendering?

Typically include albedo, normal, depth, metallic, roughness, etc., depending on engine and material model.