Mapping y Hammer

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

EntityEfectoUso típico
lightLuz puntual, ilumina en todas las direccionesLámparas, luminosidad base en las salas
light_spotCono de luz con un ángulo interior y otro exteriorFocos, focos de techo, farolas
light_environmentLuz del sol y del cielo para todo el mapaZonas exteriores
light_dynamicLuz en tiempo real, no precalculadaLuces que se mueven o parpadean, usar con moderación
env_projectedtextureLuz proyectada en tiempo real con sombras dinámicasAcentos 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 los prop_static por 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:

  1. Coloca al menos un env_cubemap por sala o por ambiente de luz, más o menos a la altura de la cabeza y no dentro de la geometría.
  2. Compila el mapa y cárgalo en el juego.
  3. Escribe buildcubemaps en la consola.
  4. Si has compilado con -both, genera los cubemaps una vez para LDR y otra para HDR. Entre una y otra, cambia con mat_hdr_level y 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_environment es demasiado bajo, o a los interiores les faltan luces de relleno. Ayudan unas entities light adicionales 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, un prop_static se ilumina en un único punto. Si ese punto está a oscuras o dentro de una pared, todo el modelo se vuelve negro. Un info_lighting como 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.