Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cabello Y/o Tela

Iniciado por Lord Trancos 2, 10 de Enero de 2006, 12:09:16 AM

« anterior - próximo »

Lord Trancos 2

 Estoy intentando implementar la tipica solución "springs-and-balls" para que mis personajillos 3D tengan melenas que se muevan dinamicamente, al mas puro estilo "anuncio de champu". Casi todas las implementaciones con las que me he tropezado son para "telas" o "cuerdas", pero mi interes se centra sobretodo para hacer cabello que se mueva de forma dinamica.

Mi intencion es que en los vertices mas cercanos a la cabellera (la raiz), se muevan menos y las puntas del pelo sean mas livianas. Imagino que eso podre conseguirlo asignando diferentes masas a los vertices que forman la malla, pero lo que no tengo nada claro es como mantener hasta cierto punto la forma del cabello y que no se espachurre todo como si de un pañuelo se tratara. ¿alguna idea/pista de como lograr esto?  :rolleyes:

pd: tambien tengo muchos problemas para ajustar los parametros de la "tela" sin que se vaya todo el sistema a tomar gargaras... ¿algun truco para saber que valores usar?  (nooo)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Elvis Enmanuel

 Para conseguir un sistema estable irremediablemente tienes que usar la integración de verlet,
es imposible que se vaya a hacer gárgaras.

A mi me queda tal que asín:





Haddd

 Que interesante...¿puedes hablar un poco más sobre el tema?

Elvis Enmanuel

 
CitarQue interesante...¿puedes hablar un poco más sobre el tema?
Haddd: No se si te refieres a mi, pero por si acaso...

Lo que hago es exportar una serie de mechones de pelo desde el MAX (texturizados) junto con el modelo, es decir que no es necesario crear el pelo aparte y luego añadirlo, además es válido para ropa y puede hacerlo el propio grafista.

Los mechones están linkados al bone de la cabeza del biped y obviamente hay algunos vértices fijos.

Los springs añaden automáticamente al cargar el modelo en el motor y son los ejes de las caras que componen cada mechón de pelo (evitando springs duplicadas). Las partículas las saco de los vértices.

Además es necesario definir unas esferas de colisión para evitar que el pelo atraviese la cara del modelo. Se puede hacer con cualquier tipo de geometría, incluso con un modelo de baja, pero la esfera me parece la más rápida para hacer ese tipo de comprobaciones.

El mayor problema fue que inicialmente usé colisiones de partícula (vértice) - esfera, con lo que el polígono a veces (bueno, casi siempre) atravesaba la esfera.

Finalmente tuve que calcular la intersección triangulo-esfera, que es más costosa, pero el resultado es perfecto.

Para los parámetros de la simulación física tuve que ir probando hasta que quedase lo más real posible, ya que con algunos valores (para damping, gravedad, timeStep) el pelo parecía que estaba bajo el agua :)

No tengo en cuenta la inter-colisión entre mechones ya que para simular pelo no veo necesario implementarlo (además de chupar CPU que lo flipas).

Además a la hora de pintado hay que hacer una ordenación con un revisited-radix sobre la z ya que la textura contiene alpha.

A ver si saco tiempo y subo un tutorialcillo a mi web.

ains.

Lord Trancos 2

 Gracias! Es justo lo que quiero hacer. Estaria genial lo de ese tutorial. (ole)

Voy a investigar sobre eso de "integración de verlet" a ver si saco algo en claro. :D
Aunque la ultima vez ya tuve empacho de .pdfs y no saque nada. (nooo)

Muy chulas las imagenes que has puesto de ejemplo. Segun entiendo por lo que has dicho, tienes una serie de vertices fijos y los otros sueltos, no? Osea, como el tipico ejemplo de la tela sujeta por 2 extremos, no? Consigues que el cabello tenga forma solo con los vertices fijos? La ultima vez que estuve investigando solo encontre un .pdf en el que se comentaba de pasada que las fuerzas de deformacion debian de ser proporcionales al angulo de los 2 springs... (mejor pongo una afoto...)

on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Elvis Enmanuel

 Ay, pues ni idea de lo del ángulo. Yo hago una simulación de springs de toda la vida:

(Partícula fija) masa = 0 + (Partícula libre) masa = 1;
(Partícula libre) masa = 0.5 + (Partícula libre) masa = 0.5;
(Partícula fija) + (Partícula fija)  // no se contempla

...y teniendo en cuenta que la elongación no supere la distancia original entre los 2 puntos del eje para que no parezca de goma :|

La foto parece la típica de la simulación que hacen los de nVidia (la de la sirena) y también usan verlet, es decir, se calcula la física para 1 pelo con varias particulas (como la de la foto) hallan el spline en base a los puntos y basándose en la normal de la cara de la cuál sale el pelo generan el resto (1024 pelos más dependiendo de la calidad). La pega de esto es que se hace pelo por pelo y a pesar de hacerlo en la GPU no creo que vaya muy fluido en un juego en tiempo real :(

Yo lo implementé después de leerme este artículo, que viene hoy en codepixel casualmente. Es el que mejor lo explica.

http://www.gamasutra.com/resource_guide/20...acobson_pfv.htm

ains.

Lord Trancos 2

 Gracias por la explicacion y por el link. Ya ire comentando mis avances :)
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

tamat

 Yo creo que una de las claves es usar springs invisibles, que unan cosas que en la realidad no estan unidas. Por ejemplo si el tio tiene melena pues un spring que una los ombros con la punta del pelo. O tener puntos invisibles que coordinen el movimiento de varios y trabajar sobre el movimiento de esos.
Por un stratos menos tenso

Elvis Enmanuel

 jur, jur

Acabo de subir a la web el video de la simulación de pelo:

http://www.gamedusa.com/dev

(Pinchando sobre el menú de la derecha en projects + dolphincs suite)

A veces se estira demasiado pero es debido a que mientras que la animación de los bones está basada en tiempo,
la simulación la hago por cada frame y como el vídeo está capturado con el fraps bajan bastante los FPS (<60),
con lo que varía mucho la posición de cada partícula de un fotograma a otro y se estira + de la cuenta (TODO).

ains.

Haddd

 Fantástico  (genial)  

Elvis Enmanuel

 ains, que me pongo colorao...
y ya que estamos: vuestro motor si que es fantástico.

Haddd

 Pues podrías integrar el pelo en el motor  ;)  

Elvis Enmanuel

 Es que a mi el C# no me va mucho y hace tiempo que jure odio eterno a las directX...
Aún tengo que pulir un poco más el sistema, que no está acabado ni mucho menos.

De todas formas como estoy suministrando mi página de tutoriales y todo eso intentaré hacer un paper to bonito y subir demo con código en cuanto pueda.

ains.

Lord Trancos 2

 Muy prometedor el video. (ole)

Anoche me lei el paper que pusiste y esta muy bien. Al igual que cuando implemente Colth usando integracion euler, me ha sorprendido lo aparentemente sencillo que debe de ser implementar eso (Verlet). Gracias de nuevo.  :lol:
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Elvis Enmanuel

 colorao++;

Sip, es bastante sencillote, de todas formas si lo tienes hecho con euler, sólo se trata de cambiar una línea.
Al principio pensé en hacer una función donde pudieses elegir el tipo de integración. Pero después de ver
como quedaba la de verlet, pasé olímpicamente de las otras.

Además puedes añadir partículas, sólido-rigido, y ragdolls con la mísma clase. Parece diseñado específicamente
para videojuegos.

En este artículo http://www.gamedev.net/reference/programmi...erlet/page3.asp
te viene como dejarlo más "físicamente correcto". (sólo es añadir una variable k guarde el time-step anterior, no es más).

Suerte.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.