Version: 2019.4
Shadow Cascades
The Lighting window

Shadow troubleshooting

Shadow performance

Real-time shadows have quite a high rendering overhead; any GameObjects that might cast shadows must first be rendered into the shadow map and then that map will be used to render objects that might receive shadows.

Las sombras suaves tienen un mayor coste de procesamiento que las sombras duras pero esto solo afecta a la GPU y no genera tanto trabajo extra para la CPU.

Shadow acne

A surface directly illuminated by a Light sometimes appears to be partly in shadow. This is because pixels that should be exactly at the distance specified in the shadow map are sometimes calculated as being further away (this is a consequence of using shadow filtering, or a low-resolution image for the shadow map). The result is arbitrary patterns of pixels in shadow when they should be lit, giving a visual effect known as “shadow acne”.

Shadow acne en la forma de artefactos falso de auto-sombra
Shadow acne en la forma de artefactos falso de auto-sombra

The Bias property

Para evitar shadow acne, un valor Bias se puede agregar a la distancia en el shadow map para asegurarse de que los pixeles en el limite pasan definitivamente la comparación como deben, o para asegurar que mientras que hacen en el shadow map, los GameObjects pueden insertarse un poco Poco a lo largo de sus normales. Estos valores son configurados por las propiedades Bias y Normal Bias en la ventana de Inspector Light cuando las sombras están habilitadas.

No configure el valor Bias demasiado alto, ya que las áreas alrededor de una sombra cercana al GameObject que emite a veces se iluminan falsamente. Esto da como resultado una sombra desconectada, haciendo que el GameObject se vea como si estuviera volando por encima del suelo.

Un valor Bias alto hace que la sombra parezca desconectada del GameObject
Un valor Bias alto hace que la sombra parezca “desconectada” del GameObject

Del mismo modo, configurar el valor Normal Bias muy alto hace que la sombra parezca muy estrecha para el GameObject:

Un valor Normal Bias muy alto hace que la forma de la sombra sea muy estrecha.
Un valor Normal Bias muy alto hace que la forma de la sombra sea muy estrecha.

En algunas situaciones, Normal Bias puede causar un efecto no deseado llamado “light bleeding” (sangrado ligero), donde la luz pasa de la geometría cercana a áreas que deben ser sombreadas. Una solución potencial es abrir el Mesh Renderer del GameObject y cambiar la propiedad Cast Shadows a Two Sided. Esto a veces puede ayudar, aunque puede ser más práctico para los recursos y aumentar la sobrecarga de rendimiento al procesar la escena.

Los valores bias para una Luz pueden que necesiten ser ajustados para asegurarse de que efectos no deseados ocurran. Por lo general es más fácil calibrar el valor correcto a ojo en vez de intentar calcularlo.

Correct shadowing
Correct shadowing

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 window 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.

Shadows not appearing

Si encuentra que uno o más objetos no están emitiendo sombras, debe comprobar los siguientes puntos:

  • Real-time shadows can be disabled completely in the Quality window. Make sure that you have the correct quality level enabled and that shadows are switched on for that setting.

  • Todos los Mesh Renderers en la escena deben configurarse con sus Receive Shadows y Cast Shadows configurados correctamente. Ambos están habilitados de forma predeterminada pero comprueban que no se han desactivado de forma no intencional.

  • Solamente los objetos opacos lanzan y reciben sombras de modo que los objetos que utilizan los shaders incorporados Transparent o un Particle shader no emitirán ni recibirán. Por lo general, puede utilizar los shaders Transparent Cutout en lugar de los objetos con “huecos” como cercas, vegetación, etc. Los Shaders personalizados deben estar iluminados por píxeles y utilizar la Geometry render queue.

  • Los objetos utilizando shaders VertexLit no pueden recibir sombras pero las puede emitir.

  • Unity can’t calculate shadows for GameObjects that have materials with “Unlit” type shaders. Unity can only calculate shadows for materials with shaders that support lighting.

  • In the Built-in Render Pipelne, using the Forward rendering path, some shaders allow only the brightest directional light to cast shadows (in particular, this happens with Unity’s legacy built-in shaders from 4.x versions). If you want to have more than one shadow-casting light then you should use the Deferred Shading rendering path instead. You can enabled your own shaders to support “full shadows” by using the fullforwardshadows surface shader directive.

Shadow Cascades
The Lighting window
Copyright © 2020 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961