16 de noviembre de 2009

Turkeys and Chickens...feather simulations with max hair system.

First of all, as always at the end of the post Spanish readers can find the translated version.
Lo primero de todo, como siempre al final del post se encuentra la versión traducida para lectores españoles.

A few days ago there was an entry in the news of “maxunderground.com”  speaking about a feather simulator for XSI, it was curious to me that was necessary to develop a simulator for feathers specifically, it was a curios thing until I began to do some feather in max, a feather simulator can be very useful, specially if the main character of our production is going to be a chicken full of feathers, but we can achieve similar results using the tools that we have within max.

To show you the result I did a video.

Aand here you have the link to download the scene of this video.

What we need to do is not very complicated, as a good friend of me says...let's go through the parts...
Before we start you must know that i configured the hair base geometry as non rendeable, so you will see the feathers in the render but not the geometry that contains the feathers.
Also you will need the feather texture, it is based in a reference photo I found in http://www.cgtextures.com, but I modified it to create an alpha channel.

Here you have, click on it to get the full sized PNG.

1.- The first thing that we need to do is to decide how is going to be our feather, we are going to use it as an instance for the hair so we want it as low poly as we can, also we want it to be rigid, so the less polygons thing will help us here.
In the scene you have three feathers, the first and the second are very similar, the only thing that change between them is that one of them is bended and it have the mapping modified to use the transparency, the second is a slim box, you can use a plane, I did not used it because I prefer to work with the double side for myself.

2.- The second step is to assign the feather as an instance element, you need to know that the pivot orientation is important, and also the object orientation in the world, you wont get the same result with the object oriented in one way or another.

3.- Third step, adjust the hair modifier configuration, here I had a few options, I could use interpolations or not, if I had not used interpolation the feathers would have been much more orderly, too much orderly, also if you don't use this option you will get a feather for every normal of every triangle, so the quantity of feathers will be defined with the number of polygons in our base geometry (the “Hair Count” parameter will work more like a limit than the actual number of hairs/feathers).
I don't want the hair(the feathers) too much flexible so I used only one segment, but I'm not sure that this means any difference when we work with geometry instances.
I gave some randomness in the scale to have feathers of different sizes from the start, also after that, when you stylize the feathers, you can modify the scale specifically.
We work with geometry instances, so the most important parameter is “Root Thick”, normally we use it to define the thick of the root of our hair, for the tip we use “Tip Thick” (This is obvious, but I specify it for Spanish readers), but in this case this one has no effect over our feathers.
With “Root Thick” we define the thickness of the geometry instances.
With the rest of the variation parameters we put all at 0, the “Frizz”, the “Kink” and the “Multistrand”.

At last, in the effect configuration I used “mr prim” with a voxel resolution of 3.
In the rollout “mr parameters” in the modifier I put an Arch&Design material, it was the material I had applied to the original geometry.
The hair modifier instances the material automatically but the result using “geometry” or “mr prim” is not the same, also mental ray gave me some errors in some buckets if I didn't use this system.

4.- The fourth step is the stylize our hair, you need to know that the hair physics in max are not very complex, it is to define how rigid must be the hair and what objects are used to collide, also the physics sometimes are very erratic, you need to try to get a logic orientation between the feathers and the character, in the scene case I did not used more feathers near the neck because they get an strange orientation, to fix this we have two solutions, the first of these solutions is to treat the neck feathers with an additional geometry  that can gave me more control over the orientation of the feathers, the second solutions is to work more the style of the hair so you can fix every guide to get the feathers as you want.
I'm not using feathers near the neck to avoid the mess it can be for this post, it is an example.

To stylize the hair what I did with this simple character is to be in a top view and use the tool “Recomb”, with this I comb all the hairs downwards with only a move, later I raise the roots and the tips with the tools “Puff Roots” and “Stand” to avoid intersection between feathers.
Remember that his is a hair simulator so it is not too serious if the hairs are entangled, but we are doing feathers so wee need to avoid it as much as we can, so what we do is to try the best styling and when we do the simulation we will gave the feathers some stiffness to achieve the sensation that the feathers are anchored to the skin, and they move with the wind, but they are not entangled like the hairs.

5.- This is the shortest step at all, you need to do some animation to test the physics results later, so we can see how the feathers are going to react with the movement, also I used a wind to see how are going to react the feathers with it.

6.- The sixth and last step is to configure the simulation, for this we are going to use the world's oldest system, test/error.
Personally, the hair physics simulations is a bit weird to me, normally to simulate long hairs I'm used to use some geometry as a hair base and cloth simulation to calculate it's movement, in this case we cannot do this, so what we have to do is what follows.
In the rollout “Dynamics” activate the option “Live”, now if you hit play in max you will see how the feathers are reacting with the simulation in real time and you can play with the simulation settings and test your own settings.
I modified only the “Stiffness” value, I used 0,78, but you can need a different value, it depends on your scene units, feathers size, etc...
As I said...test/error.
In the end put the dynamics type in “Precomputed” and define a folder for the simulation files, now you can simulate the frames that you need in your animation, this will avoid strange results in render time, also one thing more, I did not use any kind of render time motion blur with this because I found that some feathers get some strange rotation between frames, in the ticks, as I said the hair simulation it's a bit weird.

After the 325 frames of my test, here you have the result, I really like the way the feathers react with the wind, in the end of the video.

I hope you like this post.

Thanks for reading and commenting.


Juan Gea.

--------------VERSION EN ESPAÑOL-------------SPANISH VERSION--------------

Pollos y pollastres...plumas en max con simulación de pelo.

Hace poco salio una noticia en “maxunderground.com” hablando de un simulador de plumas para XSI, me resulto curioso que fuera necesario desarrollar un simulador específicamente de plumas, me resulto curioso hasta que me puse a crear plumas en max, realmente un simulador de plumas puede ser algo muy útil, sobre todo si vamos basar toda una producción en un pollo lleno de plumas, pero podemos llegar a resultados muy parecidos, utilizando las herramientas que tenemos directamente en max.

Para mostraros el resultado he realizado un video de muestra.

Pongo la escena de este video para que la descargueis.

Lo que hay que hacer no es muy complicado, como dice un buen amigo mio, vamos por partes...

Antes de empezar debéis saber que he configurado la geometría base del pelo como no rendeable, así que veréis las plumas en el render pero no la geometría que contiene las plumas.
Tambien necesitareis la textura de la pluma, esta basada en una foto de referencia que encontré en http://www.cgtextures.com, la modifique para añadirle el canal alfa.

Aqui teneis la imagen, haced click en ella para descargar el png a tamaño completo.

1.- Lo primero que tenemos que hacer es decidir como va a ser nuestra pluma, la vamos a utilizar como instancia del pelo, por tanto querremos que tenga pocos polígonos, ademas queremos que sea un tanto rígida, así que lo de los pocos polígonos nos puede ayudar bastante.
En la escena tenéis tres plumas, la primera y la segunda son muy parecidas, lo único que cambia es que una de ellas esta curvada y tiene el mapping corregido para utilizar también la transparencia, la segunda es una caja muy fina, podéis utilizar un plano, yo no lo he usado por que prefiero trabajar yo con la doble cara antes de que lo haga el max por si mismo, soy un poco maniático.

2.- El segundo paso es asignar la pluma como elemento de instancia, tener en cuenta que la orientación del pivote importa, y también importa la orientación del objecto en el mundo, no conseguirás el mismo resultado con el objecto orientado de una manera que de otra.

3.- Tercer paso, ajustar la configuración del pelo, tenia varias opciones, podía utilizar interpolación o no utilizarla, si no hubiese utilizado la interpolación las plumas habrían quedado muchísimo mas ordenadas, demasiado ordenadas, ademas si no utilizas esta opción se coloca una pluma por cada normal de cada triangulo, por lo que la cantidad de plumas dependerá de la cantidad de polígonos que tenga la geometría de base(el parámetro “Hair Count” actuara mas como un límite que como el numero de pelos/plumas).
Como no quería que fuera muy flexible el pelo (las plumas) le puse solamente un segmento, aunque no estoy seguro de que esto signifique alguna diferencia cuando trabajamos con instancias de geometría.
Le di algo de aleatoriedad en la escala para tener plumas de distintos tamaños de partida, ademas de esto posteriormente al peinar las plumas se pueden modificar los tamaños.
Trabajamos con instancias de geometría, así que el parámetro mas importante es “Root Thick”, normalmente lo utilizamos para definir el grosor de la raíz del pelo, para la punta utilizamos “Tip Thick”, pero en este caso este ultimo no tiene ningún efecto.
Con “Root Thick” definimos el grosor de las instancias de la geometría.
En cuanto al resto de parámetros de variaciones los deje todos a 0, tanto el “Frizz”, como el “Kink” y el “Mutistrand”.
Por ultimo, en la configuración del efecto utilice “mr prim” con una resolución de voxel de 3.
Y en desplegable “mr parameters” del modificador le puse un material arch&design que era el que tenia aplicada la geometría original.
Aunque el lo instancia automáticamente el resultado utilizando “geometría” y “mr prim” no es el mismo, ademas de que mental ray daba algunos errores en algunos buckets si no utilizaba este sistema.

4.- El cuarto paso es peinar nuestro pelo, tened en cuenta que las físicas del pelo de max no son demasiado complejas, vienen a decirnos lo rígido o poco rígido que tiene que ser el pelo y con que objetos colisionan, no siempre funcionan bien ademas, así que procurar peinar las plumas de manera que queden con una orientación lógica con respecto al personaje, en el caso del personaje de la escena no le puse mas plumas cerca del cuello por que cogían una orientación extraña, para corregir eso habríamos tenido dos soluciones, la primera de ellas es tratar las plumas mas cercanas al cuellos con una geometría de base distinta, en la que controláramos por separado los polígonos y ademas en la que nos resultase mas sencillo peinar las plumas del cuello, la otra solución habría sido trabajar mas el peinado del cuello peinando y orientando cada una de las guiás que no tuviera la orientación que buscábamos.
Para no liar demasiado este post me decante simplemente por simplificar el ejemplo.

Para peinar el pelo lo que yo he hecho, al tratarse de un personaje sencillo, es colocarme en una vista superior y después utilizar la herramienta “Recomb”, con esto peino todos los pelos hacia abajo de un solo golpe, después con las herramientas de “Puff Roots” y “Stand” levanto tanto las raíces como las puntas del pelo para que las plumas no se atraviesen.
Recordad siempre que esto es un simulador de pelo, por lo que no es demasiado grave que los pelos se “enreden”, pero al estar haciendo plumas eso tenemos que intentar evitarlo, así que lo que hacemos es peinar para que quede lo mejor posible y al simular darle algo de rigidez a las plumas para que de la sensación de que están ancladas a la carne, oscilan y se mueven con el viento pero no se atraviesan ni se lían como los pelos.

5.- Este es el paso mas cortito, simplemente haced una animación para que después podamos comprobar como reaccionan nuestras plumas al movimiento, yo ademas he colocado un viento para así poder ver también como reaccionan las plumas ante el.

6.- El sexto y ultimo paso es configurar la simulación, para esto utilizamos el sistema mas antiguo del mundo, prueba error.
Personalmente la simulación de físicas del pelo me parece bastante mala, normalmente para simular melenas suelo utilizar geometría como base para el pelo y simulación de telas para calcular su movimiento, en este caso no podemos hacer eso, así que se trata de poner, en la pestaña “Dynamics”, la simulación en modo “Live”, darle a play en el max y ver como reaccionan las plumas con la configuración que tenemos ahora.
Al final yo me decante por modificar solo el “Stiffness” y ponerlo a 0.78, pero cada uno de vosotros puede necesitar un valor distinto.
Como ya he dicho...prueba y error.
Por último en lo relativo a la simulación colocad el tipo de dinámicas en “Precomputed”, definid un directorio y simulad los frames que necesitéis para vuestra animación, esto evitara resultados extraños e inesperados en el momento del render, por cierto os desaconsejo encarecidamente la utilización del motion blur en render, a mi me han salido algunas plumas con rotaciones extrañas en los ticks, como ya he dicho la simulación del pelo no es demasiado buena.

Y por fin, después del render de los 325 frames de mi prueba aquí tenéis el resultado, me gusta especialmente como reaccionan las plumas con el viento, al final del video.

Espero que os guste y os sea util.

Gracias por leer y comentar!

Juan Gea.

16 comentarios:

  1. Estoy flipando con el movimiento de las plumas... Por lo menos he visto el vídeo 5 veces!

    GENIAL =)

  2. i liked your solution a lot, it´s very interesting.
    thanks for the explanation and i´ll look into your attached file !


  3. Thanks to both of you Renato and Izmihich.

    Keep loking, i'm planning to post frequently.



  4. actually - the way orientation works is based one the direction your hair sticks out from the skin. So if your hairs are brushed in a direction they will all orient like you'd expect, if they're just sticking straight out (which is the default growth) directions will not look right, because they cannot pick a direction.

    if you have any brushing at all though, they will orient to the surface correctly (for feathers).

    brush your guides in the direction you want the feathers to flow - hit the comb tool, then fluff them out with 'stand on end'. basically the same process as fur.

    great tutorial though

    - joe alter

  5. un tuto grandioso, hoy he aprendio algo nuevo :), mis felicitaciones, te quedó genial, muy suave al viento.
    me pregunto como hiciste que el viento proyectara fuerza al cabo de un rato ??
    saludos, Angel

  6. Thanks for your clarification Joe.

    Yes, i've done a bit brushing with the tools you say, it is the only way to have the feathers correctly oriented, but i found really difficult to orient the feathers in the top of the sphere, some of them where a bit erratic, maybe i can post a picture in the next post.

    Gracias Angel, todos los comentarios me animan a seguir publicando mas estudios de este tipo.

    Juan Gea.

  7. if they have some direction combed in the guides - orientation should be pretty consistent with that .. go ahead and send me an image

  8. Thank you for this very clean and simple tutorial.
    However, when i try this myself and select mr.prim to render i get the geometry rendered without any map = white planes/meshes, no feathers no alpha
    When i switch to geometry in the hair render engine it renders fine (but slower).

    Any ideas what im doing wrong ?

    Kind regards.

  9. In the parameters picture you can see that inside the mr parameters rollout i've activated the "Apply mr Shader" checkbox, i applied here the material, if you do this you'll get the material in the mr prims.

    Check it in the example scene.

    Cheers and thanks for reading.

    Juan Gea.

  10. Hey Juan, fantástico tutorial, acabo de descubrir tu blog y te aseguro que ya está entre mis favoritos...¡y encima en español!

    Me he bajado la escena pero no la puedo abrir porque me dice el max (2009) que faltan unas dlls, prosound y storageandfilter...¿alguna idea?

  11. No se si viste el ultimo post Frank, las escenas estan preparadas para max2010 en adelante, es con el max que trabajo todos los dias, el 2009 ya no lo tengo instalado siquiera, lo siento.
    Me alegro de que te guste, a ver si tengo tiempo para publicar la segunda parte del tutorial de pelo y alguna cosa mas, que ya va siendo hora.

  12. I can't open the files :(
    i use 3DS Max 2009... can u help me, please?!

  13. Hola Bone Studio!!
    Que impresionante tutorial!

    Tengo una gran consulta. Yo estoy trabajando usualmente con 3ds max, pero en el trabajo me piden usar maya. Como podria trabajar este sistema en maya? Se me esta complicando muchisimo y la verdad me urge trabajar un sistema de plums como este en maya :(!


  14. Hola Andrés.

    Me alegro de que te guste, este post y tutorial ya son algo antiguos, pero como el hair de max no ha cambiado sigue sirviendo igual.

    En cuanto a Maya, realmente no tengo experiencia con nHair como para poder ayudarte, sé que se puede hacer, pero no puedo guiarte por que aunque utilizo maya en mi dia a dia, no he necesitado tocar el sistema de simulación de pelos.

    En cualquier caso en youtube seguro que podrás encontrar algo, y de todas maneras estas mismas guias deberian servirte para nHair, solo tienes que seguir algun tutorial de como funciona ese sistema de pelo y despues aplicar lo que aquí cuento a ese sistema, espero que tengas suerte!

    Un saludo.

    P.D.: por cierto, si finalmente tienes muchos problemas se que existen plugins para maya especificos para simular plumas, miralo en google por que son especificos para eso.