Tuto morphing 3D
Tuto morphing 3D
J'ai écris un tutoriel expliquant comment réaliser un morphing entre 2 objets.
Le but est de recréer cette scène:
Webplayer
C'est un peu long car j’essaie d'expliquer un maximum de choses... J'espère au moins ne pas trop raconter de bêtises
http://axelvaude.wordpress.com/2014/01/ ... -morphing/
Le but est de recréer cette scène:
Webplayer
C'est un peu long car j’essaie d'expliquer un maximum de choses... J'espère au moins ne pas trop raconter de bêtises
http://axelvaude.wordpress.com/2014/01/ ... -morphing/
Re: Tuto morphing 3D
pas mal, pas mal du tout même
J'aime beaucoup la mise en page, c'est clair et bien décris. Après, sur le plan technique, je n'ai pas encore eu le temps de me plonger dans le code et de lire en profondeur.
J'aime beaucoup la mise en page, c'est clair et bien décris. Après, sur le plan technique, je n'ai pas encore eu le temps de me plonger dans le code et de lire en profondeur.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Tuto morphing 3D
Comme le dit mon vdd pas mal du tout en effet. Très bien expliqué, clair et très facile à suivre (même avec peu de connaissance côté 3D je dois dire). Je n'ai pas eu le temps d'essayer le code en lui même (juste lecture).
Merci du partage, je vais faire suivre ça, Bon courage pour la suite de tes tutoriels ^^
Merci du partage, je vais faire suivre ça, Bon courage pour la suite de tes tutoriels ^^
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
- artemisart
- Messages : 1893
- Inscription : 21 Juin 2011 19:51
- Localisation : Centre
- Contact :
Re: Tuto morphing 3D
Bien, je vois que j'ai de la concurrence (faudra que je remette à mes tutos un jour ^^)
Tu rajoute juste un slerp sur les normals et ça sera parfait.
Tu rajoute juste un slerp sur les normals et ça sera parfait.
Re: Tuto morphing 3D
Sympa
Deux petites suggestions :
- dans un souci de performances, il serait bon d'ajouter un test sur le changement de la valeur d'intensité du morph, et de n'exécuter la boucle de mise à jour que lorsqu'il y a changement, pour éviter de mettre à jour les vertices même s'il n'y a pas de variation du morphing
- étendre le tutorial aux morphings relatifs : dans le cas présent, tu traites des morphings absolus, où tous les vertices se déplacent d'un point A vers un point B.
Avec un morphing relatif, au lieu de stocker le point d'arrivée, on stocke simplement le décalage par rapport au point d'origine, du coup, on peut morpher indépendamment diverses régions du mesh et cumuler les morphs.
Pour obtenir un tableau de positions relatives, il suffit de soustraire les positions originales des positions stockées dans un tableau de morph absolu. (ainsi tous les vertices qui ne bougent pas se retouvent avec un vecteur de déplacement égal à 0,0,0)
EDIT :
Car pour faire un slerp sur les normales, cela implique que l'on connaisse déjà les normales du morph... du coup tout dépend de ce que l'on a en stock
Deux petites suggestions :
- dans un souci de performances, il serait bon d'ajouter un test sur le changement de la valeur d'intensité du morph, et de n'exécuter la boucle de mise à jour que lorsqu'il y a changement, pour éviter de mettre à jour les vertices même s'il n'y a pas de variation du morphing
- étendre le tutorial aux morphings relatifs : dans le cas présent, tu traites des morphings absolus, où tous les vertices se déplacent d'un point A vers un point B.
Avec un morphing relatif, au lieu de stocker le point d'arrivée, on stocke simplement le décalage par rapport au point d'origine, du coup, on peut morpher indépendamment diverses régions du mesh et cumuler les morphs.
Pour obtenir un tableau de positions relatives, il suffit de soustraire les positions originales des positions stockées dans un tableau de morph absolu. (ainsi tous les vertices qui ne bougent pas se retouvent avec un vecteur de déplacement égal à 0,0,0)
EDIT :
Je me demande ce qui est le plus rapide/précis dans ce cas... Faire un slerp sur les normales, ou bien simplement les recalculer avec la fonction native proposée par Unity ?artemisart a écrit :Tu rajoute juste un slerp sur les normals et ça sera parfait.
Car pour faire un slerp sur les normales, cela implique que l'on connaisse déjà les normales du morph... du coup tout dépend de ce que l'on a en stock
Dernière édition par Alesk le 21 Jan 2014 13:26, édité 1 fois.
Re: Tuto morphing 3D
ça a l'air très intéressant tout ça! et ça pourrais bien m’être utile prochainement! merci et bravo
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Re: Tuto morphing 3D
Merci à vous tous pour vos retours.
Artemisart : Excuse moi, mais je n'ai pas compris le coup du Slerp sur les normales?
Alesk: J'avais pensé à ne faire la boucle que lorsque la valeur d'intensité changeait (d'ailleurs c'était dans mon script initial). Mais en écrivant le tuto j'ai trouvé que c'était bien assez long, et j'ai décidé de zapper cette partie. Mais je peux ajouter juste une phrase à ce sujet à la fin.
Quant au morphing relatif, je ne connaissais pas cette technique. C'est très inintéressant, à explorer pour un futur tuto, merci
Artemisart : Excuse moi, mais je n'ai pas compris le coup du Slerp sur les normales?
Alesk: J'avais pensé à ne faire la boucle que lorsque la valeur d'intensité changeait (d'ailleurs c'était dans mon script initial). Mais en écrivant le tuto j'ai trouvé que c'était bien assez long, et j'ai décidé de zapper cette partie. Mais je peux ajouter juste une phrase à ce sujet à la fin.
Quant au morphing relatif, je ne connaissais pas cette technique. C'est très inintéressant, à explorer pour un futur tuto, merci
Re: Tuto morphing 3D
Les normales ne sont pas automatiquement recalculées par unity lorsque tu déformes le mesh, du coup, il est toujours éclairé comme s'il n'était pas déformé.axel a écrit :Artemisart : Excuse moi, mais je n'ai pas compris le coup du Slerp sur les normales?
Donc à chaque déplacement de vertex, il faut aussi recalculer sa normale ainsi que celles de ses voisins afin que l'éclairage de l'objet reste cohérent
ban ça prend 3 lignes de plus... franchement, c'est pas ça qui allait alourdir le code :paxel a écrit :Alesk: J'avais pensé à ne faire la boucle que lorsque la valeur d'intensité changeait (d'ailleurs c'était dans mon script initial). Mais en écrivant le tuto j'ai trouvé que c'était bien assez long, et j'ai décidé de zapper cette partie. Mais je peux ajouter juste une phrase à ce sujet à la fin.
Attention! "inintéressant" ça veut dire que ça n'est pas intéressantaxel a écrit :Quant au morphing relatif, je ne connaissais pas cette technique. C'est très inintéressant, à explorer pour un futur tuto, merci
Quoi qu'il en soit, cette méthode est très pratique pour animer un visage par exemple, car cela permet d'animer individuellement chaque partie du visage sans altérer les autres.
Mais du coup ça implique de gérer plusieurs morphings en même temps, donc ça complexifie un poil la procédure
Re: Tuto morphing 3D
désolé, le "inintéressant" est une erreur de frappe. Je voulais dire intéressant bien sûr.
- artemisart
- Messages : 1893
- Inscription : 21 Juin 2011 19:51
- Localisation : Centre
- Contact :
Re: Tuto morphing 3D
Effectivement il faut que les meshs cibles aient des normales (mais pour recalculer faut que les tris soient dans le bon sens aussi). Au niveau des perfs les 2 restent très rapides même si je pense que recalculer les normales est un peu plus lourd (faut parcourir les vertices et il y a plus d'opérations non ?).Alesk a écrit :Je me demande ce qui est le plus rapide/précis dans ce cas... Faire un slerp sur les normales, ou bien simplement les recalculer avec la fonction native proposée par Unity ?artemisart a écrit :Tu rajoute juste un slerp sur les normals et ça sera parfait.
Car pour faire un slerp sur les normales, cela implique que l'on connaisse déjà les normales du morph... du coup tout dépend de ce que l'on a en stock
Après si on veut faire du "multimorph" là ça devient plus complexe de le faire à la mano (du style somme des normales de chaque vertex * influence pour chaque mesh, puis normaliser ) et donc là RecalculateNormals aide bien.