Guía de iluminación en Source Engine: iluminar bien los mapas de GMod
Iluminación en Source Engine: light, light_spot, light_environment, compilar con HDR, lightmap scale, cubemaps y los errores de iluminación más comunes.
La iluminación en Source Engine está precalculada en su mayor parte: el compilador VRAD calcula los lightmaps a partir de tus entities de luz y los guarda en el BSP. En interiores colocas light y light_spot; para el sol y el cielo, un light_environment. Después compilas con VRAD y generas en el juego los cubemaps para los reflejos.
Las entities de luz más importantes
| Entity | Efecto | Uso típico |
|---|---|---|
light | Luz puntual, ilumina en todas las direcciones | Lámparas, luminosidad base en las salas |
light_spot | Cono de luz con un ángulo interior y otro exterior | Focos, focos de techo, farolas |
light_environment | Luz del sol y del cielo para todo el mapa | Zonas exteriores |
light_dynamic | Luz en tiempo real, no precalculada | Luces que se mueven o parpadean, usar con moderación |
env_projectedtexture | Luz proyectada en tiempo real con sombras dinámicas | Acentos puntuales, costosa |
El brillo de una luz se compone de cuatro números: rojo, verde, azul e intensidad. Los ajustes de atenuación definen lo rápido que se apaga la luz con la distancia. Las luces precalculadas no cuestan prácticamente nada de rendimiento en el juego, mientras que las de tiempo real cuestan algo en cada fotograma. Construye el ambiente con light y light_spot y usa las luces dinámicas solo a propósito.
Sol y cielo: light_environment y el skybox
Un light_environment ilumina el mapa a través de todas las caras texturizadas con tools/toolsskybox. Importan tres valores:
- Brightness and Color: color e intensidad de la luz directa del sol.
- Ambient Color and Brightness: la luz difusa del cielo. Aclara las sombras y decide lo oscuras que quedan las zonas sin sol directo.
- Pitch y Yaw: la dirección desde la que da el sol.
SunSpreadAngle suaviza las sombras del sol. La textura del skybox en sí se define en Map > Map Properties. El color de la luz y la dirección del sol deberían coincidir con la imagen del cielo; si no, la escena no resulta coherente. La entity env_sun solo dibuja el resplandor del sol en el cielo y no ilumina nada.
Si quieres mostrar paisaje lejano, lee la guía del skybox 3D.
Compilar en HDR o en LDR
VRAD puede calcular la iluminación en dos variantes: LDR (rango de brillo clásico) y HDR (rango ampliado con exposición automática). Los parámetros son -ldr, -hdr y -both. Sin ninguno de ellos, el VRAD de GMod solo calcula LDR. En el diálogo de compilación normal de Hammer, la casilla "HDR" compila las dos variantes.
- Para pruebas rápidas basta con LDR.
- Para publicar, compila con
-both. Así el mapa se ve bien para los jugadores con y sin HDR. La iluminación se calcula dos veces, de modo que VRAD tarda proporcionalmente más.
En los mapas HDR, env_tonemap_controller controla la exposición automática. Sin él se aplica el rango de exposición por defecto del motor, que no le va bien a todos los mapas. Las luces tienen además sus propios valores de brillo para HDR. El valor por defecto -1 -1 -1 1 significa que se usa el valor normal. Cómo encajan los pasos de la compilación está en VBSP, VVIS y VRAD explicados.
Lightmap scale y calidad de las sombras
El lightmap scale de una cara indica cuántas unidades cubre una muestra de lightmap. El valor por defecto es 16. Lo cambias en la herramienta de texturas (Shift+A).
- Los valores pequeños, como 8 o 4, dan sombras más nítidas, pero cuestan memoria, tamaño de archivo y tiempo de compilación.
- Los valores grandes, como 32 o 64, salen baratos y bastan para superficies grandes con una iluminación uniforme.
Estos parámetros de VRAD mejoran la calidad en la compilación final:
-final: cálculo de luz más preciso, bastante más lento.-StaticPropLighting: calcula la iluminación de losprop_staticpor vértice del modelo, en lugar de en un único punto.-StaticPropPolys: usa la forma visible de los props para las sombras, en lugar del modelo de colisión simplificado.-TextureShadows: tiene en cuenta las texturas transparentes en las sombras de los props, siempre que los modelos estén registrados para ello en un archivo RAD o compilados para ello. Por lo general solo tiene efecto junto con-StaticPropPolys.
Reflejos con env_cubemap
Las superficies brillantes no reflejan el entorno real, sino un panorama capturado de antemano. Para eso están las entities env_cubemap:
- Coloca al menos un
env_cubemappor sala o por ambiente de luz, más o menos a la altura de la cabeza y no dentro de la geometría. - Compila el mapa y cárgalo en el juego.
- Escribe
buildcubemapsen la consola. - Si has compilado con
-both, genera los cubemaps una vez para LDR y otra para HDR. Entre una y otra, cambia conmat_hdr_levely vuelve a cargar el mapa.
Después de cada nueva compilación tienes que generar los cubemaps otra vez. Los problemas habituales están en Arreglar los reflejos de los cubemaps.
Errores de iluminación típicos
- Fullbright: Todo tiene el mismo brillo y no hay sombras. El mapa no contiene entonces datos de iluminación. O no hay ninguna entity de luz, o VRAD no se ejecutó o se abortó. Revisa el compile log.
- Mapa demasiado oscuro: A menudo el valor Ambient del
light_environmentes demasiado bajo, o a los interiores les faltan luces de relleno. Ayudan unas entitieslightadicionales y débiles y unas superficies más claras, porque las texturas claras rebotan más luz. - Bordes de sombra duros y escalonados: El lightmap scale es demasiado tosco. Bájalo en las caras afectadas. Las costuras de iluminación visibles en geometría de brushes redondeada se eliminan con smoothing groups.
- Props negros: Sin
-StaticPropLighting, unprop_staticse ilumina en un único punto. Si ese punto está a oscuras o dentro de una pared, todo el modelo se vuelve negro. Uninfo_lightingcomo origen de iluminación lo soluciona. - Demasiados light styles: Las luces con nombre o con un estilo de parpadeo necesitan sus propios lightmaps. Si muchas se solapan en una misma cara, VRAD lanza una advertencia.
- Leak: Con un leak, VVIS no entrega datos de visibilidad, y VRAD calcula entonces solo la luz directa, sin rebotes. Arregla primero el error de leak del mapa.
Puedes pegar los mensajes del log de VRAD en el Map Scanner. Asocia los mensajes conocidos a causas y soluciones.
Preguntas frecuentes
¿Por qué mi mapa está en fullbright?
El BSP no contiene datos de iluminación. Ocurre cuando no hay ni una sola entity de luz en el mapa, o cuando VRAD se saltó durante la compilación o se abortó con un error. Coloca una luz, compila con RAD en "Normal" y revisa el log.
¿Cuántas entities light_environment puede tener un mapa?
Una. El sol y el cielo valen para todo el mapa. Varias entities con valores distintos no producen una iluminación distinta en zonas distintas.
¿Tengo que compilar con HDR?
No, un mapa solo con LDR funciona. Para un mapa publicado, -both es la opción segura, porque así el mapa queda bien iluminado sean cuales sean los ajustes gráficos de los jugadores.
¿Por qué los reflejos se ven mal después de compilar?
Los cubemaps todavía no se han generado para esta compilación. Cada nueva compilación los descarta. Carga el mapa, ejecuta buildcubemaps y reinicia el mapa.