J'ai cette obsession de faire des animations de personnages en temps réel basées sur la cinématique inverse et les cibles morphologiques.
J'ai fait un bon bout de chemin avec Animata, un programme d'animation de type chaîne IK à code source ouvert (basé sur FLTK, malheureusement). J'ai même porté leur code de rendu sur une variété de plateformes (Java / Processing et iPhone). alt video http://ats.vimeo.com/612/732/61273232_100.jpg vidéo des moteurs de rendu Animata
Cependant, je n'ai jamais été convaincu que leur code soit particulièrement optimisé et il semble qu'il faille beaucoup de simulation sur le CPU pour rendre chaque image, ce qui me semble un peu inutile.
Je suis en train de lancer un projet de création d'une application pour l'iPad qui repose en grande partie sur l'animation de personnages en temps réel, et en feuilletant la documentation iOS, j'ai découvert un extrait de code pour un "two bone skinning shader".
// A vertex shader that efficiently implements two bone skinning.
attribute vec4 a_position;
attribute float a_joint1, a_joint2;
attribute float a_weight1, a_weight2;
uniform mat4 u_skinningMatrix[JOINT_COUNT];
uniform mat4 u_modelViewProjectionMatrix;
void main(void)
{
vec4 p0 = u_skinningMatrix[int(a_joint1)] * a_position;
vec4 p1 = u_skinningMatrix[int(a_joint2)] * a_position;
vec4 p = p0 * a_weight1 + p1 * a_weight2;
gl_Position = u_modelViewProjectionMatrix * p;
}
Quelqu'un sait-il comment utiliser un tel extrait ? Il est présenté avec très peu de contexte. Je pense que c'est ce que je dois faire pour réaliser l'animation osseuse de la chaîne IK que je veux faire, mais sur le GPU.