Friday, March 8, 2013

3Delight for Maya | Bake texture


Para poder 'bakear' a textura informacion de occlusion o diffuse environment solo tenemos que conectar este valor a traves de un "dummy" donde podamos ejecutar "bake()" y la mejor forma de hacerlo es usando un renderman code node...





Primero, la escena de este ejercicio es muy simple (y la pueden bajar de aqui). Bueno, el rendermanCode node va a servir para especificar la ruta donde queremos guardar el archivo. En hypershade, creamos uno de estos nodos (Create > General Utilities > Renderman Code).

En shading parameters pegamos esto:

varying color i_color
uniform string shape
uniform float enable

output varying color o_color

Y en shading code:


extern float s;
extern float t;

o_color = i_color;
if (enable == 1)
 bake( concat(shape,"&binary"), s, t, i_color );

En el campo shape, vamos a escribir la ruta donde queremos guardar el archivo. Enable sirve para activar o desactivar la escritura del mapa.

El occlusion vamos a sacarlo usando un nodo de mental ray (mental ray textures -> mib_amb_occlusion). En samples, usamos 64 o 128 y conectamos mib_amb_occlusion1.outValue a la entrada del renderman code (i_color):





El renderman code se conecta a la entrada de color del material asignado al plano (lambert2.color). Lo unico que estamos haciendo con esto es visualizar el resultado y ejecutando bake(), asi que este nodo puede conectarse a cualquier parte del lambert (ambient, diffuse, etc). No olviden activar la escritura (Enable = 1)


Una vez que renderamos esto, vamos a tener un archivo binario en la ruta que hayan especificado en el rendemanCode node. Para poder utilizar este archivo, es necesario generar una textura, asi que utilizamos la terminal o command line y utilizamos tdlmake:



tdlmake -progress -bakeres 2048 -preview 1 -byte your_BAKE_file.bake   your_TIF_file.tif


-bakeres sirve para especificar la resolucion de salida
-byte es para que el resultado sea de 8 bits (si omitimos este parametro, seria de 32 bits).

La documentacion de tdlmake la pueden ver en este link.





Una vez que tenemos el archivo tif de salida, lo podemos ver:






Y si pueden ver, tenemos algunos artefactos en la imagen. Esto porque la textura no se calcula donde no hay geometria (3delight entre otros elimina geometria que no vamos a ver). Asi que en maya, seleccionamos el plano y agregamos un delightGeoAttribs node (3Delight > assignment panel > click en el checker al lado de Attribs). Boton derecho sobre Add/Remove Attributes y seleccionamos Cull Hidden Surfaces y Cull Backfacing Surfaces. Una vez que las tenemos en la lista, las desactivamos:






Y rendereamos de nuevo la escena. Despues, generamos la textura usando tdlmake nuevamente y la textura final es:



Y si cargamos esta textura en el color usando un file de maya:





Para que esto funcione, los objetos que se van a bakear necesitan tener buenos UVs (non overlapping). Finalmente, no olviden desactivar el nodo para bakear mapas si no lo van a utilizar.

La escena final pueden bajarla de aqui.

5 comments:

frantejo said...

exelente tutorial edgar, funciona perfecto, muchas gracias

Edgar Piña said...

como nota, el shader que se usa para occlusion es mib_amb_occlusion (y no mib_fast_occlusion).

;)

elvis said...

Thank You! Nice tut.

mazsari.sz said...

Hi!

This tutorial very useful but this language very diffucult for me.
I'm so happy if you could post
in english. Of coures not problem
for you.
Thanks.

Edgar Piña said...

Yeah, I try to write as much english as I can.. :/ I've finally published the translation on this one.