Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Avances En El Motor (md5)

Iniciado por BeRSeRKeR, 09 de Enero de 2005, 02:23:19 PM

« anterior - próximo »

BeRSeRKeR

 Por fin tenemos ya cosas visibles con los MD5 utilizando animación esquelética (por supuesto). :)

Video (188KB)

En este video se ha desactivado la iluminación para que se vea todo más claro pero hay que decir que al hacer el skinning se realiza la transformación tanto de las coordenadas del vértice como las normales y las tangentes.

El siguiente paso a dar será implementar la interpolación entre sets de animación y el soporte para varios canales de animación. Explico cada cosa porque tal vez  a alguien le pueda resultar interesante.

El tema de la interpolación entre animaciones es por ejemplo realizar la transición entre la animación de andar a correr de forma suave, sin cambios bruscos.

El otro punto es uno de los más importantes y el que le ahorrará al animador tener que crear más de un animación. Consiste en tener varios canales de animación. Cada uno de estos canales tendrá asignado una lista de bones y a cada uno de estos canales se les podrá asignar una animación de forma independiente. Así, podríamos tener el canal "cabeza" y "torso" reproduciendo la animación "disparar" mientras que el canal "piernas" reproduce la animación "correr". Como es de imaginar esto nos permite realizar un montón de combinaciones sin necesidad de explotar al animador. :lol:

La otra cuestión que hay pendiende es realizar el skinning a través de un vertex shader. El problema es que los MD5 pueden llegar a soportar más de 4 pesos. Yo he llegado a ver hasta 8 pesos por vértice. La solución podría ser reducir su número a 4 como máximo pero me temo que esto causará una deformación incorrecta en el mesh. Todo dependerá de si por ejemplo los 8 pesos estaban repartidos por igual o la contribución de algunos de ellos era insignificante...

Y nada más, ya iré informando con los avances que vaya realizando sobre estos temas.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Lord Trancos 2

 Mola, mola  (ole)

A ver si para la version 2 del motor ya tengo una grafica decente y puedo hacer algun juegecillo con él.  (genial)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

donald

 
Muy interesante y mu potente.   (uoh)

Lo de los 4 bones es algo a lo qu emuchos estamos ya acostumbrados.

Así que tpoco es tanto problema. Unreal 2003 sólo permitçía inicializar physique con 3, y además en rigid (lo que no quiere decir qeu no pudieras poner pesos...una movida de terminología que se me escapa)


O sea, si es verdad que en zonas como caderas, entrepierna, hombros, alguna más, hacen inexcusablemente falta 3, y en algún caso 4, pero se puede vivir sin 5, o más.

Tal vez puedas..."redondear". pero claramente con un thresold no muy bestia. Por ejemplo, que redondee los pesos 0,0001 y cosas así, que eso no es el grafo que lo haya querido poner así, sino seguramente, un marrón en el proceso de rigging.

Lo normal que ponga el grafo son pesos como de 0.2, 0,8, 0,05 en ciertos casos...etc..alguna vez uno muy bajo, pero algo de más de 3 ceros empieza a oler a gato encerrado ;)

Lo más efectivo de todo...o sea, lo que menos sorpresitas y quejas del grafo va a provocar es... un maxscript que permita limitar sin exportar esto a 4 bones (y si más adelante surge la necesidad, tal vez puedas inlcuir otra cosa que evite petes en el engine) , o sea, que asesine los pesos fantasma, que se dan mucho sin la voluntad del grafo. Esto hará que si un bone/biped bone estaba puteando, y al redondearlo, el grafo podrá darse cuen de que al eliminar aquél, como resulktado otro tira demasiado, dando un marrón de deformación excesiva: entonces lo corregirá a mano. Así se asegurará de que lo que él saque, será muy muy parecido o igual a lo que se veanm en el engine.

Si eso es muy complicado...bueno, pues simplemente haz lo del redondeo al importar. Es más, no sé si igual ya hay un script para esto en scriptspot.com.

pero que muchos engines no pillan más de 4 bones, en muchos casos tb por ir con no se qué limitaciones de opengl, dx o las tarjetas.

De hecho, yo tiendo a usar el menor número posible, pq hace bastante tiempo se me dijo que lo limitara, pq le suma mucho calculo a la tarjeta.

Tiene genial pinta el tema.


mis 2 trillones de céntimos de euro.



Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

donald

 " o sea, que asesine los pesos fantasma"

y tal vez reparta ese 5º peso(o la suma de los demás bones que se hayan ido de madre con un peso mínimo, o simplemente menor que los 4 primeros (para los que no sepan que hay que limitarse a 4)) entre los 4 primero que tengan mayor influencia.

No sé si me explico. Y tpoco sé si lo que te sugiero es una brutalidad de trabajo, o un remedio interesante, pq no soy programador. Yo sólo digo lo que se me ocurre así de golpe ;)

Evidentemente, 8 bones, para el grafo, es mejor, en el sentido de que 0 limites siempre es mejor, pero...si el costo va a ser una sacudida en el rendimiento, y mucha incompatiblidad con tarjetas, equipos etc...no merece la pena, sobre todo pq habitualmente, es cuestión de 3 o 4 bones...cierto es que con alguno más puedes hacer sutilezas muy curiosas. Hmmm...tal vez ..sí, en animación facial quizás sea interesante, pero por ejemplo, recuerdo haber hecho algo de eso con 3 o 4 bones y quedaba bien, pq al hacerlos hijos de la cabeza, no hacía falta que el bone de cabeza tb influyera, lo repartía entre los de las expresiones. Y ya digo, solían ser dos, 3, o como mucho, 4. Ahora, que si se pueden poner 8, de escándalol!




Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

BeRSeRKeR

 Gracias por los consejos donald.

Lo de reducir los pesos a 4 es precisamente para poder realizar el skinning por hardware (es una limitación que existe). En caso de hacer esa reducción, debería encontrarse los 4 pesos más influyentes y repartir proporcionalmente el resto de los pesos entre esos 4. Pero me temo que no va a ser posible. Por ejemplo aquí pongo la lista de pesos para un vértice:

0.1569510102
0.1897923201
0.1000000015
0.2393546104
0.1569510102
0.1569510102

es decir que  todos influyen de una manera más o menos proporcional por lo que reducir en ese caso a 4 pesos casi seguro que afectaría a la deformación de la malla. De todas formas todo sería pedirle al grafista que se limite a 4 pesos, pero de momento lo hacemos por software por lo que no hay limitación pero aún así, lo ideal sería hacerlo por hardware ya que nos evitaría tener que bloquear el vertex buffer del mesh en cada frame para transformar los vértices, con la consiguiente ganancia en rendimiento.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

donald

 hazlo por hardware, tengo entendido que por software es extremadamente lento.

Y piensa en varios personajes a la vez, y en alta...buf...nada, en serio, por hardware. Lo de los 4 bones, sencillamente es como van muchos engines y queda perfecto, si el grafo sabe.

"De todas formas todo sería pedirle al grafista que se limite a 4 pesos"

Exacto. Yo contaba con eso: el grafista ya de por sí sabe que se tiene que limitar a 4, y creeme que no es complicado, sabes perfectamente que tu hombro está teniendo influencia en determinado vértice de la clavícula, el hueso del hombro, parte de la espina dorsal o el bone que uses en ese área... siendo una de las partes más complicadas, ya ves, 3... cuando te acercas en la zona de la clavícula, al cuello,....vale, influye la clavícula, en algun caso algo el cuello, y algo  el último hueso "spine"...

en la enterpierna, igual las dos piernas y pelvis ...algun vértice en las caderas , o en los glúteos pueden necesitar 4...pero que es cuestión de saber hacerlo, y eso, el grafista , sabrá.

Pero es que...te decía lo de "matar" las referencias con pesos muy bajos pq...a menudo, los sistemas de pesado de dtos paquetes, pueden como error,o por un intento automático de normalizar...generar un ínfimo peso en otro bone...o quedarse perdido una influencia del root...pq no se asigne toda la fuerza (hasta 1.0) , o pq estos programas, tras mucho guarrear, a veces se hacen un lío un poco. Por eso siempre viene bien cierto checking, en el exportador, o como un maxscript "de limpiado", de manera que no haya sorpresas, y por ejemplo tu plugin muestre el modelo con un pesado dto, pq elimine uno bueno y deje uno que influenciaba poco , y por error...


este tipo de marrones nunca tienen un peso grande...ya digo, unas milésimas, o cosas así....tb puede haber un despiste del grafista pero...que no se despiste...XD

Vaya, a golpe de pesos normalizados (yo trabajo con lasso a nivel de vértice, como decía no uso envelopes...uso mirro de pesos siempre que puedo, para reducir el tiempo de esta tarea )  , y con la cantidad de "trial y error" que se hace, es dificil que simplemente le asigne 20% de un bone, y 60 del otro....así los pesos que se escapen, serán de eso, de 0,0001, etc...a Blender le pasaba algo parecido en el exporter x, al menos en fase de betatesting-privado.
Exportaba el x, pero...aunque los pesos iban bien en blender, algunos se quedaban sin peso, por un problema de precisión en decimales, o algo.  pasaba con el pintado de pesos, tb existente en Max, con el skin modifier. Aunque yo prefiero mi lazo.

Con cierto exporter gratuito de x de Truespace, pasaba mucho.

Vaya, que marrones de estos, son frecuentes, tb en max....y pueden , y vuelven loco a más de uno.
Así que planteate la posibilidad de eliminar un peso si es de algo así como 0,0001(a mano, al grafista se le escaparán muchos,aunque se ponga a limpiarlo...y el que peses sólo con envelopes/pintado, ni te cuen...) o algo así pq eso no se nota, realmente....no afecta , casi. Será un error...cierto es que a veces se persigue un efecto con un valor muy bajo: en las caderas, en los glúteos, para determinadas torsiones en la cintura, yo a veces uso un peso de 0.1....pero a lo menos que creo haber llegado es a 0.01...

lo que sea ya 0.001 , o 0.0001...sobre todo, éste último...suele ser marroncillo...

yo creo que...bueno...una utilidad ideal, sería la que permitiera pasarselo a todos los bones, menos a los que el grafo descartara,(uno suele saber en que zonas hay detalles muy sutiles a conservar, pero ya digo, 0.01...tal vez sea lo mínimo habitual...) y  luego a exportar. La verdad, es que si eliminara por error los pesos de 0.1, 0.2, 0.04... sería una putada. Yo los uso muy a menudo

pero esto es una utilidad genérica, que es posible que ya un usuarioya lo haya hecho en modo de maxscript, así que no he dicho nada, que añadiendo trabajo extra soy único...XD


Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

donald

 No es por meterme con nadie, pero...

"0.1569510102
0.1897923201
0.1000000015
0.2393546104
0.1569510102
0.1569510102"

creo que ahí hay demasiados pesos...

la mayor parte de las torsiones, y articualciones, suelen requerir 2 , o 3....

por ejemplo: el codo-->2.  Rodilla--->2 (alguna vez 3. Sobre todo si no lo he modelado inteligentemente, jeje(pero esto, a la altura del muslo, que diga) ) ...tobillo-->2 ...

El hombro, no. El hombro es una pasada, pero más de cuatro me parecería un disparate, incluso ahí.

Y...por lo que llevo visto, parece que el menor numero de bones por vértice, es menos calculo para la máquina.

No es que no sea más chulo y potente n bones, pero...digo que se puede pesar así, perfectamente, y de hecho, se hace.
Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

BeRSeRKeR

 Eso lo he sacado de uno de los modelos de Doom3 así que habría que pedirles exlicaciones a ellos :D.

De todas formas para ellos no parece ser un problema porque me da que también realizan el skinning por software. Habrá que hacer pruebas y ver el rendimiento con unas cuantas decenas de modelos en escena y ver qué tal va. Tal vez no sea tanto problema aunque evidentemente siempre iría mejor si se realizara en la GPU.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

donald

 me creerías si te dijera que me lo temía?

de hecho, lo pensé justo al darle al botón de responder..pq era el Imp que usabais...supongo.

sin duda que estarán bien puestos...tb uno se hace viejo con las viejas limitaciones... igual ya da lo mismo.Si permites más bones, más facil para los grafistas.


La verdad, no sé. Igual hay algoe scrito por gamedev, flipcode o sitios así. No sé lo que estará a la orden del día, en esto.

Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

BeRSeRKeR

 Bueno, la cosa va avanzando. Ya tengo los resultados de las primeras pruebas de los canales de animación.

Descargar video (630 KB)

A la izquierda podéis ver el imp sólo con la animación "idle", en el centro sólo con la animación "walk" y a la derecha el resultado de aplicar la animación "idle" al canal "torso" y la animación "walk" al canal "piernas".

Ahora tengo que pulir el código y hacerlo más funcional y finalmente implementar la interpolación entre animaciones. ¡A ver si para el final de la semana puedo tenerlo todo hecho!.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

BeRSeRKeR

 Viendo el video, un amigo me ha hecho ver que hay una falta de sincronización entre el mesh y el esqueleto (las líneas amarillas). Sólo aclarar que el problema está al capturar el video porque en lo que es la aplicación en tiempo real no ocurre. Sólo aclarar eso, por si alguien se estaba preguntando si era un error en la animación.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

donald

 juer...que potencia.

esto es un "poquito" mejor que los quake3 tags... ;) XD

si, eso me ha pasado haciendo screecap con el camstudio, alguna vez que otra, a mi tb...
Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

BeRSeRKeR

 Bueno pues vuelvo a escribir el mensaje que había escrito esta mañana porque también ha desaparecido por arte de magia. :lol:

Los canales de animación y la mezcla entre sets de animación ya casi están terminados a falta de solucionar unos problemillas. He creado un pequeño video donde podéis ver el resultado.

Descargar video

Como podéis ver, el modelo pasa por las animaciones idle->walk->run->walk->idle. Entre cada uno de esos sets de animación se han especificado 6 frames de interpolación, es decir que teniendo en cuenta que las animaciones van a 24fps, la transición dura 0.25 sg.

Cuando solucione los problemas que mencionaba tendré que implementar los modificadores de transformación que servirán por ejemplo para cosas tan básicas como mover el modelo y otras no tan básicas como implementar IK. De esta forma se podrá hacer que si se le dispara a un modelo en la mano, ésta transmitirá el impulso producido por el disparo a toda la cadena de bones. Esto tardará en llegar porque entre otras cosas aún no hemos desarrollado el motor de física. :)

También se implementará lo que en Doom3 se conoce como frame commands. Son ni más ni menos que eventos que se disparan cuando se alcanza un frame determinado. Por ejemplo imaginad que el frame 23 de una de las animaciones coincide con que el personaje pisa el suelo. En ese caso se aplicará un evento a dicho frame que reproducirá el sonido de un paso. Muy útil. :)

Stay tuned!.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

donald

  (genial)  (genial)  (genial)  
Me paso por aquí de cuando en cuando (1 vez cada 3 o 4 meses) ...así que si no respondo a algo no es por antipático. ;) Posteo, y me acuerdo del foro tres meses después... ;)    :-S

Lord Trancos 2

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






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.