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.
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”.
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.
Del mismo modo, configurar el valor Normal Bias muy alto hace que la sombra parezca muy estrecha para el GameObject:
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.
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.
In the above digram:
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:
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.
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.