Version: 5.5
Shadows (Sombras)
Global Illumination (Iluminación Global)

Sombras de las Directional light

Una directional light simula típicamente la luz del sol y una sola luz puede iluminar la totalidad de una escena. Esto significa que el shadow map a menudo cubrirá una gran parte de la escena inmediatamente, y esto hace que las sombras sean susceptible a un problema llamado aliasing perspectivo. El aliasing perspectivo significa que los pixeles del shadow map al verse cerca de la cámara se ven muy grandes, comparado aquellos que están lejos.

Sombras en la distancia (A) tienen una resolución adecuada, dónde las sombras cerca a la cámara (B) muestran un aliasing perspectivo.
Sombras en la distancia (A) tienen una resolución adecuada, dónde las sombras cerca a la cámara (B) muestran un aliasing perspectivo.

El aliasing perspectivo se nota menos cuando usted está utilizando soft shadows (sombras suaves) y tiene una alta resolución para el shadow map. Sin embargo, utilizar estas propiedades aumentará la demanda al hardware gráfico por lo que el framerate pueda tener consecuencias.

Shadow cascades

El motivo por el que ocurre el problema de perspective aliasing es que diferentes zonas del mapa de sombras se escalan desproporcionadamente debido a la perspectiva de la cámara. El mapa de sombras de una luz necesita cubrir únicamente la parte de la escena visible por la cámara, definida por el view frustum de la cámara. Si usted se imagina un caso simple donde la luz direccional viene directamente desde arriba, se puede ver la relación entre el tronco y el mapa de sombras.

El extremo distante del frustum está cubierto por 20 pixeles de shadow map mientras que el extremo más cercano está cubierto solamente por 4 pixeles. No obstante, ambos extremos aparecen del mismo tamaño en pantalla. El resultado es que la resolución del mapa es efectivamente mucho menor en áreas sombreadas que están cerca a la cámara. (Tenga en cuenta que en realidad, la resolución es mucho mayor que 20x20 y el mapa usualmente es perfectamente cuadrado en la cámara.)

Utilizar una resolución mayor para el mapa entero puede reducir el efecto de zonas chunky pero esto requiere de más memoria y bando de ancho mientras se renderiza. Aunque, notará del diagrama que una gran parte del shadow map está gastado en el extremo cercano del frustum ya que nunca será visto; también la resolución de las sombras lejos de la cámara está bastante alta. Es posible dividir el área del frustum en dos zonas basadas en la distancia desde la cámara. La zona del extremo más cercano puede utilizar un shadow map distinto en un tamaño reducido (pero con la misma resolución) para que la cantidad de pixeles se nivele de cierto modo.

Estas reducciones por etapas en el tamaño del shadow map se conoce como cascaded shadow maps (a veces llamado “Parallel Split Shadow Maps”). De las Quality Settings, usted puede configurar un cero, dos o cuatro cascades para un nivel de calidad dado.

Entre más cascades usted utilice, menos serán afectadas sus sombras por aliasing perspectivo, pero aumentar el número viene con una sobre-carga de renderizado. Sin embargo, esta sobrecarga es todavía menor a lo que sería si usted utilizar un mapa de resolución alto a través de toda la sombra.

La sombra del ejemplo anterior con cuatro cascades
La sombra del ejemplo anterior con cuatro cascades

Distancia de la sombra

Las sombras de los objetos tienden a notarse menos cuando estos están lejos de la cámara; estos aparecen más chiquitos en pantalla y también, los objetos distantes usualmente no son el centro de atención. Unity le permite a usted tomar ventaja de este efecto al proporcionar una propiedad Shadow Distance en las Quality Settings. Los objeto más allá de esta distancia (desde la cámara) no emiten sombras en absoluto, mientras que las sombras de objetos acercándose esta distancia gradualmente desvanecen.

Configurar esta shadow distance tan bajo como sea posible ayudará a aumentar el rendimiento de renderizado ya que los objetos distantes no necesitarán ser renderizados a un shadow map en absoluto. Adicionalmente, la escena a menudo se veré mucho mejor si se quita las sombras distantes. Obtener la distancia de sombra ideal es importante para el rendimiento en plataformas móviles ya que no soportan shadow cascades.

Visualising shadow parameter adjustments

La Scene View (vista de escena) tiene un draw mode llamado Shadow Cascades que utilizan coloración para mostrar todas las partes de la escena utilizando diferentes niveles de cascade. Usted puede utilizar esta ayuda para obtener las tasas de distancia de sombra, de la cantidad de cascade y cascade split adecuadas.

Dra mode de Shadow Cascades en la vista de escena
Dra mode de Shadow Cascades en la vista de escena

Shadow Pancaking

To further prevent shadow acne we are using a technique known as Shadow pancaking. The idea is to reduce the range of the light space used when rendering the shadow map along the light direction. This lead to an increased precision in the shadow map, reducing shadow acne.

A diagram showing the shadow pancaking principle
A diagram showing the shadow pancaking principle

In the above digram:

  • The light blue circles represent the shadow casters
  • The dark blue rectangle represents the original light space
  • The green line represents the optimized near plane (excluding any shadow casters not visible in the view frustum)

Clamp these shadow casters to the near clip plane of the optimized space (in the Vertex Shader). Note that while this works well in general, it can create artifacts for very large triangles crossing the near clip plane:

Large triangle problem
Large triangle problem

In this case, only one vertex of the blue triangle is behind the near clip plane and gets clamped to it. However, this alters the triangle shape, and can create incorrect shadowing.

You can tweak the Shadow Near Plane Offset property from the Quality Settings to avoid this problem. This pulls back the near clip plane. However, setting this value very high eventually introduces shadow acne, because it raises the range that the shadow map needs to cover in the light direction. Alternatively, you can also tesselate the problematic shadow casting triangles. See the bias section in Shadow Overview for more information.

Shadows (Sombras)
Global Illumination (Iluminación Global)