Version: 2019.4
Rendering paths in the Built-in Render Pipeline
Deferred Shading rendering path

Forward rendering path

This page describes the Forward rendering path in Unity’s Built-in Render Pipeline.

Forward rendering renders each object in one or more passes, depending on lights that affect the object. Lights themselves are also treated differently by Forward Rendering, depending on their settings and intensity.

Detalles de Implementación

In Forward rendering, some number of brightest lights that affect each object are rendered in fully per-pixel lit mode. Then, up to 4 point lights are calculated per-vertex. The other lights are computed as Spherical Harmonics (SH), which is much faster but is only an approximation. Whether a light will be a per-pixel light or not is dependent on this:

  • Las luces que tienen su modo de Render configurado en Not Important son siempre por vértice o SH.
  • La directional light más brillante es siempre por píxel.
  • Las luces que tienen su modo de renderizado establecido en Important siempre son por píxel.
  • Si los resultados anteriores resultan en menos luces que la Pixel Light Count Quality Setting actual, entonces se renderizan más luces por píxel, en orden de disminución de brillo.

La renderización de cada objeto sucede como sigue:

  • Base Pass aplica una directional light por-pixel y todas las luces por-vértice/SH.
  • Otras luces por-pixel se renderizan en passes adicionales, un pase para cada luz.

Por ejemplo, si hay algún objeto que está afectado por una cantidad de luces (como un círculo en una foto abajo, afectado por luces A a H):

Supongamos que las luces A a H tienen el mismo color y la misma intensidad y todas ellas tienen el modo de renderización Auto, por lo que se clasificarían exactamente en este orden para este objeto. Las luces más brillantes se renderizan en el modo de iluminación por pixel (A a D), luego hasta 4 luces en el modo de iluminación por vértice (D a G), y finalmente el resto de luces en SH (G a H):

Tenga en cuenta que los grupos de luz se superponen; Por ejemplo, la última luz por píxel se mezcla en el modo iluminado por vértice, por lo que hay menos “luces” cuando los objetos y las luces se mueven.

Base Pass

El paso base procesa el objeto con una directional light por píxel y todas las luces SH/vértice. Este pase también añade cualquier lightmaps, iluminación de ambiente y emisión del shader. La directional light emitida en este paso puede tener sombras. Tenga en cuenta que los objetos Lightmapped no obtienen la iluminación de las luces SH.

Tenga en cuenta que cuando se utiliza la pass flag “OnlyDirectional” en el shader, entonces el forward base pass sólo procesa la directional ligh principal, luz de ambiente/lightprobe y lightmaps (las luces SH y por vértice no se incluyen en los datos de pass).

Pases adicionales

Se producen pases adicionales para cada luz adicional por pixel que afecte a este objeto. Las luces en estos pases por defecto no tienen sombras (por lo que en el resultado, Forward Rendering admite una luz direccional con sombras), a menos que el atajo variant multi_compile_fwdadd_fullshadows se utilice.

Consideraciones de Rendimiento

Las luces armónicas esféricas son muy rápidas de renderizar. Tienen un costo muy bajo en la CPU y son actually free para que la GPU se aplique (es decir, el base pass siempre calcula la iluminación SH, pero debido a la forma en que funcionan las luces SH, el costo es exactamente igual sin importar cuántas luces SH están ahí).

Las desventajas de las luces SH son:

  • Se calculan en los vértices del objeto, no en píxeles. Esto significa que no admiten cookies ligeras o mapas normales.
  • La iluminación SH es de muy baja frecuencia. No puede tener transiciones de iluminación aguda con luces SH. También sólo afectan a la iluminación difusa (frecuencia demasiado baja para reflejos especulares).
  • La iluminación SH no es local; Las luces SH punto o punto cerca de alguna superficie “se verán mal”.

En resumen, las luces SH suelen ser lo suficientemente buenas para objetos dinámicos pequeños.

Rendering paths in the Built-in Render Pipeline
Deferred Shading rendering path