Representación de caracteres, con miembros cortados (modelos Blender en Java / OpenGL)

10

¿Qué aspectos debo tener en cuenta para crear animación de personajes y clases de renderizado si quiero poder tener miembros desmontables? He desarrollado un sistema corporal detallado que puede tener todo definido hasta el sistema nervioso. Apunto a algo similar al nivel de detalle de daño encontrado en Dwarf Fortress. Por ejemplo, cuando un personaje sufre daño en la parte superior del brazo, existe la posibilidad de daño nervioso que puede desactivar todo el brazo. O podrían perder el brazo por completo.

Tengo un sistema escrito para manejar la parte de datos de esto. Cada personaje tiene un tronco, que tiene apéndices y partes internas. Cada apéndice también puede tener apéndices secundarios y partes internas. Los apéndices secundarios se deshabilitan / eliminan si un apéndice primario se deshabilita / elimina. Si alguno de los apéndices desactivados / eliminados o partes internas se requieren de por vida, el personaje pronto morirá.

En lo que estoy trabajando ahora es en la parte de dibujo / animación de esto. ¿Cómo defino animaciones para saber cuáles están permitidas dado el estado actual del cuerpo (faltan brazos / piernas, etc.)? ¿Cómo configuro el sistema de dibujo para no dibujar extremidades faltantes? ¿Cada miembro / apéndice debe ser su propio modelo (me gustaría dibujar apéndices cortados en el suelo)?

El sistema simple del que estoy haciendo la transición (lo acabo de escribir para probar) importa todos los cuadros clave de una animación como modelos completos en un VBO (junto con los recuentos de vértices para donde los cuadros clave comienzan / se detienen). No importa ni utiliza los huesos definidos en Blender, y no interpola entre fotogramas.

Esta es probablemente una pregunta bastante grande, por lo que también estoy buscando recursos que me lleven a donde necesito ir.

EDITAR

Pregunto sobre la animación sabiendo qué miembros está animando porque me gustaría configurarlo para realizar una animación alternativa si falta un miembro requerido. Después de pensar en eso, imagino que realizaría esa verificación antes de activar una animación, y activaría la animación apropiada en ese momento.

MichaelHouse
fuente

Respuestas:

7

Actualmente estoy trabajando en un sistema similar. Animación procesal + desmembramiento etc.

¿Cómo defino animaciones para saber cuáles están permitidas para dar el estado actual del cuerpo (faltan brazos / piernas, etc.)?

No sigo exactamente esto, si las extremidades no están allí, entonces a quién le importa si está siendo animado o no, porque no se puede ver.

¿Cada miembro / apéndice debe ser su propio modelo (me gustaría dibujar apéndices cortados en el suelo)?

Los construyo dinámicamente usando pesos de hueso de vértice. La calidad es probablemente un poco más baja que hacer cada miembro a mano, pero es menos esfuerzo una vez que lo he hecho una vez, porque luego puedo aplicarlo a cada modelo.

Con el enfoque sensato de la siguiente sección, sí, cada miembro tendría su propio modelo.

Probablemente tendría un modelo completo a mano de toda la entidad, y cada una de las extremidades cortadas.

¿Cómo configuro el sistema de dibujo para no dibujar extremidades faltantes?

Dos opciones principales, la forma más simple es simplemente dibujar las extremidades por separado, y donde las extremidades se unen tienen caras adicionales que normalmente están ocultas con texturas de "carne cruda" que se verán cuando se retiren las extremidades.

La segunda opción es hacerlo dinámicamente sobre la marcha, esto solo funcionará con modelos relativamente simples. El enfoque es tomar el modelo base y encontrar los vértices que se pesan en la extremidad que desea desmembrar. Elimina esos vértices y observa a qué se conectan para que conozcas la sección abierta. Luego se cierra dinámicamente sobre la sección abierta con triángulos con una textura de "carne cruda". Desde la perspectiva de un desarrollador de software sensato, este enfoque no es bueno (deformación del modelo de tiempo de ejecución) y tiene características de rendimiento menos "planas", pero me gusta un poco.

Si bien el primer método generará muchas más llamadas de extracción, también es un poco más accesible.

Personalmente, voy con el segundo, con relativo éxito, pero todos mis modelos tienen muy poca poli, por lo que es posible cortar dinámicamente un modelo y volver a cargar el VBO dentro del marco por ahora.

No importa ni utiliza los huesos definidos en Blender, y no interpola entre fotogramas.

Esto hace que sea realmente difícil hacer el desmembramiento de una manera procesal, porque ¿cómo sabes qué vértices pertenecen a qué articulación? El desmembramiento y el peso de los huesos del vértex van de la mano tan bien que te sugiero que reconsideres esta parte.

También te sugiero que inviertas en interpolación. Sin ella, no puedes acelerar / ralentizar tus animaciones, y estás junto con la velocidad de fotogramas. Esto significa que podrá obtener menos de sus animaciones. por ejemplo, no puede ralentizar la animación de la caminata cuando alguien se detiene, etc.

Miguel
fuente
Gracias @Michael. Mencioné la interpolación y la importación de huesos porque sé que los necesitaré eventualmente, pero todavía no los tengo. Por lo que has dicho, parece que sabré qué hacer una vez que llegue a ese punto. Probablemente asociaría un apéndice o grupo de apéndices con un hueso. Haré una pregunta por separado sobre la importación de huesos.
MichaelHouse
Como está trabajando en algo similar, ¿quizás tenga más información sobre esta pregunta relacionada? gamedev.stackexchange.com/q/20931/7191
MichaelHouse
5

Su mejor opción es cortar las extremidades y usar múltiples submodelos dependiendo del estado actual de las heridas. Su enfoque de usar un VBO por fotograma clave es excesivo; use un sistema de animación esquelética y reproduzca diferentes animaciones dependiendo del daño recibido (cojeando con una pierna, gateando sin las dos piernas, etc.).

Valve publicó un buen conjunto de diapositivas sobre las heridas y el desmembramiento en L4D2. Me gusta mucho el enfoque de usar un modelo para los órganos y huesos, y recortar el modelo de "piel" basado en proyecciones de textura de cortes, disparos, etc.

r2d2rigo
fuente
Interesante. Esas diapositivas se ven bien. Esto parece funcionar para daños que no afectaron un apéndice completo.
MichaelHouse