- Sun Nov 20, 2005 6:56 am
#81334
CONCEPTO Y APLICACION DE NORMAL MAP
Hola a todos!!!Como bien sabeis si soleis pasaros por la seccion en ingles del foro, la release de Maxwell incluirá un parámetro completamente nuevo denominad: Normal Map (mapa normal). Para todos los que desconozcais en que consiste ese mapa, aqui va una breve explicacion de que es y como conseguirlo con la ayuda de software externo. Es traduccion de distintas páginas que he ido encontrando por ahi ( al final pondre las referencias), asi que perdonadme si me traduccion ingles español no es perfecta .
Antes de ponernos a hablar de los normal maps específicamente, es importante dar un repaso general del proceso de iluminación de un modelo 3D con el fin de poseer una buena base sobre el comportamiento de los normal maps. Es una explicación sencilla.
Asi que vamos allá, como trabaja la luz?? Como determinamos la oscuridad o luminosidad para que cada punto de la pantalla se parezca al resultado del modelo que estamos iluminando en la escena? Lo primero es conocer la direcion qeu cada punto en la superficie esta haciendo frente. La direccion que un punto esta haciendo frente en un superficie se denomina normal. Podemos imaginar una normal como una linea que se extiende desde un punto de la superficie. La linea es perpendicular a la superficie. A continuación necesitamos conocer donde se localiza la luz en nuestra escena. Nosotros creamos una linea desde un punto de la superficie hasta el la posicion de la luz, esta linea se denomina vector luz (un vector es la interpretacion en terminos matematicos de una linea). Asi que tenemos dos vectores saliendo de nuestro punto de superficie, el vector luz y el vector normal. Si medimos el angulo entre las doslineas entonces sabremos como iluminar dicho punto
Si el angulo es pequeño ( los dos vectores estan señalando en una posicion similar), sabremos entonces que el punto de la superficie necesita ser brillante porque esta mirando casi directamente a la luz (asumiendo que solo hay una fuente de luz). Si el angulo es grande sabemos que el punto necesita ser oscuro porque esta haciendo frente muy lejos de la luz
La expresion matemática para la luz es del tipo:
brillo=NdotL
N es igual a la direccion a la que la superficie esta mirando ( la superficie normal) y L la linea que dibujamos desde el punto de la superficie hsta la fuente de luz (el vector luz). Dot es la manera en la que medimos el angulo entre las dos lineas. Es un producto proporcional de los dos vectores..Pero como se aplican a los modelos en tiempo real??
INTRODUCCION AL MAPA NORMAL
Pero como se aplica en modelos en tiempo real?
Hasta hace poco tiempo, la mayoria de los video juegos en tiempo real habian sido creados usando el shading Gouraud (sistema utilizado en graficos computerizados para simular los diferentes efectos de luz y color a lo largo de la superficie de un objetom. en la practica, Gouraud shading es usado para almacenar luz suavizada en superficies de baja poligonizacion evitando los altos requisitos de la computadora en el calculo de la luz en cada pixel. Esta tecnica fue presentada en principio por Henri Gouraud en el año 1971). Basicamente consiste en calcular solo los vertices con la formula de LdotN ( es decir solo los vertices de los poligonos) y el resto de los pixeles de los poligonos son calculados por interpolacion. Es decir si mi poligono tiene un vertice brillante y otro oscuro, el piwel intermendio deberia ser el resultado del gradiente entre los dos
Es una manera abreviada qeu permite al hardware hacer menos calculos poruqe solo aplica la formula a unos pocos vetices y no a todos ellos. Entonces se llevaa cabo una estimacion de como deberia ser calculada la superficie entre los vertices. Este metodo trabaja muy bien, pero no resulta tan exacto como el calculo de la iluminacion de cada pixel.
La imagen de arriba muestra el problema con el shading Gouraud, Esta esfera de baja poligonizacion, es calculada por vertice usando Gouraud shading. Es obvio que la interpolacion lineal no es lo suficientemente buena como para hacer convincente la luz. En ciertas ocasiones se consigue la iluminacion deseada pero a veces aparecen extraños artefactos. Si los triangulos en el modelo son largos la luz parecera realemten pobre. Solo es posible introducir detalle en el modelo usando mas poligonos.
Cual es la solucion de esos problemas? el calculo de la luz por pixel!!! Comenzando desde la tarjeta grafica Geforce2, el hardware graficoa hora tiene la habilidad de calcular la formula de la luz NdotL de todos los pixeles en vez de unos cuantos. Esto evita el problema observado por el Gourand shading y abre el camino para soluciones mas realistas.
Esta esfera de baja poligonizacion es calculada por pixel. Incluso aunque es una esfera de bjaa poligonizacion, su shading es correcto y suave, prouqe el calculo luminico se ha realizado para cada pixel.
El calculo de luz por pixel usa una textura RGB para codificar los datos necesarios para crear las normales de superficie en un mapa de textura regular,Los canales rojo, verde y azul del mapa normal representan los valores X Y y Z del vector normal. Este es el ejemplo de un mapa normal:
Recordais cuando dijimos que la normal de superficie siempre va perpendicular a dicha superficie? Eso no es necesariamente cierto. Cuando usamos mapas normales, puedes establecer que la normal de cada pixel vaya en la direccion que tu quieras. En la imagen de arriba observamos que los pixeles de luz azules (R127,G127,B255) representa las normales que son dirigidas directamente fuera de la pantalla. Los pixeles rosas representan las normales que son ajustadas a la derecha. Los pixeles verdes represetnan las normales que son ajustadas superiormente. Los pixeles purpuras representasn los pixeles que son ajustados inferiormente y los pixeles azul oscuro/verdes son las normales que se ajustan a la izquierda.
Se puede observar que la superficie posee muchos bumps extras o hendiduras, o incluso cualquier otro tipo de detalles superficial simplemente editando la normal de cada pixel asi haremos que la superficie aparezca en direcciones que no son las reales. El estrechamiento de las normales engaña al ojo haciendole ver que la superficie tiene mas detalles que los que teine en realidad debido a la reaccion de la luz con la normal de cada pixel. Si alguna vez alguien ha pintado un mapa bump para un modelo que no es en tiempo real, es facilmente comprensible este principio. Se pueden utilizar los mapas normales para archivar el resultado exacto que los mapas bump-solo en tiempo real. De hecho es sencillo construirnos nuestro mapa bump y convertirlo en en un mapa normal. Despues aplicaremos el mapa normal a nuestro modelo y tu tendras el mapa bump en teimpo real. La primera parte del tutorial mostrará como hacerlo.
Tambien es un uso frecuente de los mapas normales para hacer que un modelo de bjaa poligonizacion parezca de alta. Este tipo de mapas normales son generados por ordenadores envez de ser pintados como los mapas bump. Aqui esta como fucnionan: Primero se crea dos versiones del modelo- una version de alta poligonizacion ( que contendra el detalle que uno quiera) una vesion de baja poligonizacion que actualmente se empleara para juegos. entonces se alinea los dos modelos para que ocupen el mismo espacio y se solapan ambos. Entonces se arranca un programa especial para generar el mapa normal, El progrmaa pone un mapa de textura completo en la superficie del modelo de bjaa resolucion. Para cada pixel de ese mapa de textura completo, el programa moldea un rayo (dibuja una linea) a lo largo de la superficie del modelo de bja resolucion hacia el modelo de alta resolucion. En el sitio donde el rayo se intersecta con la superficie del modelo de alta resolucion, el programa encuentra la normal del modelo alta resolucion.
CREACION DE MAPAS NORMALES A PARTIR DE MAPAS BUMP.
El metodo mas sencillo de crear nuestros modelos como muy detallados es usar un mapa normal a partir de un mapa bump. En este metodo, el mapa normal proporiona, en tiempo real, la misma funcionalidad exacta que el mapa bump. El principio basico es el siguiente:
1. Creamos un modelo en tiempo real
2. Dibujamos un mapa bump con photoshop u otro progrmaa de pintura
3. convertimos el mapa bump en un mapa normal con el plugin para photoshpo de Nvidia, Tambien se pueden usar otros programas. Ver al final los enlaces y paginas de descargas.
4. Aplicamos el mapa normal al modelo y renderizamos.
Este proceso es probablemente muy simple de comprender asi que a continuacion explicare: como convertir un mapa bump a un mapa normal.
Esta conversion esta hecha con el plugin Nvidia para photoshop. Pagina de descarga al final. Una vez que hayamos descargado, lo intalaremos. Lo siguiente sera seguir los pasos que a continuacion se señalan:
1. Se abre el mapa bump en photoshop. Asegurate que es imagen del tipo (64x64,128x128 o 256x256) y que los pixeles mas blancos coloreados representan los detalles levantados de la superficie ylos mas oscuros los que stan hundidos.
2. Elegimos guardar como desde el menu ARCHIVO. Elegimos un nombre y elegimos el formato DDS (Direct Draw Surface) Es un formato de imagen que es usado de manera nativa por DirectX, No te preocupes si DDS no es el formato final que deseamos. Siempre se puede abrir esta imagen denuevo y guardarlo con el formato que deseemos una vez convertido
3. Cuando pulsemos el boton de salvar, el siguiente cuadro dialogo aparecera y te permitira especificar todos los parametros para salvar la imagen
4. Pulsamos en Normal Map Settings... para acceder a las opciones de conversion a mapa normal. Se abrira la siguiente ventana:
5. Pulsamos Convert to Tangent Space Normal Map. Establecer Filter Type en 4 sample y Scale en 4. Ponemos Height Source en Average RGB ( una vez que hayamos convertido nuestro mapa bump en un mapa normal, podremos igualmente acceder a este cuadro dialogo para archivar otros resultados. Por ejemplo, el Scale Value hará que nuestro bump aparezca en mayor o menor grado en la superficie), cuando todo este correcto, pulsamos el boton de OK.
6. Volveremos a la ventana de opciones del formato DDS, pulsamos salvar. Esto convertira tu imagen en un mapa normal y habras salvado en formato DDS. Cierra la imagen y vuelve a abrirla para ver el mapa normal que has creado.
Hay muchisima informacion ela web sobre la creacion de mapas normales usando multiples tecnicas y diferentes paquetes de software. He recopilado los que he creido mas convenientes y utiles:
Crear mapas normales:
http://developer.nvidia.com/object/nv_t ... tools.html
Plugin de Nvidia para photoshop
http://www.pixolator.com/zbc-bin/ultima ... =011260&p=
Mucha informacion acerca de como crear mapas normales con Zbrush
http://www.drone.org/tutorials/normal_maps.html
Como crear mapas normales con Maya
http://www.pinwire.com/article82.html
Metodo de como crear mapas normales para superficies planas para cualquier programa 3D
http://members.shaw.ca/jimht03/normal.html
Crear mapas normales usando Cinema4D
http://www.ati.com/developer/tools.html
Creacion de mapas normales con un programa generador de ATI
http://www.soclab.bth.se/practices/orb.html
Generador de mapas normales parecido al anterior para modelos de alta y baja resolucion.
Espero como siempre que sea útil.
mane162
Hola a todos!!!Como bien sabeis si soleis pasaros por la seccion en ingles del foro, la release de Maxwell incluirá un parámetro completamente nuevo denominad: Normal Map (mapa normal). Para todos los que desconozcais en que consiste ese mapa, aqui va una breve explicacion de que es y como conseguirlo con la ayuda de software externo. Es traduccion de distintas páginas que he ido encontrando por ahi ( al final pondre las referencias), asi que perdonadme si me traduccion ingles español no es perfecta .
Antes de ponernos a hablar de los normal maps específicamente, es importante dar un repaso general del proceso de iluminación de un modelo 3D con el fin de poseer una buena base sobre el comportamiento de los normal maps. Es una explicación sencilla.
Asi que vamos allá, como trabaja la luz?? Como determinamos la oscuridad o luminosidad para que cada punto de la pantalla se parezca al resultado del modelo que estamos iluminando en la escena? Lo primero es conocer la direcion qeu cada punto en la superficie esta haciendo frente. La direccion que un punto esta haciendo frente en un superficie se denomina normal. Podemos imaginar una normal como una linea que se extiende desde un punto de la superficie. La linea es perpendicular a la superficie. A continuación necesitamos conocer donde se localiza la luz en nuestra escena. Nosotros creamos una linea desde un punto de la superficie hasta el la posicion de la luz, esta linea se denomina vector luz (un vector es la interpretacion en terminos matematicos de una linea). Asi que tenemos dos vectores saliendo de nuestro punto de superficie, el vector luz y el vector normal. Si medimos el angulo entre las doslineas entonces sabremos como iluminar dicho punto
Si el angulo es pequeño ( los dos vectores estan señalando en una posicion similar), sabremos entonces que el punto de la superficie necesita ser brillante porque esta mirando casi directamente a la luz (asumiendo que solo hay una fuente de luz). Si el angulo es grande sabemos que el punto necesita ser oscuro porque esta haciendo frente muy lejos de la luz
La expresion matemática para la luz es del tipo:
brillo=NdotL
N es igual a la direccion a la que la superficie esta mirando ( la superficie normal) y L la linea que dibujamos desde el punto de la superficie hsta la fuente de luz (el vector luz). Dot es la manera en la que medimos el angulo entre las dos lineas. Es un producto proporcional de los dos vectores..Pero como se aplican a los modelos en tiempo real??
INTRODUCCION AL MAPA NORMAL
Pero como se aplica en modelos en tiempo real?
Hasta hace poco tiempo, la mayoria de los video juegos en tiempo real habian sido creados usando el shading Gouraud (sistema utilizado en graficos computerizados para simular los diferentes efectos de luz y color a lo largo de la superficie de un objetom. en la practica, Gouraud shading es usado para almacenar luz suavizada en superficies de baja poligonizacion evitando los altos requisitos de la computadora en el calculo de la luz en cada pixel. Esta tecnica fue presentada en principio por Henri Gouraud en el año 1971). Basicamente consiste en calcular solo los vertices con la formula de LdotN ( es decir solo los vertices de los poligonos) y el resto de los pixeles de los poligonos son calculados por interpolacion. Es decir si mi poligono tiene un vertice brillante y otro oscuro, el piwel intermendio deberia ser el resultado del gradiente entre los dos
Es una manera abreviada qeu permite al hardware hacer menos calculos poruqe solo aplica la formula a unos pocos vetices y no a todos ellos. Entonces se llevaa cabo una estimacion de como deberia ser calculada la superficie entre los vertices. Este metodo trabaja muy bien, pero no resulta tan exacto como el calculo de la iluminacion de cada pixel.
La imagen de arriba muestra el problema con el shading Gouraud, Esta esfera de baja poligonizacion, es calculada por vertice usando Gouraud shading. Es obvio que la interpolacion lineal no es lo suficientemente buena como para hacer convincente la luz. En ciertas ocasiones se consigue la iluminacion deseada pero a veces aparecen extraños artefactos. Si los triangulos en el modelo son largos la luz parecera realemten pobre. Solo es posible introducir detalle en el modelo usando mas poligonos.
Cual es la solucion de esos problemas? el calculo de la luz por pixel!!! Comenzando desde la tarjeta grafica Geforce2, el hardware graficoa hora tiene la habilidad de calcular la formula de la luz NdotL de todos los pixeles en vez de unos cuantos. Esto evita el problema observado por el Gourand shading y abre el camino para soluciones mas realistas.
Esta esfera de baja poligonizacion es calculada por pixel. Incluso aunque es una esfera de bjaa poligonizacion, su shading es correcto y suave, prouqe el calculo luminico se ha realizado para cada pixel.
El calculo de luz por pixel usa una textura RGB para codificar los datos necesarios para crear las normales de superficie en un mapa de textura regular,Los canales rojo, verde y azul del mapa normal representan los valores X Y y Z del vector normal. Este es el ejemplo de un mapa normal:
Recordais cuando dijimos que la normal de superficie siempre va perpendicular a dicha superficie? Eso no es necesariamente cierto. Cuando usamos mapas normales, puedes establecer que la normal de cada pixel vaya en la direccion que tu quieras. En la imagen de arriba observamos que los pixeles de luz azules (R127,G127,B255) representa las normales que son dirigidas directamente fuera de la pantalla. Los pixeles rosas representan las normales que son ajustadas a la derecha. Los pixeles verdes represetnan las normales que son ajustadas superiormente. Los pixeles purpuras representasn los pixeles que son ajustados inferiormente y los pixeles azul oscuro/verdes son las normales que se ajustan a la izquierda.
Se puede observar que la superficie posee muchos bumps extras o hendiduras, o incluso cualquier otro tipo de detalles superficial simplemente editando la normal de cada pixel asi haremos que la superficie aparezca en direcciones que no son las reales. El estrechamiento de las normales engaña al ojo haciendole ver que la superficie tiene mas detalles que los que teine en realidad debido a la reaccion de la luz con la normal de cada pixel. Si alguna vez alguien ha pintado un mapa bump para un modelo que no es en tiempo real, es facilmente comprensible este principio. Se pueden utilizar los mapas normales para archivar el resultado exacto que los mapas bump-solo en tiempo real. De hecho es sencillo construirnos nuestro mapa bump y convertirlo en en un mapa normal. Despues aplicaremos el mapa normal a nuestro modelo y tu tendras el mapa bump en teimpo real. La primera parte del tutorial mostrará como hacerlo.
Tambien es un uso frecuente de los mapas normales para hacer que un modelo de bjaa poligonizacion parezca de alta. Este tipo de mapas normales son generados por ordenadores envez de ser pintados como los mapas bump. Aqui esta como fucnionan: Primero se crea dos versiones del modelo- una version de alta poligonizacion ( que contendra el detalle que uno quiera) una vesion de baja poligonizacion que actualmente se empleara para juegos. entonces se alinea los dos modelos para que ocupen el mismo espacio y se solapan ambos. Entonces se arranca un programa especial para generar el mapa normal, El progrmaa pone un mapa de textura completo en la superficie del modelo de bjaa resolucion. Para cada pixel de ese mapa de textura completo, el programa moldea un rayo (dibuja una linea) a lo largo de la superficie del modelo de bja resolucion hacia el modelo de alta resolucion. En el sitio donde el rayo se intersecta con la superficie del modelo de alta resolucion, el programa encuentra la normal del modelo alta resolucion.
CREACION DE MAPAS NORMALES A PARTIR DE MAPAS BUMP.
El metodo mas sencillo de crear nuestros modelos como muy detallados es usar un mapa normal a partir de un mapa bump. En este metodo, el mapa normal proporiona, en tiempo real, la misma funcionalidad exacta que el mapa bump. El principio basico es el siguiente:
1. Creamos un modelo en tiempo real
2. Dibujamos un mapa bump con photoshop u otro progrmaa de pintura
3. convertimos el mapa bump en un mapa normal con el plugin para photoshpo de Nvidia, Tambien se pueden usar otros programas. Ver al final los enlaces y paginas de descargas.
4. Aplicamos el mapa normal al modelo y renderizamos.
Este proceso es probablemente muy simple de comprender asi que a continuacion explicare: como convertir un mapa bump a un mapa normal.
Esta conversion esta hecha con el plugin Nvidia para photoshop. Pagina de descarga al final. Una vez que hayamos descargado, lo intalaremos. Lo siguiente sera seguir los pasos que a continuacion se señalan:
1. Se abre el mapa bump en photoshop. Asegurate que es imagen del tipo (64x64,128x128 o 256x256) y que los pixeles mas blancos coloreados representan los detalles levantados de la superficie ylos mas oscuros los que stan hundidos.
2. Elegimos guardar como desde el menu ARCHIVO. Elegimos un nombre y elegimos el formato DDS (Direct Draw Surface) Es un formato de imagen que es usado de manera nativa por DirectX, No te preocupes si DDS no es el formato final que deseamos. Siempre se puede abrir esta imagen denuevo y guardarlo con el formato que deseemos una vez convertido
3. Cuando pulsemos el boton de salvar, el siguiente cuadro dialogo aparecera y te permitira especificar todos los parametros para salvar la imagen
4. Pulsamos en Normal Map Settings... para acceder a las opciones de conversion a mapa normal. Se abrira la siguiente ventana:
5. Pulsamos Convert to Tangent Space Normal Map. Establecer Filter Type en 4 sample y Scale en 4. Ponemos Height Source en Average RGB ( una vez que hayamos convertido nuestro mapa bump en un mapa normal, podremos igualmente acceder a este cuadro dialogo para archivar otros resultados. Por ejemplo, el Scale Value hará que nuestro bump aparezca en mayor o menor grado en la superficie), cuando todo este correcto, pulsamos el boton de OK.
6. Volveremos a la ventana de opciones del formato DDS, pulsamos salvar. Esto convertira tu imagen en un mapa normal y habras salvado en formato DDS. Cierra la imagen y vuelve a abrirla para ver el mapa normal que has creado.
Hay muchisima informacion ela web sobre la creacion de mapas normales usando multiples tecnicas y diferentes paquetes de software. He recopilado los que he creido mas convenientes y utiles:
Crear mapas normales:
http://developer.nvidia.com/object/nv_t ... tools.html
Plugin de Nvidia para photoshop
http://www.pixolator.com/zbc-bin/ultima ... =011260&p=
Mucha informacion acerca de como crear mapas normales con Zbrush
http://www.drone.org/tutorials/normal_maps.html
Como crear mapas normales con Maya
http://www.pinwire.com/article82.html
Metodo de como crear mapas normales para superficies planas para cualquier programa 3D
http://members.shaw.ca/jimht03/normal.html
Crear mapas normales usando Cinema4D
http://www.ati.com/developer/tools.html
Creacion de mapas normales con un programa generador de ATI
http://www.soclab.bth.se/practices/orb.html
Generador de mapas normales parecido al anterior para modelos de alta y baja resolucion.
Espero como siempre que sea útil.
mane162
Last edited by mane162 on Tue Nov 22, 2005 6:10 pm, edited 3 times in total.
Pentium IV 3.0, 2G RAM, ATI radeon 256 MB,3D Studio max7.0, OS: WXPsp2
Pentium IV 2.5, 1G RAM, ATI radeon 128 MB,3D Studio max 7.0, OS: WXPsp2
Pentium IV 2.5, 1G RAM, ATI radeon 128 MB,3D Studio max 7.0, OS: WXPsp2