|
Autor |
|
Ámbito |
Matemáticas: radiosidad |
Lenguaje de Programación |
Delphi 4 |
Fecha |
2001/03/18 |
Índice
I - Que es un mapa de luz ?
I - Que es un mapa de luz ? Antes de explicar que es un mapa de luz, hay que comprender por que son necesarios para los juegos 3D que requieren de una detallada ambientación de luces y sombras. Las luces de hardware (las luces del Direct3D) tienen demasiados inconvenientes como para cubrir las necesidades de este tipo de juegos. - El primer problema de estas luces es que existe un número limitado de ellas.Los mapas de luz (lightmaps), tambien conocidos como mapas de sombras (shadowmaps) son texturas que se aplican mezclandose con otras texturas mediante la tecnica de multitextura o la de varios pasos. Normalmente se trata de texturas de baja resolución, aunque se suele usa una textura para cada poligono! (aunque realmente no es necesario). Por lo que normalmente, los mapas de luz usan grandes cantidades de memoria (algo tendrian que tener malo...). Evidentemente, los mapas de luz no son texturas dibujadas por un grafista; se usa un programa de radiosidad el cual genera los mapas de luz (a los que hayais hecho alguna fase para juegos como el Half-life os sonara un programa llamado qrad.exe...) Para la creación de un mapa de luz, el programa de radiosidad primero comprueba que luces afectan al poligono en cuestion y despues va trazando rayos entre el punto para el cual queremos averiguar la luz y las luces con el fin de obtener el color final. Además tambien se pueden hacer comprobaciones para ver si los rayos atraviesan algún poligono del resto del excenario y en ese caso; si el poligono es opaco se considerará que no llegará la luz y por lo tanto aparecerá una sombra, si el poligono es translucido la luz se teñirá de ese color, etc... De este modo es como muchos juegos 3D (como por ej. el Half-life) tienen escenarios con esas luces y sombras estaticas que tan buen resultado dán. (Las luces dinamicas es otro tema....)
II - Acerca de los ejemplos. Este ejemplo muestra como se puede cargar una textura y usarla como un mapa de luz mediante las tecnicas de multitextura y varios pasos. Tal y como se puede ver en el ejemplo, los vertices tienen cuatro coordenadas de textura; dos para la textura base, y dos para el mapa de luz. La animación producida en este ejemplo, esta hecha simplemente modificando los valores de las coordenadas de texturas del mapa de luz. Este ejemplo muestra como generar mapas de luz (sin proyección de sombras). Tal y como se puede ver en el ejemplo, un simple mapa de luz de 16x16 es suficiente para "iluminar" de forma espectacular un par de poligonos (intentad hacer lo mismo con luces de hardware...). Ahora bien, si quisieramos proyectar sombras estaticas, el mapa de luz deberia de tener mas resolución... En este ejemplo como solo se genera un mapa de luz, y es pequeñito; los calculos se realizan en tiempo real y las luces estan animadas (el mapa de luz se calcula para cada frame); pero lo normal es generar mapas de luces (y sombras) estaticas y despues simplemente cargarlos y aplicarlos (como en el Sample X5), sin animar nada.
III - Código fuente de ejemplo. Para compilar estos ejemplos necesitaras las cabeceras de DirectX 8 para Delphi de Delphi-Jedi y el Delphi 4 o superior. Para ejecutar la mayoria de los ejemplos necesitaras la libreria
D3DX8AB.DLL que encontraras junto a las cabeceras de DirectX 8. |