Version: 2019.4
Forward rendering path
Legacy Deferred rendering path

Deferred Shading rendering path

This page details the Deferred Shading rendering path in Unity’s Built-in Render Pipeline. See Wikipedia: deferred shading for an introductory technical overview of deferred shading.

Visión General

Cuando se utiliza deferred shading, no hay límite en el número de luces que pueden afectar a un GameObject. Todas las luces son evaluadas por píxel, lo que significa que todos interactúan correctamente con mapas normales, etc. Además, todas las luces pueden tener cookies y sombras.

El Deferred shading tiene la ventaja de que la sobrecarga de procesamiento de la iluminación es proporcional al número de píxeles que la luz brilla. Esto se determina por el tamaño del volumen de luz en la escena, independientemente de cuántos GameObjects ilumina. Por lo tanto, el rendimiento se puede mejorar manteniendo las luces pequeñas. El Deferred shading también tiene un comportamiento altamente consistente y predecible. El efecto de cada luz se calcula por píxel, por lo que no hay cálculos de iluminación que se descomponen en grandes triángulos.

On the downside, deferred shading has no real support for anti-aliasing and can’t handle semi-transparent GameObjects (these are rendered using forward rendering). There is also no support for the Mesh Renderer’s Receive Shadows flag and culling masks are only supported in a limited way. You can only use up to four culling masks. That is, your culling layer mask must at least contain all layers minus four arbitrary layers, so 28 of the 32 layers must be set. Otherwise you get graphical artifacts.

Requisitos

Requiere una tarjeta gráfica con Varios Render Targets (MRT), Shader Model 3.0 (o posterior) y soporte para texturas de procesamiento de profundidad. La mayoría de las tarjetas gráficas para PC hechas después de 2006 admiten sombreado diferido, comenzando con GeForce 8xxx, Radeon X2400, Intel G45.

On mobile, deferred shading is supported on all devices running at least OpenGL ES 3.0.

Nota: El procesamiento diferido no es compatible con la proyección ortográfica. Si el modo de proyección de la cámara está ajustado a Ortográfico, la Cámara vuelve a la renderización hacia adelante.

Consideraciones de Rendimiento

La sobrecarga de rendering de las luces en tiempo real en sombreado diferido es proporcional al número de píxeles iluminados por la luz y no dependientes de la complejidad de la escena. Por lo tanto, las point o spot lights pequeñas son muy baratas de procesar y si son completamente o parcialmente ocluidas por Scene Game Objects entonces son aún más baratas.

Por supuesto, las luces con sombras son mucho más caras que las luces sin sombras. En el deferred shading, GameObjects de proyección de sombras todavía tiene que ser renderizado una vez o más para cada luz de proyección de sombra. Además, el sombreado de iluminación que aplica sombras tiene una sobrecarga de renderizado más alta que la utilizada cuando las sombras están desactivadas.

Detalles de Implementación

Objects with Shaders that do not support deferred shading are rendered after deferred shading is complete, using the forward rendering path.

The default layout of the render targets (RT0 - RT4) in the geometry buffer (g-buffer) is listed below. Data types are placed in the various channels of each render target. The channels used are shown in parentheses.

  • RT0, ARGB32 format: Diffuse color (RGB), occlusion (A).
  • Formato RT1, ARGB32: Specular color (RGB), roughness (A).
  • Formato RT2, ARGB2101010: World space normal (RGB), sin utilizar (A).
  • Formato RT3, ARGB2101010 (no-HDR) o ARGBHalf (HDR): Emission + lighting + lightmaps + reflection probes buffer.
  • Depth+Stencil buffer.

Por lo tanto, el diseño de g-buffer predeterminado es 160 bits/píxel (no HDR) o 192 bits/píxel (HDR).

If using the Shadowmask or Distance Shadowmask modes for Mixed lighting, a fifth target is used:

  • RT4, ARGB32 format: Light occlusion values (RGBA).

And thus the g-buffer layout is 192 bits/pixel (non-HDR) or 224 bits/pixel (HDR).

If the hardware does not support five concurrent rendertargets then objects using shadowmasks will fallback to the forward rendering path. Emission+lighting buffer (RT3) is logarithmically encoded to provide greater dynamic range than is usually possible with an ARGB32 texture, when the Camera is not using HDR.

Note that when the Camera is using HDR rendering, there’s no separate rendertarget being created for Emission+lighting buffer (RT3); instead the rendertarget that the Camera renders into (that is, the one that is passed to the image effects) is used as RT3.

G-Buffer pass

El pase g-buffer devuelve cada GameObject una vez. Los colores difusos y especulares, la suavidad de la superficie, el espacio normal del mundo y la emisión + ambiente + reflexiones + mapas de luz se renderizan en texturas del buffer g. Las texturas del buffer-g se configuran como propiedades shader globales para acceso posterior por shaders (CameraGBufferTexture0 .. CameraGBufferTexture3 nombres).).

Lighting pass

El lighting pass se calcula la iluminación basándose en g-buffer y profundidad. La iluminación se calcula en el espacio de la pantalla, por lo que el tiempo que tarda en procesarse es independiente de la complejidad de la escena. Se añade luz al buffer de emisión.

Las point y spot lights que no atraviesan el plano cercano de la cámara se renderizan como formas 3D, con la prueba del búfer Z contra la escena habilitada. Esto hace las point y spot lights parcialmente o totalmente ocluidas son más baratas de hacer. Las directional lights y las point/spot lights que cruzan el plano cercano se renderizan como quads de pantalla completa.

Si una luz tiene sombras activadas, entonces también se renderizan y aplican en este paso. Observe que las sombras no vienen “gratis”; Se necesitan renderizadores de sombra y se debe aplicar un sombreado de luz más complejo.

The only lighting model available is Standard. If a different model is wanted you can modify the lighting pass shader, by placing the modified version of the Internal-DeferredShading.shader file from the Built-in shaders into a folder named “Resources” in your “Assets” folder. Then open the Graphics settings (menu: Edit > Project Settings, then click the Graphics category). Change the “Deferred” dropdown to “Custom Shader”. Then change the Shader option which appears to the shader you are using.


  • 2017–06–08 Page published

  • Light Modes (Shadowmask and Distance Shadowmask) added in 5.6

Forward rendering path
Legacy Deferred rendering path