Stop Motion avec des scripts Python
5 participants
- petitagore
Stop Motion avec des scripts Python
Mer 4 Jan - 11:38
Animation pas-à-pas avec des scripts Python, démonstration de faisabilité
L'animation pas-à-pas, c'est ce qu'en bon franglais on appelle du Stop Motion, et une démonstration de faisabilité, c'est ce que les cuistres appellent aujourd'hui une proof of concept -- mais moi je préfère en général parler français.
Et tout cela étant dit, je vais dans cette vidéo me contenter de laisser parler les images, d'une part parce que je veux pouvoir vous montrer ces merveilles là tout de suite sans attendre d'avoir pris le temps de vous concocter une de ces merveilles pédagogiques dont j'ai le secret, mais d'autre part parce que, en toute honnêteté, je n'ai pas encore une maîtrise complète de cette technique dont je suis pourtant le concepteur.
Je rencontre occasionnellement de petites difficultés que je ne comprends pas bien, et que je soupçonne liées à quelques bugs de Blender dans la gestion des parentés hiérarchiques.
Sur ces pantins, les mains ont pour parents les avant-bras, qui ont pour parents les bras, qui ont eux-mêmes pour parents le thorax, lequel quant à lui a pour parent la bouboule placée au niveau du nombril, etc... Ca me paraît tout à fait correct sur le plan logique, mais j'ai le sentiment que de temps en temps Blender se mélange les pinceaux entre les positionnements relatifs et absolus de ces sous-éléments, surtout lorsque l'on passe la structure hiérarchique d'un fichier de Blender à un autre, et il faut encore que je teste tout ça à fond.
N'empêche, même en se limitant à cet état de prototype, je trouve la technique prometteuse, et d'autant plus qu'à terme (c'est-à-dire quand j'aurai fini de déboguer) ce type d'animations devrait exiger très peu de travail. A ce stade du récit, je dois hélas confesser que c'est encore en partie une promesse électorale. Mais c'est quand même déjà assez mimi, non?
L'animation pas-à-pas, c'est ce qu'en bon franglais on appelle du Stop Motion, et une démonstration de faisabilité, c'est ce que les cuistres appellent aujourd'hui une proof of concept -- mais moi je préfère en général parler français.
Et tout cela étant dit, je vais dans cette vidéo me contenter de laisser parler les images, d'une part parce que je veux pouvoir vous montrer ces merveilles là tout de suite sans attendre d'avoir pris le temps de vous concocter une de ces merveilles pédagogiques dont j'ai le secret, mais d'autre part parce que, en toute honnêteté, je n'ai pas encore une maîtrise complète de cette technique dont je suis pourtant le concepteur.
Je rencontre occasionnellement de petites difficultés que je ne comprends pas bien, et que je soupçonne liées à quelques bugs de Blender dans la gestion des parentés hiérarchiques.
Sur ces pantins, les mains ont pour parents les avant-bras, qui ont pour parents les bras, qui ont eux-mêmes pour parents le thorax, lequel quant à lui a pour parent la bouboule placée au niveau du nombril, etc... Ca me paraît tout à fait correct sur le plan logique, mais j'ai le sentiment que de temps en temps Blender se mélange les pinceaux entre les positionnements relatifs et absolus de ces sous-éléments, surtout lorsque l'on passe la structure hiérarchique d'un fichier de Blender à un autre, et il faut encore que je teste tout ça à fond.
N'empêche, même en se limitant à cet état de prototype, je trouve la technique prometteuse, et d'autant plus qu'à terme (c'est-à-dire quand j'aurai fini de déboguer) ce type d'animations devrait exiger très peu de travail. A ce stade du récit, je dois hélas confesser que c'est encore en partie une promesse électorale. Mais c'est quand même déjà assez mimi, non?
Ciardo Biagio aime ce message
- Blender Moonboots
Re: Stop Motion avec des scripts Python
Mer 4 Jan - 13:39
Faudra que tu en dises plus car pour moi ce que tu fais reste mystérieux ^^ est-ce que cela veut dire que tu te passes de la contrainte IK pour faire tes animations ?
- blendman
Re: Stop Motion avec des scripts Python
Mer 4 Jan - 17:50
salut
ça a l'air intéressant.
Je suppose que chaque perso est en un seul mesh, c'est bien ça ?
Et donc, là, tu as un parenting "interne", entre les mesh (et pas entre des objets)
ça a l'air intéressant.
Je suppose que chaque perso est en un seul mesh, c'est bien ça ?
Et donc, là, tu as un parenting "interne", entre les mesh (et pas entre des objets)
- Lylo
Re: Stop Motion avec des scripts Python
Jeu 5 Jan - 10:18
Même chose pour moi, je ne comprends pas bien le pourquoi du comment dans le sens où j'ai l'impression de voir une simple animation.
Ne faudrait-il pas faire un parentage du bassin aux extrémités plutôt que l'inverse puisque c'est ainsi que fonctionne le corps humain ?
Ne faudrait-il pas faire un parentage du bassin aux extrémités plutôt que l'inverse puisque c'est ainsi que fonctionne le corps humain ?
- petitagore
Re: Stop Motion avec des scripts Python
Ven 6 Jan - 11:09
Euh, bon, je réponds un peu, et avec un retard dont je vous prie de m'excuser. Je suis nouveau sur Blender Tribu, mais pas sur Forumactif, et avec mes habitudes acquises sur d'autres instances de Forumactif, je pensais recevoir des notifications par courriel s'il y avait des réponses à mon post... Il doit y avoir un paramètre à valider quelque part dans mon profil, bref, c'est pas la question. :-P
Or donc... Mes personnages (il y en a deux sur la vidéo) sont deux structures hiérarchiques, chacune constituée de dix-sept maillages "indépendants" (en dehors du parentage, je veux dire). Dix-sept, ça n'est pas vraiment peu, mais ça n'est pas tant que ça. Allez, pour le plaisir, j'énumère: une tête, un cou, un thorax, un "nombril" (la bouboule au milieu), un abdomen, un bras gauche, un avant-bras gauche, une main gauche, la même chose du côté droit, une cuisse gauche, un mollet gauche, un pied gauche et la même chose du côté droit.
Donc, dans ma scène, il y a deux fois dix-sept éléments (ça fait 34), tous dotés de paramètres de rotation. J'en fais l'inventaire dans la position de départ, et ça donne ça (attention, c'est long; je vous recommande vivement de ne pas tout lire):
(C'était vraiment trop long, j'en ai viré les trois quarts)
Et j'en entends déjà qui me disent: mais t'es malade, t'as noté tout ça à la main? Meuh non, bien sûr que non: j'ai écrit un script Python pour le faire à ma place. Je lance le script et zou, un dixième de seconde plus tard, les centaines de lignes de mon inventaire sont écrites.
Or donc, je produis cet inventaire pour la position de départ des personnages, puis je produis avec le même script un autre inventaire pour la position d'arrivée.
Et comme décidément, les scripts, j'aime ça, zou, je lance un autre script pour faire la comparaison entre les deux inventaires et écrire un récapitulatif des changements, qui ressemble à ça (à chaque fois: nom de l'élément à articuler, rotations dans la position de départ, rotations dans la position d'arrivée):
(etc., etc., j'abrège... Le vrai fichier fait 130 lignes de long)
Et cela étant fait, je lance un troisième script Python (oui, les scripts, c'est mon dada) à qui j'ai imposé une durée en secondes pour le mouvement (ce qui demande la modification d'une ligne de code, tout ça), et zou, le script se démmbrouille pour calculer toutes les positions des n frames de mon animation à 30 images seconde. Depuis le début du processus, toute cette cuisine informatique a dû me faire bosser pendant vingt-cinq secondes à tout péter. Bon, il reste à faire calculer les images, ce qui est sensiblement plus long, mais je peux déjà voir l'effet que ça fait rien qu'en cliquant sur le bouton de lecture dans la sous-fenêtre Timeline.
Voilààà... En fait, c'est très simple! Enfin, c'est simple une fois qu'on a écrit les scripts, mais il se trouve que j'aime écrire des scripts (je vous l'avais déjà dit?) -- et surtout, une fois qu'ils sont écrits, ils peuvent servir indéfiniment.
Il restait la question des prétendus bugs de Blender dont je parlais dans la vidéo... Hum, ça n'était pas des bugs de Blender, c'était des bugs de moi: j'avais effectué les parentages avec "Set Parent to Object" au lieu de "Set Parent to Object (Keep Transform)", ha ha ha, suis-je bête et incompétent. :-)
Or donc... Mes personnages (il y en a deux sur la vidéo) sont deux structures hiérarchiques, chacune constituée de dix-sept maillages "indépendants" (en dehors du parentage, je veux dire). Dix-sept, ça n'est pas vraiment peu, mais ça n'est pas tant que ça. Allez, pour le plaisir, j'énumère: une tête, un cou, un thorax, un "nombril" (la bouboule au milieu), un abdomen, un bras gauche, un avant-bras gauche, une main gauche, la même chose du côté droit, une cuisse gauche, un mollet gauche, un pied gauche et la même chose du côté droit.
Donc, dans ma scène, il y a deux fois dix-sept éléments (ça fait 34), tous dotés de paramètres de rotation. J'en fais l'inventaire dans la position de départ, et ça donne ça (attention, c'est long; je vous recommande vivement de ne pas tout lire):
- Code:
av_bras_droit_labrige
MESH
Posi 0.209605,0.172115,0.264981
Rotx 0.000000, Roty -0.000000, Rotz 0.000000
Tail 1.000000,1.000000,1.000000
==========
av_bras_gauche_labrige
MESH
Posi -0.213824,0.300563,0.233998
Rotx 0.000000, Roty -0.000000, Rotz 0.000000
Tail 1.000000,1.000000,1.000000
==========
bassin_labrige
MESH
Posi -0.003003,0.001296,0.391925
Rotx 0.000000, Roty -0.000000, Rotz 0.000000
Tail 1.000000,1.000000,1.000000
==========
bras_droit_labrige
MESH
Posi 0.211215,0.315554,0.559922
Rotx 0.000000, Roty -0.000000, Rotz 0.000000
Tail 1.000000,1.000000,1.000000
==========
bras_gauche_labrige
MESH
Posi -0.213659,0.311506,0.558643
Rotx 0.000000, Roty -0.000000, Rotz 0.000000
Tail 1.000000,1.000000,1.000000
(C'était vraiment trop long, j'en ai viré les trois quarts)
Et j'en entends déjà qui me disent: mais t'es malade, t'as noté tout ça à la main? Meuh non, bien sûr que non: j'ai écrit un script Python pour le faire à ma place. Je lance le script et zou, un dixième de seconde plus tard, les centaines de lignes de mon inventaire sont écrites.
Or donc, je produis cet inventaire pour la position de départ des personnages, puis je produis avec le même script un autre inventaire pour la position d'arrivée.
Et comme décidément, les scripts, j'aime ça, zou, je lance un autre script pour faire la comparaison entre les deux inventaires et écrire un récapitulatif des changements, qui ressemble à ça (à chaque fois: nom de l'élément à articuler, rotations dans la position de départ, rotations dans la position d'arrivée):
- Code:
av_bras_droit_labrige
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
Rotx 43.673384, Roty 0.000000, Rotz 0.000000
av_bras_droit_ratcuit
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
Rotx 16.390009, Roty 0.000000, Rotz 0.000000
av_bras_gauche_labrige
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
Rotx 56.865341, Roty -21.886660, Rotz 0.000000
av_bras_gauche_ratcuit
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
Rotx 31.580752, Roty 0.000000, Rotz 0.000000
bassin_labrige
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
Rotx 4.297381, Roty 0.000000, Rotz 0.000000
bassin_ratcuit
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
Rotx 0.000000, Roty 0.000000, Rotz 0.000000
(etc., etc., j'abrège... Le vrai fichier fait 130 lignes de long)
Et cela étant fait, je lance un troisième script Python (oui, les scripts, c'est mon dada) à qui j'ai imposé une durée en secondes pour le mouvement (ce qui demande la modification d'une ligne de code, tout ça), et zou, le script se démmbrouille pour calculer toutes les positions des n frames de mon animation à 30 images seconde. Depuis le début du processus, toute cette cuisine informatique a dû me faire bosser pendant vingt-cinq secondes à tout péter. Bon, il reste à faire calculer les images, ce qui est sensiblement plus long, mais je peux déjà voir l'effet que ça fait rien qu'en cliquant sur le bouton de lecture dans la sous-fenêtre Timeline.
Voilààà... En fait, c'est très simple! Enfin, c'est simple une fois qu'on a écrit les scripts, mais il se trouve que j'aime écrire des scripts (je vous l'avais déjà dit?) -- et surtout, une fois qu'ils sont écrits, ils peuvent servir indéfiniment.
Il restait la question des prétendus bugs de Blender dont je parlais dans la vidéo... Hum, ça n'était pas des bugs de Blender, c'était des bugs de moi: j'avais effectué les parentages avec "Set Parent to Object" au lieu de "Set Parent to Object (Keep Transform)", ha ha ha, suis-je bête et incompétent. :-)
- busanga
Re: Stop Motion avec des scripts Python
Ven 6 Jan - 12:35
Salut,
Sans doute il y a un truc qui m"échappe, mais c'est quoi fondamentalement la différence avec une animation par clés ? Parce que c'est le même principe, non ?
Sans doute il y a un truc qui m"échappe, mais c'est quoi fondamentalement la différence avec une animation par clés ? Parce que c'est le même principe, non ?
- petitagore
Re: Stop Motion avec des scripts Python
Ven 6 Jan - 14:18
C'est absolument le même principe. Mais pour quelqu'un qui a déjà beaucoup de pratique du code informatique, c'est beaucoup moins difficile que d'apprendre à se familiariser avec les deux cent mille manip de l'interface de Blender. Il n'y a jamais besoin d'apprendre comment on fait, la réponse est toujours "je vais y arriver avec trois lignes de Python". Et en plus, le code produit peut toujours être copié-collé.
- blendman
Re: Stop Motion avec des scripts Python
Ven 6 Jan - 14:57
ah ok, donc ce sont des objets séparés, et pas un objet uniquement (chaque personnage).
Et au lieu de déplacer chaque objet (bras, etc) à la main, tu lances ton script?
C'est ça ? J,'ai bon ?
mais tu ne peux pas vraiment faire des animations de personnages comme ça, meme pour un truc cartoon, si ?
En fait, tu fais comme ça parce que tu aimes écrire des scripts, je comprends
C'est coder ton logiciel au lieu d'utiliser des logiciels d,'autres personnes.
Je comprends (un peu), car je fais pareil pour certains logiciels, je préfère les coder moi-même mais c'est hyper long hou punaise
Mais en animation -blender, je préfère faire les anim à la main ^^.
Et au lieu de déplacer chaque objet (bras, etc) à la main, tu lances ton script?
C'est ça ? J,'ai bon ?
mais tu ne peux pas vraiment faire des animations de personnages comme ça, meme pour un truc cartoon, si ?
En fait, tu fais comme ça parce que tu aimes écrire des scripts, je comprends
C'est coder ton logiciel au lieu d'utiliser des logiciels d,'autres personnes.
Je comprends (un peu), car je fais pareil pour certains logiciels, je préfère les coder moi-même mais c'est hyper long hou punaise
Mais en animation -blender, je préfère faire les anim à la main ^^.
- petitagore
Re: Stop Motion avec des scripts Python
Sam 7 Jan - 0:13
Lylo a écrit:Ne faudrait-il pas faire un parentage du bassin aux extrémités plutôt que l'inverse puisque c'est ainsi que fonctionne le corps humain ?
Ca dépend du mouvement. Si le personnage a les pieds par terre, ce qui est quand même assez courant, je pense que c'est encore en définissant les pieds comme le haut de la hiérarchie (si j'ose dire!) qu'on a le moins de problèmes (parce que comme ça le personnage garde forcément les pieds sur terre, au lieu de se mettre en lévitation ou de s'enfoncer dans le sol).
Je ne maîtrise pas encore à fond, il faut encore que je fasse plein d'exercices et de tests. N'empêche, la technique est assez prometteuse.
Lylo aime ce message
- busanga
Re: Stop Motion avec des scripts Python
Sam 7 Jan - 19:57
Ok je vois un peu ta démarche, mais bien que je me pose bien là parfois moi aussi en réinventeur de la roue, je me dis que tu te compliques bien la vie, les armatures, contraintes, clés d'animation ne me semblent pas si obscures à utiliser.
- Lylo
Re: Stop Motion avec des scripts Python
Dim 8 Jan - 16:00
petitagore a écrit:Lylo a écrit:Ne faudrait-il pas faire un parentage du bassin aux extrémités plutôt que l'inverse puisque c'est ainsi que fonctionne le corps humain ?
Ca dépend du mouvement. Si le personnage a les pieds par terre, ce qui est quand même assez courant, je pense que c'est encore en définissant les pieds comme le haut de la hiérarchie (si j'ose dire!) qu'on a le moins de problèmes (parce que comme ça le personnage garde forcément les pieds sur terre, au lieu de se mettre en lévitation ou de s'enfoncer dans le sol).
Je ne maîtrise pas encore à fond, il faut encore que je fasse plein d'exercices et de tests. N'empêche, la technique est assez prometteuse.
Mais oui, il n'y a pas de pesanteur par défaut en 3D
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|