Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Bones

Iniciado por Drácula, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Drácula

                                ¿Alguien puede explicarme cómo funcionan los bones?                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Gunder

                                Pues muy sencillo dracula,

un bone es un nodo que se encarga de mover ciertos vertices que tiene asignado segun un punto de pivote ( rotula ) y una rotacion definida por una matriz.

Si has usado animaciones por morphing como las del q1, q2 o parte del q3, te sera un poco difil de apreciar lo bueno de este sistema.

Si has usado animaciones asignando una matriz a cada nodo de tu modelo, ese nodo se puede interpretar como un hueso.

Si tu modelo es una malla completa, se tendran asignados ciertos vertices a cada nodo provocando una deformacion de la malla en tiempo real.

Lo bueno de animacion por bones esque la animacion es aplicable a varios modelos. Solo debes tener en cuenta los pivotes del modelo y recontruir la geometria del esqueleto en funcion de estos pivotes.

Ale.


                               
riticar, critica hasta el mas tonto.

Ithaqua

                                Por un lado tienes la malla (vértices) y por el otro lado los huesos que la van a deformar.

Cada hueso tiene una matriz, y cada vértice tiene asignados n huesos (por tanto, matrices), aunque generalmente 1 o 2.
Cada hueso asignado tiene un peso sobre ese vértice, y la suma de los pesos suele ser 1.0
La información de la malla, huesos, pesos etc la sueles conseguir de programas tipo 3dsmax, ejemplos: bones del max propiamente o character studio (physique).

La deformación se produce porque cada vértice no se transforma con una única matriz, como normalmente -matriz world-, sino que se transforma con las matrices de los bones asignados a él. El peso indica la cantidad de incidencia que tiene una matriz sobre un bone.
Un ejemplo sería un vértice v con 2 bones asignados y estos con respectivamente 0.3 y 0.7 de peso.

El pseudocódigo de las transformaciones podría ser:

for(vertices)
{
 vertice[n] = (0, 0, 0)
 for(bones)
 {
    vertice[n] += bone.matriz * verticeenlocalbone
 }
}

donde verticeenlocalbone son las coordenadas del vértice que procesamos en locales del bone. Esa información también nos la suelen dar.

Saludos.

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Emotion

                                Hola Dracula:

Lo que te ha dicho Gunder es totalmente correcto, si bien se puede ir un poco mas lejos, ya que puedes añadir, por ejemplo, seis floats a cada nodo para limitar la rotacion de cada punto un numero determinado de grados, de esa manera, por ejemplo, puedes simular de manera precisa el movimiento humano, o incluso simular cualquier clase de movimiento, ya que sabiendo no solamente la forma en que se mueve una criatura y sabiendo hasta donde mueve sus miembros, puedes reconstruir sus pautas de movimiento de forma bastante precisa.

No obstante, como ya he dicho, la explicacion de Gunder es, posiblemente, todo lo que necesitas para probar o empezar a hacer cosas con animacion por bones, aunque si quieres ir un poco mas lejos, habia por ahi (creo que era en uno de los articulos de Games Developer Magazine (www.gdmag.com)) un articulo escrito por Jeff Lander que explicaba muy bien como hacerlo de una manera muy completa.

No obstante, en la red hay un monton de tutoriales sobre animacion con bones, de todas formas yo te voy a dar un enlace que te puede servir mucho:

www.darwin3d.com/conf/igdn0398/index.htm Este es un articulo de Jeff Lander (esta en formato diapositiva) sobre lo que te he dicho antes
www.gdmag.com/code.htm esta es la seccion de descarga de archivos de GDMAG (Game Developer Magazine)

Espero que esto te sirva un poco de ayuda

Un Saludo

_________________
Julio Meca
ALPHA SOFTWARE

[ Este Mensaje fue editado por: Emotion el 2002-04-30 17:45 ]                                
G3: Get the Power!

cht

                                lo mas chungo de los bones es la cinemática inversa, que consiste en calcular la posición de los nodos intermedios conociendo la del final.
Si alguien quiere le puedo pasar una prueba de IK que hice y que funcionaba y todo, eso si, en 2D y en Delphi :sonriendo:                                

Ithaqua

                                Los bones y la cinemática inversa no tienen nada que ver.

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Emotion

                                Para cht:

Creo que te estas haciendo la picha un lio, porque, que yo sepa y hasta la fecha, 3 sistemas principales (no se si hay mas) para la animacion, que son:

1. Cinematica Directa
2. Cinematica Inversa
3. Bones

Bones y Cinematica Inversa NO son la misma cosa, asi que... que no! :sonriendo:

Saludos
                               
G3: Get the Power!

Ithaqua

                                No, a ver, tampoco es eso. El uno no excluye al otro.
Simplemente que usando bones puedes usar cinemática inversa para animarlos, o pasar de ella. Los bones son un sistema que actúa sobre la malla a nivel de vértice, las IK actúan sobre los nodos en una jerarquía -En este caso, los bones-.

                               
thaqua^Stravaganza
http://ithaqua.stravaganza.org

cht

                                bueno, yo es que no veo mucho sentido a los bones si no se usa IK, pero bueno, perdonad si os he ofendido :lengua:                                

Emotion

                                Pero imagina una secuencia de animacion independiente del juego en si, si tienes una estructura que pueda ir procesando el movimiento de tu personaje frame a frame o usando un diferencial de tiempo, entonces el IK no tiene porque serte de utilidad... al menos creo yo... puedo estar equivocado, eso si :sonriendo:                                
G3: Get the Power!






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.