Houdini Ocean Toolkit para Maya

Houdini Ocean Toolkit para Maya es una implementación de Houdini Ocean Toolkit ,desarrollado por Drew Whitehouse basándose en un algoritmo descrito por Jerry Tessendorf  en unas notas para un curso de Siggraph’2004 .

 En esta versión para Maya contamos con un deformer que se encargará de modificar la superficie que vayamos a utilizar a modo de océano y también un shader para mental ray que nos permitirá aplicar las propiedades del deformer como desplazamiento, lo cual resulta de gran ayuda a la hora de aplicar los efectos del deformer de HOT a grandes superficies sin necesidad de modificar la misma por completo.

HOT for Maya se puede descargar directamente desde la web de Nico Rehberg, responsable de esta compilación y que actualmente es compatible con Maya desde la versión 8.5 hasta 2012 x64. El enlace directo para la descarga de HOT es el siguiente:  http://www.gruppe-weimar.de/nico/hotTool/hotOcean_Maya.rar

Instalación

Dentro de la distribución preparada por Nico Rehberg se pueden encontrar varios ficheros de texto con algunas claves para el funcionamiento e instalación de este deformer/shader por lo que encuentro redundante describir dicho proceso en este artículo, que por otro lado resulta de lo más sencillo. Para el deformer, implementado en forma de plugin para Maya, basta con copiar los ficheros correspondientes tal y como el autor explica en el fichero de instalación:

Copy the .mll to your maya/bin/plugins folder
and copy the libfftw3f-3.dll from ../dlls/ to your maya/bin folder.

En el caso del shader para Mental Ray, el proceso es similar y simplemente consiste en copiar los ficheros .dll y .mi en la ruta donde hayamos especificado que se copiaran los custom shaders de MR:

Mental Ray needs to find the shader dll and mi under its MI_CUSTOM_SHADER_PATH environment variable.
Additionally you need your /mentalray/lib folder and the libfftw3f-3.dll from ../dlls/ in your PATH variable.

To do this copy the shader .dll and .mi to a folder where you keep your custom shaders, i.e. e:/mrshader/32

En cualquier caso y ante la duda, tanto en la carpeta del deformer como en la del shader para Mental Ray se pueden encontrar sendos ficheros readme.txt que explican detalladamente el proceso de instalación de los dos componentes. Una vez copiados estos componentes en las rutas correspondientes, bastará con arrancar Maya y desde el plugin manager activar el deformer, etiquetado como hotOceanDeformer.

 Deformer y ajustes

(Fig.1) Aplicamos el deformer a nuestro plano

Una vez instalados y activados los componentes de Houdini Ocean Toolkit en Maya, bastará con crear una superficie (ej. un plano) y aplicarle el deformer (Fig.1) usando el siguiente comando en la consola MEL:

deformer -type hotOceanDeformer;

 Hecho lo anterior, a nuestro plano (u otra superficie) se le aplicará el deformer, lo cual podremos comprobar en el viewport a través de la ligera deformación que nos mostrarán los parámetros por defecto.

 Una vez hecho lo anterior es conveniente crear algunos keyframes en el atributo time del nodo hotOceanDeformer para conseguir que nuestra superficie esté animada en función del tiempo. O bien podemos usar una expresión simple para relacionar el atributo time del deformer con el nodo time de Maya.

(Fig.2) Creamos una expresión en Time

  Para ello simplemente elegimos la opción Create new expression… en el atributo time (Fig.2) del deformer y creamos dicha expresión, similar a la siguiente:

hotOceanDeformer1.time = time*2

 Con esto ya podremos ver nuestro nuevo deformer animado en función del tiempo. Obviamente el multiplicador (*2) que he usado en este caso va a gusto del consumidor.

  En caso de que vayamos a usar como motor de render a Mental Ray, podemos combinar el deformer con el shader para ese motor y que nos permitirá aplicar el resultado de hotOceanDeformer en forma de desplazamiento, lo cual resulta un método mucho más recomendable a la hora de tratar con grandes superficies como sería el caso de una vista aérea para un trozo de océano, por ejemplo. En el siguiente punto nos ocuparemos de este particular; pero antes resulta más conveniente echar un vistazo a las propiedades que nos permite ajustar hotOceanDeformer, ya que son exactamente las mismas que encontraremos en el shader para Mental Ray.

 En la documentación de Houdini Ocean Deformer podemos ver una descripción más o menos detallada de cada uno de estos parámetros:

For a deeper understaning of the parameters see the Tessendorf notes.

  • Ocean Resolution – This is the resolution of the grid that the ocean will be simulated on. You can think of it in the same way as you would a texture image that you would tile the ocean surface with. The resolution of the image would be 2 to the power of res so e.g. res=10 would make a 1024×1024 image. Be warned, going to res=11 means you are going to use quite a bit of memory since the code uses more arrays of this size to store intermediate computations.
  • Ocean Size – The grid mentiond above is computed for and applied to the input geometry in tiles of this size.
  • Wind Speed – Affects the shape of the waves
  • Wind Direction – Affects the direction the waves travel in.
  • Shortest Wavelength – Waves below this lenght will be filterd out.
  • Approximate Waveheight – This is used to set the so called “A” fiddle factor in the Tessendorf paper. The waves are scaled so that they will be roughly less than this height (strictly so for the t=0 timestep).
  • Seed – Seeds the random number generator.
  • Chop – Toggles the application of chop.
  • Choppyness – The amount of chop displacenemnt that is applied to the input points.
  • Damp reflections – In a “fully developed” ocean you will have waves travelling in both the forward and backwards directions. This parameter damps out the negative direcion waves.
  • Wind Alignment – Controls how closely the waves travel in the direction of the wind.
  • Ocean Depth – Affects the spectrum of waves generated. Visually in doesn’t seem to have that great an influence.
  • Time – The time that the surface will be evaluated at. You will usually just plug the expression $T in here.

(Fig.3) Ajustando propiedades

Poco más se puede añadir a dicha descripción más que algún ejemplo y la advertencia de tener algo de cuidado con el valor del parámetro Resolution (lo que he marcado en rojo). Jugando con los distintos parámetros correspondientes a la resolución, Ocean Size, Wave Height o Global Scale, podremos obtener superficies que simularan toda clase de planos cercanos o lejanos de un océano en movimiento. Todo consiste en experimentar y ajustar los parámetros del deformer de acuerdo con nuestras necesidades (Fig.3).

 En caso de que estemos trabajando con motores de render como Maya Software o VRay, solo nos quedará crear un material con el que simular el agua y si fuese necesario, alguna clase de partículas para simular la espuma producida por las olas, algo que intentaré explicar más adelante.

En caso de que vayamos a trabajar con Mental Ray, tal y como he mencionado con anterioridad, tendremos la opción de combinar el deformer con un shader para usar como desplazamiento.

Shader para Mental Ray

(Fig.4) Shader Mental Ray

  Como ya hemos mencionado con anterioridad, Houdini Ocean Toolkit para Maya está formado por dos componentes individuales: un deformer capaz de modificar una superficie usando el algoritmo de Tessendorf y también un shader (Fig.4) para Mental Ray cuya misión es la de aplicar dicha deformación en forma de desplazamiento, lo cual eleva enormemente el rendimiento de este método cuando tratamos con superficies grandes típicas en la simulación de un océano.

(Fig.5) Conexiones

 Para usar este shader basta con aplicarlo a modo de mapa de desplazamiento de Mental Ray y ajustar los parámetros de acuerdo con nuestras necesidades. Dado que no vamos a poder obtener ningún feedback visual si usamos solamente el shader, es conveniente combinarlo con el deformer de modo que éste actúe a modo de preview plane  (de un modo similar a como lo hace Maya ocean). Para ello bastará con conectar los atributos del deformer y el shader (Fig.5) para que el primero controle la apariencia de los dos o viceversa, pero teniendo siempre en cuenta que ya tenemos un nodo conectado a time, que es lo que nos permite animar nuestra superficie ondulada en función del tiempo y en este ejemplo.

(Fig.6) Deformer y shader en el viewport

 Una vez creadas las conexiones pertinentes entre el deformer y el shader -recordemos que cuentan con los mismos parámetros- , resulta sencillo comprobar su correcto funcionamiento creando un nuevo plano al que le aplicaremos el shader para Mental Ray que hemos conectado, atributo a atributo, al deformer (Fig.6).

 Como resultado de dicha operación y mediante un render rápido con Mental Ray podremos comprobar que efectivamente las propiedades de nuestro deformer se trasladan de forma exacta al plano con el shader en forma de desplazamiento (Fig.7).

(Fig.7) Render (izq)deformer – (der)shader

Una vez que hemos conseguido animar nuestras olas en función del tiempo y además tenemos esta suerte de “preview plane” a través de las conexiones entre el deformer y el shader para Mental Ray, procedemos a ocuparnos de los materiales que nos ayudarán a obtener un aspecto más cercano al que tendría una verdadera superficie acuática y que ya no formarían parte de las posibilidades que ofrece HOT, que como ya hemos mencionado en varias ocasiones a lo largo de este artículo, simplemente ofrece estos dos nodos (deformer/shader) para obtener superficies pobladas con olas de Tessendorf.

Shading y colores

 Dado que este último paso es una elección personal del artista y no pertenece al ámbito de Houdini Ocean Toolkit, poco más se puede decir más allá de incluir algún consejo a la hora de usar este método con según que materiales.

En primer lugar tenemos el más obvio de todos: el Ocean Shader que incluye Maya por defecto. Es perfectamente posible combinar HOT con este shader, aunque habría que tener en cuenta el nodo que estemos usando a la hora de realizar un pequeño ajuste en Ocean Shader: en caso de recurrir al método de desplazamiento para Mental Ray, conviene desconectar a su vez el nodo de desplazamiento que incluye Ocean Shader (Maya) por defecto. Por supuesto esto no está escrito en piedra y podría servir como base para obtener ciertos efectos interesantes.

 Otra opción muy interesante y rápida pasa por construir un shading network similar al que usa Nico Rehberg en los ejemplos de esta compilación para Maya, dando como resultado un aspecto muy realista para la superficie acuática que pretendemos simular y con tiempos de render muy rápidos.

Referencias,

«HoudiniOceanToolkit – Odwiki», s. f. http://odforce.net/wiki/index.php/HoudiniOceanToolkit.
«CGTalk – Houdini Ocean Toolkit for Maya», s. f. http://forums.cgsociety.org/showthread.php?t=859559.
«Nico Rehberg», s. f. http://www.nico-rehberg.de/shader.html.
«The Houdini Ocean Toolkit — Houdini Ocean Toolkit v1.0rc8 documentation», s. f. http://anusf.anu.edu.au/~drw900/houdini/ocean/docs/.
Copia local de la última versión disponible de HOT para Maya en Mayo/2012: http://ainekovfx.com/downloads/hotOcean_Maya.7z
0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *