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.
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:
La renderización de cada objeto sucede como sigue:
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.
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).
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.
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:
En resumen, las luces SH suelen ser lo suficientemente buenas para objetos dinámicos pequeños.