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

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.

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.

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.
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
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.
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:
- Sombreador estándar: Disponible en el pipeline de renderizado integrado
- Sombreador iluminado: Disponible en Universal Render Pipeline (URP)
- Sombreador iluminado: Disponible en el canal de renderizado de alta definición (HDRP)
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.
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.

Para corregir esto, recomiendo probar una de las soluciones que se detallan a continuación.
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.
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
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.

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

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

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

Para corregir esto, recomiendo probar una de las soluciones que se detallan a continuació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
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.

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

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

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.