lunes, 15 de febrero de 2010

Corrección de Gamma


Sabiendo un poco del tema "Corrección de Gamma" decidí hacer algunos renders de prueba.
Una definición muy rápida de qué es la "Corrección de Gamma" puede ser la siguiente:
"Es el ajuste de medios tonos para que las imágenes generadas digitalmente logren la apariencia más cercana a la manera que el ojo percibe la realidad".
Pensemos que mayormente usamos imágenes de 8 bits por canal, en el caso de una imagen con alpha la suma de todo los canales nos daría 32 bits ya que son 8 bits para R, 8 para G, 8 para B y 8 para el canal Alpha. Teniendo así 256 colores en cada canal y por lo tanto un total de 4294967296 colores.

El calculo que se hace es el siguiente:


El 2 es por basarse en un sistema binario.

En la realidad podemos encontrar muchísimos más color o medios tonos pero no somos capaces de percibirlos linealmente ( presentados todos juntos). Con la computadora pasa lo mismo, si tenemos una imagen de 8 bits vamos a tener 256 valores de grises. La computadora puede generar más pero no los puede almacenar en un archivo de 8 bits.
Lo que nos ayuda la "Corrección de Gamma" es a definir la curva de interpolación entre los medios tonos. Esta puede ser lineal o no, es como manejar las curavas (o levels) en photoshop.
La siguiente imagen muestra la escala de grises del editor de colores del 3ds Max, en un caso usando Gamma 1.0 (por defecto) y en el segundo caso usando gamma 2.2

Se observa que la gamma 2.2 tiene más valores luminosos que la 1.0


El objetivo del post no es explicar en profundidad qué es la corrección de gamma, sino mostrar unos ejemplos y demostrar su utilidad.
Para más información sobre "Color Depth" (imágenes de 8bits, 16 bits....) y "Corrección de Gamma" recomiendo el libro "VRay. The Complete Guide" es una excelente guía sobre gráficos por computadora.


¿Entonces cómo configuramos el 3ds Max para aplicar corrección de gamma?

1_ Click en el menú "Rendering"
2_Click en "Gamma/LUT Setup"
3_ En el cuadrante "Display" activar haciendo click en el circulito gris "Gamma" y poner el valor en este caso 2.2
4_ Es muy importante activar las opciones de "Materiales and Colors" ya que sino se verán algunos colores de una manera diferente en el material editor de como se obtienen en el render.
5_ Click en Ok para finalizar

Pd: en algunas versiones de Max es necesario reiniciar el programa para que funcione la corrección de Gamma, en la versión 2010 no es necesario.

Entonces, he aquí las pruebas:

Ejemplo 1: Solamente luz directa en la escena


Gama 1.0


Gama 2.2


Ejemplo 2: Global Ilumination

Gama 1.0

Gama 2.2


Ejemplo 3: Final Gathering

Gama 1.0

Gama 2.2

Ejempo 4: Global Ilumination + Final Gather

Gama 1.0

Gama 2.2



Otros ejemplos:





Imagen 1.0 (desde render)

Intento de corrección de Gamma en PS (con una imagen de 8 bits)

Imagen 2.2 (desde render)

Conclusiones:


- La utilización de la "corrección de Gamma" es un parámetro importante a tener en cuenta a la hora de hacer renders.

Esta corrección puede ser posterior al render pero únicamente usando imágenes de 32 bits por canal (hdrs). Por ejemplo en imágenes de 8 bits la información necesaria para el tratamiento posterior no es almacenada.

- Sea posterior o anterior al render, es una herramienta que puede definir la calidad de los renders.

-Nos brinda imágenes más reales y evita los sombreados a negro, ya que por defecto en los softwares 3d el sombreado de los objetos (SHADING) suele ser negro.
Una técnica para emular este efecto es subir el ambient light, muchos juegos lo utilizan para dar el efecto de GI.

-Nos evita poner valores altos en los parámetros de las luces y los rebotes de GI.

-Este proceso se conoce en 3d como TONE MAPPING, COLOR MAPING ó EXPOSURE CONTROL, exactamente no son lo mismo pero apuntan al mismo concepto de manejo de grises y tonos.


Bueno eso fue todo y espero que haya sido útil.
Espero comentarios.
Salud Mortales!
Bondi.





martes, 9 de febrero de 2010

SPECULAR MAPS (+ BumpsMap)


Navegando algunos sitios descubrí la importancia del uso del "Specular Map" en modelos 3d ya sea para tiempo real o prerender. ¿Me preguntaba cómo se hacia?, buscando y probando encontré una forma de hacerlo desde photoshop partiendo de una foto que será utilizada para generar el "Difuse Map" y el "Bump Map" también. Hay herramientas como Crazybump o PixPlant que nos permiten realizar esta tarea con buenos resultados, sin embargo, requieren de la modificación de muchos parámetros. La ventaja de hacerlo en Photoshop ( a mi criterio) es la posibilidad de usar "Layers de ajustes" y tener el archivo en formato psd para su posterior retoque.

Mi primera impresión con estos programas fue que los resultados que lograba tenían demasiado detalles y erróneos en algunos casos, todo salía muy granulado y muy brilloso. Hasta ese momento no entendía el uso del "Specular Map" hasta que di en la tecla.
El "Specular Map" debe ser utilizado como complemento del "Bump Map", algunos detalles deben ser almacenados en el "Bump Map" y otros en el "Specular Map" para así tener un buen resultado final, sin excesos de información.


Acá se muestra los diferentes pasos por separados ( Difuso, Specular, Bump, y Completo):

Difuso


Bump

Specular


Difuso+Bump sin Specular


Completo (Dif+Norm+Spec)

Un buen ejemplo es agarrar la imagen sin "Specular" abrirla en PS y poner la que tiene el "Specular" y desactivar los layers y ver qué zonas son afectadas y de qué manera.

La idea de un buen "Bump Map" es que tenga los relieves que definan más los volúmenes generales y detalles medios, y dejar para los pequeños detalles un buen "Specular Map", además el "Specular Map" nos da la posibilidad de colorearlo y así generear más espacialidad, estás zonas resaltarán dándonos mayor sensación de volumen.


El siguiente ejemplo muestra dos "Bump Maps" el de arriba con menor cantidad de detalle permite una mejor lectura, limpia y no podemos decir que "tiene pocos detalles"


Es muy importante que la cantidad de detalle sea homogénea en el "Bump Map", ya que si observamos la guarda de abajo vemos que en la parta inferior hay más detalles y esto empieza a generar ruido visual, por eso es recomendable tener un "Bump Map" homogéneo en sus medios tonos (Levels).

HERRAMIENTAS:

Una gran herramienta para esto es el filtro de Photoshop "High Pass" que se encuentra en Filter\Others\. El efecto de este filtro es dejar nuestra imagen neutra de medios tonos.
Aquí vemos el ejemplo de cómo se procedió para generar los mapas para la imagen anterior:


Para el mapa "Difuso Map" se usó la foto con algunos retoques a gusto.
Para el "Bump Map" se usó el filtro "High Pass".
Y Para el "Specular Map" se transformó la imagen a blanco y negro y se le agregó un "layer de ajuste".

Para los siguientes renders se utilizó el mismo método en todo los materiales:






DX PREVIEW:

3D Studio nos permite tener una previsualización usando Direct X ( en tiempo real) es muy útil para poder ver rápidamente como va a quedar nuestro material:
La siguiente imagen muestra como está configurado el material que se usó para esta escena.


El detalle de que el "Specular Map" está aplicado al canal "Specular Level" es simplemente para poder colorearlo desde el parámetro Specular que se ve con el rectángulo amarillo en la parte superior del editor de materiales. Lo que hace el Specular level es indicarle que zonas brillan más que otras y el color specular le da el color. Si lo quisiéramos podríamos poner un mapa de color en el canal "Specular" para tener brillos especulares con diferentes colores según la zona del objeto.

Para poder activar rápidamente la vista DirectX accedemos al menú Views\Show materials in viewport as\ "HARDWARE DISPLAY"

Además para que funcione completamente debemos activar las mejoras en iluminación en viewport.
La imagen siguiente muestra como hacerlo:


Bueno eso fue parte de mi investigación sobre Specular Maps y espero que le sea útil a alguien, si alguien necesita ayuda no deje de contactarse conmigo al mail "bondigazer@gmail.com".
Gracias y espero seguir subiendo aportes.
Nicolás.

Aquí un link con la escena de ejemplo. Es necesario utilizar 3ds max 2010 usando DirectX para el render en viewport.




martes, 2 de febrero de 2010

lunes, 1 de febrero de 2010