trensim.comSimulación Ferroviaria
   

Técnica: "normal Bump" o relieve según normales

Foro destinado al intercambio de ideas y experiencias entre diseñadores 3D

Moderador: Moderadores

Técnica: "normal Bump" o relieve según normales

Notapor Josep » Sab Abr 08, 2006 8:34 pm

Holas,

Siguiendo uno de los hilos del foro, y atendiendo a peticiones de personas interesadas, os expongo la técnica llamada "normal bump" o relieve según normales.

Es una técnica que permite "resumir" en un bitmap los añadidos a la malla de un objeto. En concreto, en este ejemplo el resultado final es en una malla de 1 polígono en lugar de 17.921...

Esta técnica se puede hacer con 3ds max a partir de la versión 7. No es posible realizarla con gmax ni con programas que no admitan "render". Y de entre los que tienen "render, no todos implementan esta técnica...

En síntesis, la técnica consiste en crear dos objetos: uno base con mínima malla, y una copia de éste al que se le añade el 3D de añadidos (remaches, hendiduras, tubos, paneles, etc...). Se hace un "Render to texture": es decir, que el impacto visual del "render" del relieve (en este caso) se traspasa a la textura, creando un bitmap con el resultado final que se aplica al mapa de relieve.

Hay que entender que los mapas de relieve hace tiempo que se utilizan en 3D. (MSTS no los admite, y en cambio Trainz sí...). Un mapa de relieve típico es el que hay una gama de grises, dónde el negro no hace "crecer" la imagen, y el blanco sí. Pero estos mapas no pueden dar información al motor de render del juego sobre la dirección del relieve. En cambio, el "normal Bump" sí.

Una normal es un vector de cálculo perpendicular a una cara. Por lo tanto, un "normal bump" es un mapa de relieve sensible al punto de vista o a los puntos de iluminación...

Esta técnica la descubrí implementada claramente en Doom3...

EJEMPLO DE APLICACIÓN DE NORMAL BUMP CON 3DS MAX 8:

Imagen1: Se han creado dos planos:

Uno con 1 polígono (lo llamo Base), y otro con remaches añadidos (semiesferas) con un total de 17.921 polígonos (lo llamo Bump). Al objeto base se le añade un modificador Unwrap UVW, con mapeado plano en este caso.

Imagen 2: Activando el visor Frontal, y seleccionando el objeto Base (el de 1 polígono), se va a Render to texture (menú Render...).

- Activar Projection Mapping. Con Pick, seleccionar el objeto de proyección (el de la máxima malla, Bump en este caso).
- En Options de Projection mapping, en Normal Map Space, activar Tangent.
- En Projection Mapping, desactivar Sub-object levels.
- En Maping coordinates, asegurarse de que está activado Use existing channel (1 en este caso).

Imagen 3: siguiendo en el mismo menú, más abajo:

- En Output, seleccionar NormalsMap (Add => NormalsMap)
- En Name, poner el que se quiera. En File Name and Tipe, seleccionar la ubicación de salida y el formato. (En este caso, dejo el .tga por defecto)
- En Tarjet Map Slot, asegurarse de que se ha seleccionado Bump.
- Escoger resolución (en este caso he puesto 1024)
- Activar Output Into Normal Bump y Output into Source.
- RENDER.

(Seguirá...)
Adjuntos
malles-inicials.jpg
Imagen 1: un plano con 1 polígono, y otro con semiesferas y un total de 17.921 polígonos. Los dos objetos están alineados perfectamente.
malles-inicials.jpg (54.58 KiB) Visto 15924 veces
pas1.jpg
Imagen 2: pasos iniciales de "render to texture"
pas1.jpg (93.8 KiB) Visto 15913 veces
pas1b.jpg
Imagen 3: detalles finales de salida del "render to texture"
pas1b.jpg (97.54 KiB) Visto 15892 veces
Última edición por Josep el Sab Abr 08, 2006 9:40 pm, editado 4 veces en total
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor Josep » Sab Abr 08, 2006 8:40 pm

Seguimos...

Figura 4: mapa resultante.

Es un mapa de alta resolución, dónde el canal rojo guarda información sobre la orientación de normales izquierda-derecha, el canal verde guarda información sobre la dirección arriba-abajo, y el canal azul guarda información sobre la profundidad (vertical). (Este mapa aparece aplicado en el mapa de relieve de 3dsmax, y puede sumarse a alguno ya existente).

Figura 5: comparativa de resultados de "render".

A la izquierda, "render" del modelo mallado con 17.921 polígonos (plano con semiesferas). A la derecha, "render" del plano de 1 polígono con el "normal bump" de mapa de relieve.

Y sigue...
Adjuntos
BaseNormalsMap.jpg
Figura 4: mapa resultante de la técnica. El canal rojo guarda información sobre la orientación de normales izquierda-derecha, el canal verde guarda información sobre la dirección arriba-abajo, y el canal azul guarda información sobre la profundidad
BaseNormalsMap.jpg (95.29 KiB) Visto 15864 veces
comparativa.jpg
Figura 5:

A la izquierda, resultado visual con 17.921 polígonos

A la derecha, resultado visual con 1 polígono...
comparativa.jpg (79.3 KiB) Visto 15862 veces
Última edición por Josep el Dom Abr 09, 2006 6:55 pm, editado 1 vez en total
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor Josep » Sab Abr 08, 2006 9:14 pm

Una vez en el juego, la luz de motor del mismo (ya sea difusa, ya sea una linterna...) afecta según la dirección de incidencia en el bitmap. Insisto en que realmente es un plano...de 1 polígono...

Figura 6: Impacto con una luz en la parte superior. Modelo de 1 polígono con "normal bump"

Figura 7: Impacto con una luz en la parte inferior izquierda. El mismo modelo de 1 polígono.

La técnica de implementar en la textura del modelo el "render" del impacto de la iluminación nos puede ayuda a generar texturas con un impacto de luminosidad más o menos difusa proviniente del cielo...

En los últimos juegos de primera persona (Call of Duty 2, por ejemplo, por decir alguno) en las paredes de las casas aparece una iluminación (luces, sombras, penumbras...) que no hace directamente el motor del juego, sino que a las texturas existentes /ladrillos, por ejemplo) se le hace un proceso de "render to texture" y en los mismos ladrillos aparece el impacto de la luz, las sombras, las penumbras... Pero esto ya es otro tema...

Todos estos impactos lumínicos se guardan en el mapa de difusa, y si se hace un "normal bump", se guarda en el mapa de relieve.

Así pues, si un juego nos admite mapa de difusa (todos) y mapa de relieve... podemos incrementar el impacto visual de los modelos siguiendo técnicas profesionales utilizadas en los juegos actuales.

Si sirve...

Saludos!

Josep
Adjuntos
llumdalt.jpg
Figura 6: luz arriba en el "normal bump"
llumdalt.jpg (54.88 KiB) Visto 15849 veces
llumbaix.jpg
Figura 7: la luz abajo a la izquierda.

Modelos de 1 polígono...
llumbaix.jpg (54.31 KiB) Visto 15845 veces
Última edición por Josep el Dom Abr 09, 2006 6:56 pm, editado 1 vez en total
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor Music224 » Sab Abr 08, 2006 10:07 pm

Ya lo creo que sirve!!

Es todo muy interesante, gracias por la excelente explicación

Music224.
Music224
 
Mensajes: 911
Registrado: Vie Sep 19, 2003 9:39 pm
Ubicación: Martorell (Barcelona)

Re: Técnica: "normal Bump" o relieve según normale

Notapor feliuet » Sab Abr 08, 2006 10:17 pm

Josep escribió:
Hay que entender que los mapas de relieve hace tiempo que se utilizan en 3D. (MSTS no los admite, y en cambio Trainz sí...). Un mapa de relieve típico es el que hay una gama de grises, dónde el negro no hace "crecer" la imagen, y el blanco sí. Pero estos mapas no pueden dar información al motor de render del juego sobre la dirección del relieve. En cambio, el "normal Bump" sí.



Hola a todos

Josep, no me ha quedado claro el punto que cito.

¿Quieres decir entonces que la textura resultante es inaplicable a un objeto creado para MSTS, o el "normal Bump" sí que lo sería?.

Perdona pero soy neófito en la materia y estoy empezando a entender su funcionamiento.

Resultan muy interesantes estas pequeñas lecciones, muchas gracias por tus magisterios.

Saludos
Avatar de Usuario
feliuet
 
Mensajes: 543
Registrado: Sab Dic 03, 2005 1:20 pm

Notapor Divi4p » Sab Abr 08, 2006 11:06 pm

¡Fantástico Josep! ;)

Una magnífica exposición digna de un verdadero profesional del mundillo :D

Ahora, si se me permite, existe una opción más para los que no tengan 3ds, quizás menos precisa, pero algo más rápida (y barata) para generar mapas bump a partir de la textura de manera rápida y son los plug-ins que Nvidia ha creado para photoshop, a partir de los cuales, a partir de una textura normal y corriente, se puede obtener una textura bump y mediante unos retoques se puede dar por válida y queda bastante realista.

Pillamos la textura:

http://i25.photobucket.com/albums/c96/D ... ve_txt.jpg

(Sí, el techo no está bien...)

La pasamos por el filtro:

Imagen

Et vòila

Imagen

Y un ejemplo más, se ahorran muchos polígonos ;)

http://i25.photobucket.com/albums/c96/D ... _bump2.jpg

Estos mapas son el pan de cada día en los motores gráficos modernos y conviene ir acostumbrándose a ellos puesto que no tardaremos en empezar a manejarlos con trenes. Bien utilizados dan un juego tremendo.

Un saludo y mis felicitaciones Josep, reitero, una exposición magnífica, no conocía ese método tal y como lo planteas, voy a ver si mi antiguo 3ds5 me permite hacer estas cosas.
Última edición por Divi4p el Sab Abr 08, 2006 11:53 pm, editado 1 vez en total
Imagen
Avatar de Usuario
Divi4p
Bibliotecario
 
Mensajes: 1314
Registrado: Lun Abr 04, 2005 5:19 pm
Ubicación: en un zarrio

Notapor Josep » Sab Abr 08, 2006 11:48 pm

Divi4p,

Gracias por los comentarios positivos sobre este hilo.

Aprovecho para pedirte que reduzcas la resolución de las imágenes que pones a 640 píxeles de ancho como máximo. Me he estado matando toda la tarde para que la explicación y mis imágenes cupieran en una pantalla de 1024x768...y ahora con tus imágenes me estás matando a lo ancho... Gracias. :wink:

También te recuerdo que en el post de Trainz Renfe 340 (ex 4000) ya mostré/mostramos esta técnica, implementada en un modelo para Trainz... Ahí ya comentaba la posibilidad de utilizar en 3ds max7 esta técnica del normal map...

Los plugins que comenta Divi4p para Photoshop, para generar "normal bumps" a partir de bitmaps, se puenden descargar de nvidia en http://developer.nvidia.com/object/phot ... ugins.html


Feliuet:

MSTS no admite ningún mapa de relieve, ya sea de los típicos o el avanzado normal bump. Trainz sí lo admite, como ya he comentado antes y Divi4p nos ha ilustrado de nuevo.

Como estoy esperanzado en los nuevos simuladores...creo que es hora de mostrar y profundizar en este tipo de técnicas.

Saludos, y gracias a todos por los comentarios.

Josep
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor javierfl » Dom Abr 09, 2006 12:38 pm

Seguimos muy atentamente tus explicaciones porque, como bien dices, ahí está el futuro. :app:

Saludos:

Javier.-
Avatar de Usuario
javierfl
grupo TrenSim
 
Mensajes: 9620
Registrado: Sab Ago 30, 2003 11:23 pm
Ubicación: Ciudad Astur

Notapor Victor » Mar Abr 11, 2006 3:38 pm

Reapareciendo brevemente,

Muy interesantes y pedagógicas las explicaciones de Josep.

Siguiendo la misma línea de 'pensamiento' en Maya existe lo que se llama 'Occlussion Map' es decir, partiendo de una geometría dada, se genera un mapa de UV con información 0-255 con respecto a los diferentes ángulos de normales de los polígonos, es decir, que los huecos existentes en geometría, tales como estrías, concavidades, etcétera queda reflejados en ese mapa de UV.

Con lo que posteriormente se puede utilizar dicho mapa para por ejemplo en un programa tal como Photoshop que trabaja por capas, sumarle a la capa de color un 'multiply' con el mapa de oclusión, y sin tener que tocar el color tenemos una textura ensuciada en todos su recovecos.

Deconozco si Max implementa algo parecido, pero seguro que sí. Josep, nos podría ilustrar sobre esto último con respecto a Max.

Saludos.
Avatar de Usuario
Victor
 
Mensajes: 818
Registrado: Vie Oct 24, 2003 11:15 am
Ubicación: Barcelona

Notapor Josep » Jue Abr 13, 2006 3:47 pm

Victor,

"Occlusion map" no es en absoluto lo mismo que "normal bump". Aunque se utiliza también un cálculo de normales, el objetivo de "Occlusion map" es el de reducir el tiempo de cálculo de "render" cuando se utilizan técnicas de GI (Iluminación global).

Si bien esta técnica permite también un "tostado" de mapas o "render to texture" (es decir, aplicar en el bitmap existente el impacto de la iluminación), no es una técnica de relieve propiamente dicha. Lo que comentas de poder poner en este mapa imperfecciones serán las mismas que se pueden hacer con las técnicas tradicionales de mapa de relieve, que no permiten la iluminación y brillos del relieve según ángulo de incidencia, y que por el contrario la técnica de "normal bump" sí implementa.

Entiendo que la técnica de "occlusion map" es más bien una técnica de postproducción de "render", dirigida a optimizar el tiempo de cálculo.

No debemos confundirnos cuando aparece la palabra "normal", ya que es un concepto de valores de datos (vector de cálculo perpendicular a cada cara) utilizados profusamente en muchos cálculos 3D... y muy diferentes entre sí.

Os muestro un ejemplo de ésta técnica a través de resultados (no os muestro los pasos... Si alguien le interesa que muestre paso a paso cómo hacerlo, me lo comentáis).

Figura 1: imagen renderizada utilizando una sola luz "Skylight" y técnica de "Light Tracer" de iluminación avanzada. No la he optimizado al máximo...Tiempo de render: 8 minutos 29 segundos. Observad las "penumbras".

(continúa...)
Adjuntos
5ltracer8-29.jpg
Figura 1: Técnica Light Tracer de Iluminación Global. Tiempo de render: 8 minutos 29 segundos.
5ltracer8-29.jpg (90.02 KiB) Visto 15544 veces
Última edición por Josep el Jue Abr 13, 2006 4:11 pm, editado 1 vez en total
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor Victor » Jue Abr 13, 2006 3:56 pm

Exacto Josep, con lo de 'misma linea de pensamiento' me refería a lo de realizar un render o cálculo de mapeado, para utilizarlo luego de modo que se optimicen tiempos para conseguir resultados detallados, sea de apariencia de geometría o sea de apariencia de iluminación.

El 'Occlusion Map' tiene un pequeño inconveniente y es que si el objeto se mueve con respecto al entorno y las condiciones lumínicas del entorno varían sustancialmente, pues puede que quede mal, algo así como un croma mal iluminado.

El secreto de una buena intengración no es tanto el recortar con más o menos exactitud como el que lumínicamente sea coherente el objeto respecto al fondo.

Saludosl
Avatar de Usuario
Victor
 
Mensajes: 818
Registrado: Vie Oct 24, 2003 11:15 am
Ubicación: Barcelona

Notapor Josep » Jue Abr 13, 2006 4:06 pm

(....continúa)

Si se está trabajando en una animación, el tiempo de "render" es evidentemente elevado. Más si se trabaja a resoluciones para cine...

Por eso apareció la técnica de "occlusion map", que en 3ds Max la implementa el módulo Mental Ray.

Básicamente consite en hacer dos "renders" de la misma imagen: uno sin "occlusion map" y otro con "occlusion map" como mapa de difusa. ("Occlusion Map" es un tipo de mapa solamente utilizable con mental Ray, y aparece solamente cuando se ha activado este "motor de render" en 3ds max. En concreto en Mental Ray de 3ds Max este mapa se llama "Ambient/Reflective Occlusion (base)" ).

Una vez se han obtenido las dos imágenes, deben componerse utilizando un multiplicador de capas, con un 75% de opacidad. Yo lo he hecho con Combustion, programa de postproducción, dónde me permitiría hacer este proceso con todos los fotogramas de la animación...

Este mismo proceso puede hacerse con Photoshop: si queréis, os bajáis las dos imágenes (figura2 y figura3) y en Photoshop a la imagen base ("de colores") le añadís la otra imagen en la capa superior, con los paramétros mencionados: Multiplicador como fusión de capa, a un 75% de opacidad.

Finalmente comentar que la suma del proceso no llega a los 8 minutos y pico que implica el "render" con técnicas de GI.

Resumiendo: "occlusion map" es una técnica que nada tiene que ver con el relieve, sino con el ojetivo de ahorrar tiempos de "render" en técnicas de GI (iluminación global) avanzadas en animaciones... De todas formas, como ya indiqué en este mismo post y hace algún tempo en este foro, las técnicas de "Render to texture" permiten que este impacto lumínico se componga no en el "render" para una animación, sino en el mismo mapa de difusa....logrando que en un bitmap que utilicemos para el material se añada el impacto de las luces y sombras.

Pienso que un cálculo de GI de iluminación superior del objeto, y un "render to texture" pueden facilitar el implementar sombras y penumbras en nuestros modelos para msts o el simulador (o juego) que queramos, ya que el mapa final con el impacto lumínico se aplica en difusa...

Por cierto, Víctor, vaya "preguntitas" que me haces, amigo... Todo el día en ello...

Pero si sirve... encantado.

Saludos.

Josep



Figura 2: Render sin "occlusion map". Tiempo de render: 25 segundos.

Figura 3: Render con "occlusion map". Tiempo de render: 2 minutos 8 segundos.

Figura 4: Composición de los dos mapas en en programa Combustion, utilizando "multiplicador" para mezclar las capas y una opacidad del 75% en la capa superior (lugar donde se coloca la imagen realizada con "occlusion map").
Adjuntos
5base0-25.jpg
Figura 2: Render sin "occlusion map". Tiempo de render: 25 segundos.
5base0-25.jpg (88.62 KiB) Visto 15538 veces
5occlu2-08.jpg
Figura 3: Render con "occlusion map". Tiempo de render: 2 minutos 8 segundos.
5occlu2-08.jpg (86.41 KiB) Visto 15538 veces
combustion.jpg
Figura 4: Composición de los dos mapas en el programa Combustion
combustion.jpg (75 KiB) Visto 15537 veces
Última edición por Josep el Jue Abr 13, 2006 7:48 pm, editado 5 veces en total
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor Victor » Jue Abr 13, 2006 4:15 pm

Si me permites Josep, apostillaré a tu magnífica exposición. La idea de utilizar el Occlusion Map como método de optimización de tiempos de render estaría bien explicado si seguimos tu ejemplo. Imaginemos por un momento que deseamos hacer una animación donde la cámara rote con respecto a un punto que sería la locomotora; típico movimiento girando alrededor del objeto para mostrar lo chulo que nos ha quedado.

Con Occlusion Map, simplemente lanzariamos un render del mapa de oclusión y se lo aplicaríamos como 'Multiply' a la capa de color del shader en un programa como Photoshop por ejemplo, de modo que la imagen que tenga aplicada la locomotora o el objeto sea el color + occlusion map, de este modo, simplemente renderizando en modo 'simple', sin iluminación global ni nada por el estilo, tendríamos toda la animación con una apariencia, y totalmente real, de iluminación global.

No sé si me he explicado bien, en caso de no ser así, trataría de hacer un ejemplo y detallarlo.

Saludos.

P.D.

Josep, has conseguido sacarme del exilio. :lol:
Avatar de Usuario
Victor
 
Mensajes: 818
Registrado: Vie Oct 24, 2003 11:15 am
Ubicación: Barcelona

Notapor Josep » Jue Abr 13, 2006 4:18 pm

Este Víctor... :wink:

Dale caña...! Ahora te toca a tí... en otro post... que debería llamarse algo así como: GI (iluminación global) en la simulación ferroviaria virtual... :lol:

Saludos!.

Josep
Última edición por Josep el Jue Abr 13, 2006 4:29 pm, editado 1 vez en total
Josep
grupo TrenSim
 
Mensajes: 1571
Registrado: Mié Sep 10, 2003 2:47 pm
Ubicación: Vic (Barcelona)

Notapor Victor » Jue Abr 13, 2006 4:28 pm

¡¡Hecho!!

Este finde me pongo.

Un saludo.
Avatar de Usuario
Victor
 
Mensajes: 818
Registrado: Vie Oct 24, 2003 11:15 am
Ubicación: Barcelona

Siguiente

Volver a Foro de diseñadores

¿Quién está conectado?

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