Concepto de mapas normales y aplicación

Para comentar aspectos técnicos del motor y temas que no sean directamente sobre el motor pero que sean de aplicación directa en el mismo: fotografia, iluminación etc, y programas externos para mejora el resultado (photoshop...)
Responder [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable
mane162
Enganchao
Enganchao
Mensajes: 401
Registrado: Martes 3 Enero 2006 11:00 PM
Ubicación: España
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Concepto de mapas normales y aplicación

Mensaje por mane162 » Jueves 5 Enero 2006 3:04 PM

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 :wink: .

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
Imagen
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
Imagen Imagen
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
Imagen
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.
Imagen
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.
Imagen
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:
Imagen
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.
Imagen Imagen Imagen

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.
Imagen

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
Imagen
2. Dibujamos un mapa bump con photoshop u otro progrmaa de pintura
Imagen
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.
Imagen
4. Aplicamos el mapa normal al modelo y renderizamos.
Imagen
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
Imagen
3. Cuando pulsemos el boton de salvar, el siguiente cuadro dialogo aparecera y te permitira especificar todos los parametros para salvar la imagen
Imagen
4. Pulsamos en Normal Map Settings... para acceder a las opciones de conversion a mapa normal. Se abrira la siguiente ventana:
Imagen
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.

Enlace para una traduccion de la guia:
http://www.maxwellrender.com/forum/view ... c&start=15

Espero como siempre que sea útil. :D

mane162

jespizua
Dicharachero
Dicharachero
Mensajes: 173
Registrado: Domingo 8 Enero 2006 11:00 PM
Ubicación: bilbao,spain
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Mensaje por jespizua » Sábado 28 Enero 2006 7:49 PM

Muchas gracias Mane 162 por compartir tus conocmientos una vez más con novatos como yo en esto del maxwell. La verdad es que ya andaba tirándome de los pelos porque no conseguía aplicar bien las texturas y menos mal que has explicado esto de los normal map, porque no tenía ni idea de que había que hacer ese paso. Pero antes de despedirme una pregunta más: a la hora de aplicar el mapa de noise , ¿hay que pasar primero la textura DDS de nuevo a JPG, o debiera funcionar directamente poniendo el bipmap de noise en DDS? lo digo porque a mí no me funciona poniéndolo directamente en DDS, y no se si estoy haciendo algo mal o es que así. Bueno pero con el paso a JPG me sale, así que todo bien.
Bueno un saludo!!!!!

Avatar de Usuario
jan
Sosito
Sosito
Mensajes: 22
Registrado: Domingo 8 Enero 2006 11:00 PM
Ubicación: España
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Mensaje por jan » Miércoles 1 Febrero 2006 8:08 PM

Añado este enlace que siempre me pareció muy curioso para crear mapas de normales de superficies reales con una linterna y una camara de fotos :wink:

http://66.70.170.53/Ryan/nrmphoto/nrmphoto.html

Un gran trabajo mane162

Un saludo

Avatar de Usuario
laurindel
Dicharachero
Dicharachero
Mensajes: 179
Registrado: Martes 3 Enero 2006 11:00 PM
Ubicación: Santander - España
Contactar:

Mensaje por laurindel » Miércoles 1 Febrero 2006 9:09 PM

8O alucinado que estoy :? , el plugin de Nvidia es only Pc :( pero al menos el de Ati esta para mac, a ver si lo consigo hacer funcionar .... tiene unas posibilidades impresionantes 8)
Renders : http://kebook.cgsociety.orgLightwave & Maxwell renderPowerMac G5 QUAD 2,5 Ghz 4 Gb RamPowerMac G5 Dual 2Ghz 4 Gb RamPowerBook G4 1,67 15" 1,5 Gb Ram

jsgjavi
Enganchao
Enganchao
Mensajes: 348
Registrado: Lunes 30 Enero 2006 11:00 PM
Ubicación: Toledo,España
Contactar:

Mensaje por jsgjavi » Martes 27 Marzo 2007 10:04 AM

estoy dandole a este tema , he apliacado el dds en el bump con la casilla normal map activado, cuando le doy al render me dice que la textura no la reconoce... osease que el bump no me lo hace, dice dds formato no reconocido, hay que crear el dds y luego guardarlo con otra extensión?

Avatar de Usuario
jan
Sosito
Sosito
Mensajes: 22
Registrado: Domingo 8 Enero 2006 11:00 PM
Ubicación: España
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

Mensaje por jan » Miércoles 28 Marzo 2007 7:10 AM

Para generar los mapas de normales os recomiendo el Crazy bump. Es mucho mas simple de usar y da resultados excelentes. Lo podeis encontrar aqui: http://www.crazybump.com/beta/download.html

Espero que os sea de utilidad
Un saludo

Avatar de Usuario
Pperezu
Administrador
Administrador
Mensajes: 755
Registrado: Martes 3 Enero 2006 11:00 PM
Ubicación: Torrelodones. España
Contactar:

Mensaje por Pperezu » Miércoles 28 Marzo 2007 8:30 AM

jan, es bunísimo este generador de normales. Comodísimo, facilísimo, y muy visual. Para mi ha sido un descubrimiento estupendo...

Creo que se va a convertir en algo imprescindible en mi caso :wink:
Última edición por Pperezu el Miércoles 28 Marzo 2007 8:32 AM, editado 1 vez en total.
Saludos Pablo
Cinema4D R16 - Allplan 2015 ... artesano del 3d

jsgjavi
Enganchao
Enganchao
Mensajes: 348
Registrado: Lunes 30 Enero 2006 11:00 PM
Ubicación: Toledo,España
Contactar:

Mensaje por jsgjavi » Miércoles 28 Marzo 2007 8:53 AM

que guapo el programita este, gracias por el link

devista
Administrador
Administrador
Mensajes: 1437
Registrado: Martes 3 Enero 2006 11:00 PM
Ubicación: en castellón pasando calor
Contactar:

Mensaje por devista » Miércoles 28 Marzo 2007 8:55 AM

simple y práctico, muy bueno. Muchas gracias.
saludos
luis
En la vida solo hay dos cosas seguras: la muerte y los impuestos.1 x i7 980x. LA OPCIÓN BUSCAR EXISTE.

Responder
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1275: count(): Parameter must be an array or an object that implements Countable

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados