Animación esquelética eficiente

11

Estoy buscando adoptar un formato de animación esquelética ( como se indica aquí ) para un juego de estrategia en tiempo real. La representación individual de cada modelo en pantalla será pequeña, ¡pero habrá muchos!

En la animación esquelética, por ejemplo, archivos MD5, cada vértice individual se puede unir a un número arbitrario de articulaciones.

¿Cómo puedes apoyar esto eficientemente mientras haces la interpolación en GLSL? ¿O hacen los motores su animación en la CPU?

¿O los motores establecen límites arbitrarios en las uniones máximas por vértice e invocan multiplicaciones de nop para aquellas uniones que no usan el número máximo?

¿Hay juegos que usan animación esquelética en un entorno similar a RTS, lo que demuestra que en las tarjetas gráficas integradas no tengo nada de qué preocuparme en la ruta de los huesos?

Será
fuente
+1, esta es una buena pregunta. Siempre me he preguntado si la animación debería hacerse en lenguaje de sombreado o en la CPU ...
James
Los juegos RTS que usan el motor SAGE de EA (C&C 3 y posterior, serie BFME) usan animación esquelética, pero sus vértices están unidos a un solo hueso (al menos en BFME)
Bart van Heukelom

Respuestas:

6

Limitar el número de influencias óseas es común, sí. Puede influir en las influencias no utilizadas de peso 0 o tener un mecanismo de bucle / salida anticipada para omitir.

En cuanto a si funciona para un RTS, no tengo una referencia para usted, pero imagino que necesitará LOD si trabaja con una gran cantidad de caracteres en la pantalla, y también si esos caracteres son pequeños.

LODing caracteres esqueléticos es muy similar a LODing cualquier otra cosa, excepto que probablemente querrás LOD las influencias óseas y el esqueleto, así como la malla.

Por ejemplo, un nivel de detalle bajo es posible que solo use un solo hueso con la mayor influencia por vértice (también conocido como "pelado duro").

Probablemente también limitarías la cantidad de huesos en el esqueleto para un modelo con bajo nivel de detalle.

Finalmente, considere si alguna vez necesita representar los personajes de cerca. Probablemente solo desee modelar, aplicar piel y animar a los personajes para la distancia de visión más cercana ... ciertamente no desea almacenar todos los datos de tiempo de ejecución a una resolución mucho más alta de lo que jamás renderizará. Puede descubrir que simplemente no necesita más que un esqueleto muy básico y un par de influencias por vértice para su situación.

JasonD
fuente
Esperaba que alguien dijera "realmente no quieres huesos para torretas en un rts si tus piezas son pequeñas; considera MD3 con su función de modelos vinculados en su lugar" o algo así
Will
Bueno, no usaría el desollado para ese tipo de mallas en ese tipo de situación, pero los "huesos" son solo un nombre elegante para las transformaciones jerárquicas. Nada te impide simplemente unir mallas a ellos en lugar de ponderar los vértices. (en otras palabras, para una torreta, es posible que solo tenga dos huesos y dos mallas, y sin desollar / pesar en absoluto).
JasonD
2

No creo que la animación esquelética sea buena para un juego de estrategia en tiempo real, la animación esquelética requerirá un proceso adicional para todos los personajes, mientras que la animación de fotogramas clave consume más memoria, pero usará lo mismo para muchos personajes, también un juego rts requiere pequeñas animaciones por personaje.

James
fuente