GI cache
Temas relacionados

Light troubleshooting and performance

Las luces pueden ser renderizadas mediante uno de los dos métodos siguientes:

  • Vertex lighting calcula la iluminación únicamente en los vértices e interpola los valores en dichos vértices sobre el resto de la superficie. Algunos efectos de iluminación no están soportados por vertex lighting pero es el método más económico en términos de procesamiento. También, puede ser el único método disponible para tarjetas gráficas antiguas.

  • Pixel lighting se calcula de manera separada por cada pixel en la pantalla. Pese a ser un método más lento para renderizar, pixel lighting permite algunos efectos que no son posible con vertex lighting. Normal-mapping, light cookies y realtime shadows son efectos renderizados únicamente con pixel lights. Además, las formas de foco y los resaltados de point light se ven mucho mejor cuando se renderizan con dicho modo.

Comparación de un punto de luz renderizada en los modos pixel vs vertex
Comparación de un punto de luz renderizada en los modos pixel vs vertex

Las luces tienen un gran impacto en la velocidad de procesamiento, por lo que la calidad de la iluminación se tiene que equilibrar con la velocidad de los fotogramas (framerate). Desde que las pixel lights tienen un coste mayor procesamiento que verte lights. Unity únicamente renderizará las luces más brillantes en modo mixel y el resto las tratará como vertex lights. El número máximo de pixel lights se puede establecer en Quality Settings para webplayer y desarrollos standalone.

Puede configurar una luz para que sea renderizada como pixel light utilizando la propiedad Render Mode. Una luz con el modo establecido a Important tendrá mayor prioridad a la hora de decidir si es tratada como una pixel light. Con el modo configurado a Auto (por defecto), Inuty la clasificará automáticamente en base a cómo se ve afectado un objeto por la luz. Las luces que están renderizadas como pixel lights se determinan sobre una base de objeto-por-objeto.

Vea la página sobre Optimizing Graphics Performance para más información.

Lighting window statistics

The bottom of the Lighting window displays statistics showing important metrics with regard to run time performance. See documentation on the Lighting window for more details.

Rendimiento de las Sombras

Las sombras en tiempo real tienen un alto coste a la hora de ser renderizadas, por lo que deben ser usadas con moderación. Cualquier objeto que pueda emitir sombras primero debe ser renderizado en el mapa de sombras y luego este mapa se utilizará para renderizar los objetos que pueden recibir sombras. Habilitando las sombras tiene un impacto mayor en el rendimiento que la disyuntiva pixel/vertex mencionada anteriormente.

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.

Los Quality Settings (Ajustes de Calidad) incluyen un valor de Shadow Distance (distancia de sombra).Los objetos que están más allá de esta distancia de la cámara serán renderizados sin sombras. Puesto que las sombras de objetos distantes no suelen ser observadas, puede ser una buena optimización reducir el número de sombras que deben ser renderizadas.

Un tema particular con las luces direccionales es que una sola luz puede iluminar toda la escena. Esto significa que el mapa de sombras cubrirá a menudo una gran parte de la escena a la vez y esto puede generar en las sombras un problema conocido como “perspective aliasing”. Esto significa que los pñixeles del mapa de sombras cercanos a la cámara se ven ampliados y “gruesos” en comparación con los más alejados. Aunque puede aumentar la resolución del mapa de sombras para reducir este efecto, el resultado que los recursos de renderizado se desperdician para áreas distante cuyo mapa de sombras se veían bien con resoluciones bajas.

Una buena solución al problema es usar mapas de sombra separados que disminuyan en resolución a medida que la distancia con respecto a la cámara aumenta. Estos mapas separados son conocidos como cascades (cascadas). Desde Quality Settings, puede elegir cero, dos o cuatro cascadas; Unity calculará el posicionamiento de las cascadas dentro del cono de visualización de la cámara. Tenga en cuenta que las cascadas sólo se habilitan para directional lights. Consulte la página directional light shadows para más detalles.

Cómo el tamaño del shadow map se calcula

El primer paso para calcular el tamaño del mapa es determinar el área de la vista de pantalla que la luz puede iluminar. Para las directional lights, toda la pantalla puede ser iluminada, pero para spot lights y point lights, el área es la proyección en pantalla de la forma de la extensión de la luz (una esfera para point lights o un cono para spot lights). La forma proyectada tiene una cierta anchura y altura en píxeles en la pantalla; El mayor de esos dos valores se toma entonces como el “tamaño de píxel” de la luz.

Cuando la resolución del shadow map (mapa se sombras) se configura a High (desde las Quality Settings) el tamaño del shadow map se calcula como sigue:

  • Directional lights: NextPowerOfTwo (tamañoPixel * 1.9), hasta un máximo de 2048.
  • Spot lights: NextPowerOfTwo (tamañoPixel ), hasta un máximo de 1024.
  • Point lights: NextPowerOfTwo (tamañoPixel * 0.5), hasta un máximo de 512.

Si la tarjeta gráfica tiene 512 MB o más de memoria de vídeo, los límites del mapa de sombra superior se incrementan a 4096 para directional lights, 2048 para spot lights y 1024 para point lights.

En la resolución de shadow Medium, el tamaño del shadow map (mapa de sombra) es la mitad del valor para la resolución High y para Low, es un cuarto del tamaño.

Las Point lights tienen un límite más inferior de tamaño que otros tipos porque utilizan cubemaps para sombras. Esto significa que seis caras se encuentran en esta resolución se mantienen en la memoria de video a la vez. También son bastante caros para procesar, ya que puede haber emisores potenciales de sombras que se necesitan renderizar en todas las seis caras del cubemap.

Resolución de problemas de sombras

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

  • El hardware antiguo de gráficos no puede admitir sombras. Vea a continuación una lista de especificaciones de hardware mínimas que pueden manejar sombras.

  • Las sombras se pueden desactivar en los Quality Settings. Asegúrese de que tiene activado el nivel de calidad correcto y de que las sombras están activadas para ese ajuste.

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

  • Con Forward rendering path, , algunos shaders permiten que sólo la directional light más brillante emita sombras (en particular, esto sucede con los shaders incorporados heredados de Unity desde las versiones 4.x). Si desea tener más de una luz de proyección de sombras, entonces debe usar la ruta de renderizado Deferred Shading en su lugar. Puede habilitar sus propios shaders para que admitan “sombras completas” utilizando la directiva fullforwardshadows surface shader.

Soporte del hardware para sombras

Las sombras integradas funciona casi en la mayoría de dispositivos soportados por Unity. Las siguientes cartas son soportadas en cada plataforma:

PC (Windows/Mac/Linux)

  • Por lo general todos los GPUs soportan sombras. Las excepciones ocurren en algunos GPUs muy viejos (por ejemplo, los GPUs hechos en 2005).

Móvil

  • IPhone 4 no soporta sombras. Todos los modelos posteriores que comienzan con el iPhone 4S y iPad 2 apoyan sombras.
  • Android: Requiere Android 4.0 o posterior, y soporte GL_OES_depth_texture. Más notablemente, algunos dispositivos Android basados en Android Tegra 2/3 no tienen esto, por lo que no soportan sombras.
  • Windows Phone: Las sombras solo se soportan en GPUs con clase-DX11 (Adreno 4xx/5xx).

Consolas

  • Todas las consolas soportan sombras.

GI cache
Temas relacionados