¿Qué estás buscando?
Engine & platform

5 problemas comunes de mapeo de luz y consejos para ayudarte a solucionarlos

KRISTIJONAS JALNIONIS Technical Artist
Sep 27, 2022|18 minutos
5 problemas comunes de mapeo de luz y consejos para ayudarte a solucionarlos
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.

Recientemente desarrollé una guía para la resolución de problemas de Progressive Lightmapper con el fin de ayudar a los desarrolladores a aprovechar al máximo la iluminación global (GI) horneada en el editor de Unity. Aquí, analizo cinco de los problemas de mapas de luz más comunes y sus soluciones, respaldados por imágenes y enlaces a páginas del Manual de Unity. Para obtener la guía completa, visita los foros.

1. No hay iluminación global horneada en la escena
Escena de caja de Cornell renderizada sin iluminación global (izquierda) y con iluminación global horneada (derecha)

Si no se cumplen ciertos requisitos previos, es posible que Progressive Lightmapper no pueda generar iluminación en la escena. Estas condiciones incluyen, pero no se limitan a:

  • No hay objetos marcados como colaboradores de GI
  • No hay luces horneadas en la escena.
  • Problemas con los sombreadores

Para corregir esto, recomiendo probar una de las soluciones que se detallan a continuación.

Marcar GameObjects como colaboradores de GI
Contribuya con configuraciones de GI en el componente Mesh Renderer.

Marque los objetos que desea incluir en el mapa de luz como colaboradores de GI siguiendo estos pasos:

Seleccione su GameObject.

Vaya al componenteMesh Renderer.

Despliegue el encabezado de iluminación .

Marque la casilla de verificación Contribuir a la iluminación global .

Al hacerlo, se habilitará el parámetro Recibir iluminación global que se encuentra debajo. Contiene dos opciones:

  • Mapas de luz: Diseñado para objetos estáticos con mapas de luz: GameObject recibirá y contribuirá con GI a los mapas de luz.
  • Sondas de luz: Destinado a accesorios y objetos pequeños que no son aptos para mapas de luz: GameObject recibirá GI de las sondas de luz y contribuirá con GI a los mapas de luz circundantes.
Inspeccionar las luces de la escena

Sólo las luces mixtas y horneadas pueden contribuir al IG horneado. Seleccione luces en su escena, luego configure el Modo en Mixto o Horneado en el componente Luz. Otras propiedades que vale la pena revisar incluyen:

  • Color: Los colores oscuros tendrán una contribución baja o nula al IG. Elija colores brillantes para las luces y utilice la propiedad Intensidad para aumentarlas o atenuarlas.
  • Intensidad: Cuanto mayor sea la intensidad, más brillante será la luz. Asegúrese de que sus luces sean lo suficientemente brillantes para realizar una contribución gastrointestinal significativa.
  • Multiplicador indirecto: Esta propiedad controla la intensidad del rebote indirecto. Asegúrese de que no esté puesto a cero. De lo contrario, la luz no contribuirá en absoluto al IG. Tenga en cuenta que si establece este valor por encima de uno, la iluminación de su escena no cumplirá con el estándar de renderizado basado físicamente (PBR).
  • Visita No Baked Global Illumination en el foro de escena

Inspeccionar el activo de configuración de iluminación

En la ventana Iluminación (accesible a través de Ventana > Renderizado > Iluminación), asegúrese de que el campo Activo de configuración de iluminación no esté en blanco. Si no hay ningún activo asignado, haga clic en el botón Nueva configuración de iluminación . Esto creará y asignará un activo, desbloqueando las propiedades en la ventana para editarlas.

Una vez completado esto, verifique que:

  • Ha marcado la casilla de verificación Iluminación global horneada , que habilita los cálculos de GI horneada. Esta casilla de verificación también expondrá la lista desplegable Modo de iluminación .
  • El valor de rebotes máximos no está establecido en cero. Cuanto mayor sea este valor, más rebotará la luz en el entorno.
  • El control deslizante de Intensidad indirecta no está establecido en cero. Establecer este control deslizante en cero disminuirá toda la iluminación indirecta en la escena.
Inspeccionar sombreadores y materiales

Los sombreadores personalizados podrían ser la razón por la cual el cálculo de GI ha fallado. Para fines de depuración, utilice los sombreadores integrados que vienen con el Editor de Unity. Estos son:

Si Unity genera iluminación después de cambiar a uno de los sombreadores descritos anteriormente, el problema podría estar en lossombreadores personalizados. En este caso, asegúrese de que los sombreadores de superficie contengan la palabra clave del sombreador LIGHTMAP_ON .

Consulta la página Meta Pass para obtener detalles sobre cómo personalizar aún más la salida de Baked GI usando sombreadores.

Otras posibles soluciones

Si los pasos anteriores no han resuelto su problema, considere probar estas posibles soluciones:

  • Seleccione un backend de mapeo de luz diferente en la ventana Iluminación. Si la iluminación no se puede hornear al usar la GPU progresiva, pero sí se puede hornear con la CPU progresiva, esto podría deberse a un problema de hardware o controlador.
  • Actualice los controladores de la GPU. Consulte la página del fabricante de la GPU para obtener los controladores correctos para su sistema. (Para máquinas Linux, consulte la sección de configuración del controlador de Linux en este hilo del foro).
  • Asegúrese de que su GPU cumpla con los requisitos mínimos. Consulte este hilo del foro.
  • Limpiar la caché de GI. Para borrarlo, vaya a Preferencias > Caché GI y haga clic en el botón Limpiar caché . Tenga en cuenta que esto eliminará todos los datos de iluminación presentes en la escena, lo que requerirá que regenere la iluminación.
2. A los objetos les falta iluminación

Ciertos objetos que aparecen sin iluminación o fuera de lugar pueden indicar un problema con la configuración de la escena, que a menudo se reproduce cuando los objetos dinámicos no tienen sondas de luz para tomar muestras de la iluminación. Además, cualquier material metálico brillante en la escena podría aparecer negro si no hay sondas de reflexión locales presentes.

Escena de caja de Cornell con una esfera metálica sin lightmap y una estatua: Ambos objetos son negros cuando no hay sondas de luz o sondas de reflexión presentes (izquierda). La estatua difusa es visible cuando se ilumina con sondas de luz (centro). Tanto la esfera reflectante como la estatua son visibles después de colocar las sondas de luz y las sondas de reflexión (derecha).

Para corregir esto, recomiendo probar una de las soluciones que se detallan a continuación.

Coloque sondas de luz

Los objetos dinámicos (o contribuyentes de GI que reciben GI de las sondas de luz) necesitan sondas de luz para muestrear datos de iluminación indirecta. Si no hay ninguno presente, los objetos volverán a muestrear la sonda ambiental (es decir, la sonda de luz y reflexión que siempre está presente en la escena).

Para mitigar esto, configure una red de sondas de luz en la escena y agregue más sondas en áreas de alta importancia. Asegúrese de que haya suficientes sondas de luz para abarcar todos los objetos afectados y genere iluminación nuevamente para ver el efecto.

Coloque sondas de reflexión

Los objetos metálicos reflectantes aún podrían verse negros, incluso después de colocar una red densa de sondas de luz. Para sombrear dichos objetos, es necesario colocar una sonda de reflexión que abarque el objeto afectado. Genere nuevamente la iluminación o vuelva a hornear la sonda en el componente Sonda de reflexión haciendo clic en el botón Hornear .

Si observa áreas negras en los reflejos, intente aumentar el número de rebotes . Esto aumentará el número de rebotes, creando así reflejos dentro de reflejos. Puede acceder a esta propiedad en Iluminación > Entorno > Iluminación del entorno.

Visita el foro de Objetos que faltan iluminación

Inspeccionar la configuración del renderizador de malla

Si la realización de los pasos anteriores aún no resuelve el problema, inspeccione el componente Mesh Renderer del objeto afectado. En la sección Sondas, asegúrese de que las Sondas de luz y las Propiedades de reflexión estén configuradas en algo distinto de Desactivado.

Las propiedades de Sondas de luz y Sondas de reflexión deben configurarse en Mezclar sondas (o cualquier otra cosa que no sea Desactivado).
Ajustar los valores de color del material

Los materiales de color negro puro absorberán toda la luz directa e indirecta. Este es un comportamiento físicamente correcto. En la vida real, ningún material natural es completamente negro. Por ejemplo, uno de los materiales naturales más oscuros, el carbón, mide “50, 50, 50” en una escala de luminosidad RGB.

Ajuste los valores de color de su material para seguir los estándares de sombreado basados físicamente. En el canal de renderizado integrado, puede utilizar el modo de dibujo de vista de escena Validar albedo para determinar si los valores de albedo cumplen con PBR. Puede utilizar el depurador de renderizado en URP y HDRP para hacer lo mismo.

Comprobar la configuración de la escena

Si está trabajando con varias escenas, verifique que la escena que contiene la iluminación esté configurada como Escena activa. De forma predeterminada, Unity establece la primera escena cargada como Escena activa, lo que podría tener un efecto perjudicial en las compilaciones de reproductores independientes.

3. Los materiales emisores no se están reproduciendo
Tanto al plano del techo como a la esfera se les han aplicado materiales emisivos (izquierda). Bloom se habilita como efecto de posprocesamiento para dar la impresión de un material brillante (centro). Tanto el plano emisor como la esfera están marcados como contribuyentes de GI que influyen en la iluminación de la escena (derecha).

Existen dos tipos de problemas relacionados con la reproducción de material emisivo:

  • Los materiales emisores no aparecen “brillantes”, lo que indica un problema de posprocesamiento.
  • Los materiales emisores no contribuyen a la iluminación global, lo que indica un problema con la configuración del objeto o material.

Para corregir cualquiera de estos problemas, recomiendo probar una de las soluciones que se detallan a continuación.

Habilitar Bloom en la pila de posprocesamiento

Para crear la impresión de un material brillante, habilite Bloom en su pila de posprocesamiento de elección. Consulta la documentación de RP, URPo HDRP integradospara obtener sugerencias sobre cómo hacer esto.

Comprobar las propiedades del material

Si tiene intención de utilizar objetos emisores para realizar mapas de luz, asegúrese de lo siguiente:

  • Has marcado el GameObject en cuestión como colaborador de GI. Debido a la naturaleza autoiluminante de los objetos emisores, puede establecer su propiedad Recibir iluminación global en Sondas de luz. Esto ahorrará espacio en el atlas de mapas de luz.
  • La propiedad Iluminación global está establecida en Baked en el Inspector de materiales. Esta propiedad está disponible en la entrada de Emisión . Consulte la documentación de RP, URPoHDRP integradospara obtener más detalles.
Inspector de materiales en el pipeline de renderizado integrado: Resaltamos las propiedades de emisión en azul.
Inspeccionar la configuración de iluminación

En la ventana Iluminación, asegúrese de que la propiedad Intensidad indirecta no esté establecida en cero. Si lo establece en cero, se desactivará toda la iluminación indirecta, incluida la contribución de los objetos emisores horneados.

Visita el foro sobre materiales emisores que no se reproducen

4. Mapas normales planos

Al hornear en modo no direccional, el Editor de Unity no creará una textura separada para almacenar la información de direccionalidad. Esto hará que los objetos luzcan planos después de hornearlos.

Vale la pena señalar que los mapas normales de baja frecuencia son difíciles de capturar utilizando texturas de direccionalidad. Estas texturas aparecerán planas al generar iluminación utilizando luces completamente horneadas.

Mapas de luz no direccionales con luz horneada (izquierda) vs. mapas de luz direccionales con luz horneada (derecha): Los mapas de luz no direccionales carecen de la direccionalidad de la luz entrante, lo que proporciona una buena representación del relieve cuando se utilizan mapas normales.

Para corregir esto, recomiendo probar una de las soluciones que se detallan a continuación.

Cambiar al modo direccional
Menú desplegable del modo de direccionalidad en la ventana de configuración de iluminación.

En la ventana Iluminación, establezca la propiedad Modo direccional en Direccional. Este modo generará una textura secundaria que almacenará la dirección de la luz dominante. Los mapas normales tendrán una buena representación del relieve, pero carecerán de respuesta especular.

Visita el foro de mapas normales planos

Utilice luces mixtas

Las luces mixtas proporcionan una respuesta especular y normal en tiempo real. El Progressive Lightmapper incorpora iluminación indirecta a un mapa de luz. Esta combinación garantiza una respuesta del material de máxima calidad cuando se utiliza iluminación horneada.

Mapas de luz direccionales iluminados por un foco Baked (izquierda) vs. mapas de luz direccionales iluminados por un foco Mixed (derecha): Observe el contraste mejorado en los mapas normales en la escena iluminada por la luz mixta.

Si su proyecto lo permite, cambie el Modo de luz a Mixto en el componente Luz. Tenga en cuenta que las luces mixtas tienen el mismo costo de rendimiento que las luces en tiempo real. Dependiendo del modo de iluminación utilizado, las luces mixtas proyectarán sombras en tiempo real, pero no sombras suaves horneadas.

Usa sondas de luz (light probes)

Los GameObjects iluminados con sonda a menudo tendrán una mejor respuesta del material que aquellos iluminados con luces Baked. Si su dirección artística lo permite, configure la propiedad Recibir iluminación global en Sondas de luz en el componente Renderizador de malla. Tenga en cuenta que también puede utilizar el Volumen proxy de sonda de luz (LPPV) para agregar un gradiente espacial a los objetos iluminados por la sonda.

5. Falta respuesta especular
Una escena simple que contiene varias luces puntuales horneadas antes de hornear un mapa de luz (izquierda) vs. la misma escena después de hornear mapas de luz (derecha): Tenga en cuenta que faltan reflejos especulares después del horneado.

Una de las limitaciones inherentes de las luces horneadas es que no proporcionan una respuesta especular en tiempo real a los materiales. Esto significa que los materiales brillantes carecerán de reflejos especulares después de generar la iluminación.

Para corregir esto, recomiendo probar una de las soluciones que se detallan a continuación.

Utilice luces mixtas

A diferencia de las luces horneadas, las luces mixtas proporcionan una respuesta especular directa en tiempo real a los materiales. Si los reflejos especulares son importantes en su escena, cambie el Modo de luz a Mixto en el componente Luz.

Visita el foro Respuesta especular faltante

Utilice proxies emisivos

Es posible imitar la respuesta especular de las luces utilizando objetos emisores. Para ello siga estos pasos:

Coloque una sonda de reflexión en su escena.

Haga clic derecho en el panel Jerarquía y seleccione Objeto 3D > Esfera.

Seleccione el objeto recién creado y establezca su Indicador de editor estático en Sonda de reflexión estática.

En el panel Proyecto , cree un nuevo material haciendo clic derecho y seleccionando Crear > Material.

Seleccione el material recién creado y habilite la casilla de verificación Emisión . Establezca la propiedad Iluminación global en Ninguna.

Arrastre y suelte el material sobre la esfera para asignarlo.

Coloca la esfera en la misma posición que la luz.

Generar iluminación.

Después de seguir los pasos anteriores, debería poder ver los objetos emisores capturados en el mapa cúbico de la sonda de reflexión. Puede ocultar esos objetos después de hornearlos o configurar una máscara de selección en el componenteCámara.

La misma escena pero con proxies emisores capturados por la sonda de reflexión (izquierda) vs una perspectiva alternativa que muestra la ubicación de dichos proxies (derecha)

Para obtener más consejos sobre cómo solucionar problemas con Progressive Lightmapper, consulte la guía completa en los foros. Si quieres discutir este artículo o compartir otras soluciones, no dudes en conectarte conmigo allí o aquí. Por último, asegúrese de estar atento a los nuevos blogs técnicos de otros desarrolladores de Unity como parte de la serie en curso Tech from the Trenches.