¿Un lightmap? ¿dónde, dónde? Pues prácticamente en todas partes. Últimamente se están empezando a olvidar en favor de los shadowmaps, que vienen a ser lightmaps dinámicos (y que tiran de GPU que da gusto).
Un lightmap es una textura, generalmente muy grande, que se aplica a un modelo para simular sus sombras. Suele ser algo estático y se utiliza para dar sombras a los niveles (que por lo general, no suelen moverse
). Es una técnica que se ha utilizado muchísimo por dar unos resultados muy buenos con poquísima potencia adicional. Por ejemplo, los 3 primeros Quakes los usan (y con ellos todos sus derivados: Half-Life 1 y 2, Soldier of Fortune, Sin, Heavy Metal FAKK 2, etc). También se usan en el motor Unreal (versión 1 y 2, al menos) y en los shooters de Monolith.

¿Cómo se consigue el efecto? Yo todavía no lo he programado, pero viene a ser algo así: primero tenemos que generar el lightmap, que es la parte complicada, porque los mejores generadores de lightmaps son de pago. El 3DStudio puede generar lightmaps, pero es lo más ineficiente que puedes utilizar. El mejor, según tengo entendido, es uno llamado Gile[s] que da unos resultados muy buenos. También puedes probar con el IrrEd, el editor del autor del Irrlicht que también genera lightmaps.
Lo siguiente consiste en ponerlo como segunda textura de un objeto, y hacer que oscurezca la textura aplicando blending. Para conseguirlo, simplemente tenemos que utilizar el tipo de blending Multiply. Y ya está. Lo malo es que el lightmap es estático así que ¿cómo es que en el Quake se consigue realizar esa iluminación al disparar un cohete? aquí es donde entra la capacidad de invención de John Carmack (y, por lo que se dice, una apuesta para ver si conseguía hacerlo en una tarde). Básicamente, ellos modifican el lightmap en tiempo real para simular las fuentes de luz dinámicas.
Además, como pone en los papers de Michael Abrash, no solo se puede utilizar para la iluminación, sino que puede servir como base para hacer grafitis en las paredes (¿alguien no ha jugado al counterstrike?), manchas de sangre, impactos de explosiones y demás.
Esta es una técnica que no come muchos recursos y que sin duda merece la pena utilizar, en entornos con iluminación estática. Además se puede combinar con otros tipos de sombreados con buen resultado. ¿He dicho ya que Half-Life 2 todavía lo usa?
- Texture Blending
- Texture-based shadows
- Otra jornada en el cursillo de shaders
- Far Cry
- Normal Mapping
KnudoW dice:
Hum… entonces en la foto de ejemplo el lightmap estaría aplicado a la pared, no? Y hace más oscuras las zonas donde estaría la sombra de la estructura del techo…
No sabía de esto, es interesante… que el otro día mirando ejemplos de OpenGL los que tenían iluminación real me daba un bajón de fps… xD
Miguel Herrero dice:
Generalmente, los editores de Id o el Radiant mismo, al compilar los mapas bsp hace fundamentalmente dos cosas: calcular el bsp en sí (eso lo explicaré otro día) y calcular las sombras del escenario (lightmaps).
Por eso suele ser un método estático y las sombras de los personajes se calculan con métodos aparte. En el caso del Quake3, como un punto negro en el suelo o como modelos proyectados en un plano (creo que hacían eso).
Hoy en día se usa mucho los shadowmaps que son como los lightmaps, pero en tiempo real calculados por la GPU. También intentaré hacer un artículo sobre eso

WaaghMan dice:
Más concretamente, el modo de blending que se suele usar multiplyx2 , de forma que se pueda aclarar también la escena en puntos donde hay más iluminación.
En mi opinión es la mejor técnica de gráficos 3D hasta el momento, en relación calidad-eficiencia. Permite un realismo sorprendente en escenas estáticas, y además es muy sencillo hacer varios lightmaps del mismo escenario para, por ejemplo, iluminación al amanecer, al atardecer y al mediodía. Incluso puede hacerse una transición entre ellos para simular el paso del tiempo.



[...] movimiento se ve bastante mejor, pero lo que realmente marca la diferencia es el lightmap. Entradas relacionadas:Cursos de extensión [...]