Dummies

¿QUE ES UN NORMAL MAP?

Normal_good

Si nos guiamos “superficialmente” por lo que su nombre indica, responderiamos rápidamente:

ARTISTA 1: “Fácil! Mapa de normales!, Obvio.”

y este podria ser el razonamiento inicial:

ARTISTA 2: “Mapa: Claro si, se trata de una imagen bitmap… Normales: mmmm…. algo que tiene que ver con la geometría…”

¿Pero que es exactamente lo que significa y lo que hace un mapa de normales?

En esta respuesta es donde tenemos que entender muchos de los aspectos técnicos que nos ayudaran a evitar confundir y a tratar un “mapa de normales” como si fuera un mapa más de nuestra escena, pues no es un mapa del todo “normal”.

De nuevo, siendo superficiales nos adelantamos a responder…

ARTISTA 3: “si… dale, es un mapa que define detalles en una geometria”.

¿Pero como? ¿Como es que se define esa geometria?

Pues el truco esta en alterar la forma en que la luz afecta a la superficie de nuestro objeto 3D durante el proceso de rendering. Es muy importante entender esto ultimo: “durante el proceso de rendering” significa que realmente no tenemos información geométrica real en la mesh del objeto sino que la información se genera a nivel de shaders.

Tanto el shader realtime de nuestro viewport como nuestro engine de renderer predilecto van a usar la información bitmap contenida en el “mapa de normales” para alterar las normales de la superficie geométrica y hacer que la luz incida de modo que mágicamente aparezcan sombras que definen detalles.

Y hasta aqui bien, pero…. ¿Es igual que un bump map?

ARTISTA 4: “Si, es lo mismo creo, solo que los normal maps tienen colores raros. Son asi como violetas, de mal gusto. Es mas, una vez vi uno que era mas colorido aún, tipo arcoiris. Estos programadores no tienen ojo artistico!”.

Pues en realidad un “bump map” y un “normal map” son muy parecidos en su funcionamiento. Ambos trabajan a nivel de shader alterando la incidencia de la luz en la superficie para simular detalles geométricos inexistentes en la mesh del objeto 3D.

ARTISTA 4: “Si, exacto, son lo mismo pero mas lindos. Son asi como en blanco y negro, mucho mas bonitos.”

Pero en realidad es en ese “mal gusto” de colores esta la clave y diferencia fundamental entre ambos mapas.

Un “bump map” es en general una imagen grayscale limitada a 8-bits de información de color. Esta información de color, o mejor, gradaciones de grises, le dicen a nuestro shader si el pixel que esta renderizando esta hacia arriba o hacia abajo respecto a la superficie. Básicamente el efecto que produce es el de un bajo relieve.

En el caso de un “Normal Map” estamos ante un mapa con mucha mas información de color. Usa un formato RGB para contener la información que corresponde con las direcciones X, Y, Z en un espacio 3D. Con esta mayor información este mapa logra decirle al shader la dirección exacta en la que se desplaza la superficie. El efecto no es mas el de “bajo relieve” sino el de percibir detalles geométricos mas complejos.

¿COMO SE GENERAN LOS NORMAL MAPS?

En el caso de personajes 3D generados por fotogrametría con alrededor de diez millones de polígonos, la necesidad de reducir la mesh (decimation) a una con valores de densidad lógicos es fundamental. El mapa de normales cumple un rol clave para poder reproducir el nivel de detalle de la mesh original un una nueva low poly, de manera que podamos manipular estos objetos con facilidad y poblar una escena con cientos o miles de ellos.

ZBrush_Low

El Mapa de Normales se genera a partir de la proyección o “bake” de información geométrica 3D de una mesh con alta densidad de polígonos en otra de baja resolución, usualmente llamada “Low poly”. La forma en que esta proyección se realiza es definida por nuestro mapa de UVs donde hemos hecho el desplegado o unwrap del modelo low poly.

Debajo vemos un ejemplo de un mapa y su Layout UV con un detalle de un seam o “costura”:

UVs_Normal

Sin extendernos más en detalles es importante conocer que es un Normal Map y cual es el proceso de generación del mismo para poder entender el origen de artefactos y errores visibles en nuestros modelos una vez renderizados.

A continuación veremos como solventarlos autonomamente sin recurrir a las creencias populares del tipo:

ARTISTA 5: “ahh, si, eso pasa siempre con los modelos low poly, ponle un turbosmooth y listo!”

ARTISTA 6: “si, lo hice pero no funciona! Me parece que los materiales estan mal hechos!”

ARTISTA 7: “probaste esta plugin SuperNormalRepair? Me parece que es la solución!”

ARTISTA 8: “Nahh, eso es una tontera. Leí por ahí que hay que invertir el canal Y del mapa….”

ERRORES COMUNES

Ejemplificaremos los efectos al aplicar incorrectamente los mapas de normales mostrando algunas imágenes de un personaje 3D de AXYZ design con aproximadamente unos 40k polys.

¿CORRECCION GAMMA? NO POR FAVOR!

El gamma en un Mapa de Normales debe ser siempre 1.0. Alterando este valor estamos modificando la luminancia de la imagen. Esto conlleva a una alteración de los valores de dirección de las normales, que interpretados por el shader, crea un efecto típico de “corte”.

En realidad esos cortes están relacionados directamente con los seams o lineas de costura del mapa UV utilizado por el modelo.

Wrong-Gamma

SOLUCION: Asegurarse que el Gamma del bitmap este siempre en 1.0 utilizando en “Override” en el caso de 3ds Max.

gamma1.0

CANAL RGB VERDE INVERTIDO

Este problema es muy frecuente y esta relacionado a como nuestro software 3D interpreta la direccion “Y” del canal verde del Mapa de Normales. El canal verde indica “abajo – arriba”.

Normal_inverted green

SOLUCION: Invertir el canal verde del Mapa de Normales utilizando en “Flip Green (Y)” en los parametros del Normal Bump del 3ds Max o simplemente en Photoshop seleccionando el canal verde y presionando CTRL+I.

flipgreen

Standard Render

Vray_Normals

V-Ray Render

Octane_Normals

Octane Render

Arnold_Normals

Arnold Render

green_PS

Photoshop

NORMAL MAP UTILIZADO COMO UN BUMP STANDARD

Normal_Como Bump

SOLUCION: Asegurarse que el Mapa de Normales esta siendo utilizado como tal y no como un bump map standard. Para ello utilizar en “Normal Bump” map disponible para tu engine de rendering.


NORMAL MAP PEQUEÑO Y COMPRIMIDO EN JPG

Muchas veces los artistas alteran tamaños y formatos de los ficheros de texturas para optimizar el uso de memoria.
En principio la idea es correcta pero tenemos que tener en cuenta dos cosas:

En primer lugar, existe la convicción que usando .jpg u otro formato con compresión estemos ahorrando RAM de video y CPU. Sin embargo una vez que los ficheros están abiertos en memoria lo que realmente cuenta es el tamaño real de la imagen en pixels.
Los formatos de compresión Standard sirven solo para ahorro de espacio de almacenamiento.

En segundo lugar, comprimiendo un Mapa de Normales con .jpg crearíamos artefactos de compresión que luego se ven claramente en el output final de nuestro render.

Jpg_Normal

SOLUCION: Reducir el tamaño  de la imagen en pixels sin usar formatos de compresion. Lo ideal es .png si queremos también ahorar espacio en disco.


Normal_FinalRender