BLENDER TRIBU
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Carte Fnac+ Jackpot avec 30€ offerts sur le compte fidélité
19.99 €
Voir le deal

Aller en bas
Redstar
Redstar
Localisation : Belgique

Résolu Faire une rotation à partir d'un angle défini

Lun 25 Sep - 11:06
Bonjour tout le monde,

J'ai deux bones, le premier est le cou, le deuxième est la tête.

Quand je pivote la tête sur l'axe Z, je veux que le cou commence à tourner une fois que la tête (d'un personnage) dépasse les 60° (ou -60°). C'est possible de faire ça sur une armature riguée ?


Dernière édition par Redstar le Mar 3 Oct - 11:06, édité 4 fois
busanga
busanga

Résolu Re: Faire une rotation à partir d'un angle défini

Lun 25 Sep - 11:50
Salut Redstar,
En combinant une contrainte Transform et une contrainte Limit Rotation, ça peut peut-être marcher ?
Par exemple tu te débrouilles pour que la rotation de la tête arrive à 0° quand celle du cou arrive à 60°, et tu interdis les valeurs négatives (une sorte de Clamp) avec la Limit Rotation. J'ai pas de quoi essayer sous la main.
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Lun 25 Sep - 13:19
J'ai complété ma question car elle n'était pas assez clair.

J'ai pensé à cette astuce de transformation et limit rotation mais ça ne correspond pas à ce que je recherche.


Par exemple tu te débrouilles pour que la rotation de la tête arrive à 0° quand celle du cou arrive à 60°...

Attention que c'est l'inverse: je veux que la tête tourne d'abord, puis le cou, à condition que l'angle de la tête a une valeur supérieur à 60° ou inférieur (négatif) à -60°.

Il m'aurai fallut avoir un contrainte qui dit "dés que le bone 1 atteint x degrés en positif ou négatif, on active ou applique une transformation proportionnelle sur le bone du cou".

Un peu comme si on faisait une animation d'une rotation avec une latence pour celle du cou (genre début frame 10 à 20, la tête débutant de 0 à 20).
busanga
busanga

Résolu Re: Faire une rotation à partir d'un angle défini

Lun 25 Sep - 21:41
Oui j'ai réalisé après coup que ma réponse ne convenait pas pour que ça marche des 2 côtés (+60° et -60°).

Voici une possible solution, mais pas sûr que ce soit vraiment le problème posé, alors j'analyse d'abord, tu me diras si ça correspond à ce que tu cherches à faire. De ce que je comprends, tu veux commander le cou en tournant la tête (pas forcément le plus académique, mais je dis rien, je suis moi aussi explorateur de pistes tordues  tres souriant ) :

Faire une rotation à partir d'un angle défini Rig-te10

Là j'ai mis une contrainte Transform sur l'os cou qui mappe la rotation de l'os tete sur les axes locaux Y. Pour éviter que la rotation du cou en induise une de la tête qu'on est déjà en train de manipuler, j'ai décoché la case Inherit Rotation dans le parentage. Mais même sans ça ça part vite en sucette. Enfin on y va quand même, on fait de la théorie là  tres souriant

Si on représente la rotation du cou en fonction de celle de la tête, on a la courbe rouge, et toi tu veux celle en vert en haut (ou un truc du genre) :

Faire une rotation à partir d'un angle défini Courbe10

Pas possible d'obtenir la courbe verte avec un Transform + Limit Rotation, mais on peut avoir quelque chose s'approchant (en orange : d'abord une contrainte Transform qui donne la direction du segment oblique, puis une Limit Rotation pour l'écrêter à 0.
En ajoutant ce schéma orange avec son symétrique à +60°, tu peux obtenir le vert, ce qui veut dire qu'il faudrait un os intermédiaire, superposé à celui du cou en Rest Pose, qui prend la première combinaison Transform + Limit Rotation, puis le cou hérite de la rotation de cet intermédiaire, à laquelle on ajoute la combinaison symétrique Transform + Limit Rotation.

J'ai pas essayé parce que je suis pas sûr de pas faire fausse route depuis le début, mais ça pourrait marcher.

En dernier point, tu peux aussi envisager une rotation progressive du cou (courbe en vert en bas), mais là faudrait sans doute d'autres outils, avec les seules contraintes j'y crois pas trop. Des drivers, ou peut-être les Animation Nodes (jamais essayé, même pas sûr que je parle du bon truc).

Bon, j'espère ne pas être complètement à côté de la plaque, tu me diras...


Dernière édition par busanga le Sam 30 Sep - 8:14, édité 1 fois
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Mar 26 Sep - 11:52
En effet, ça part en sucette.

Je vais faire plus simple: attribuer un copy rotation sur le bone contrôleur tête et j'applique une transformation de rotation du coup en modifiant le scale du bone contrôleur. Dommage qu'il ne soit visiblement pas possible de contrôler les deux avec une seule rotation...
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Mar 26 Sep - 13:23
J'ai tenté l'affaire avec chat gpt mais comme il est basé sur la ou les versions sorties en 2021, ont s'est cassé la figure plusieurs fois. Cela dit, une chose intéressante durant le parcourt, il semble possible de mettre une expres​sion(en mettant une condition écrite min max) et de mapper ça sur les bones, mais je n'y connais rien dans les drivers et ça n'a pas fonctionné...
busanga
busanga

Résolu Re: Faire une rotation à partir d'un angle défini

Mar 26 Sep - 14:05
Si jamais tu utilises les drivers (j'y connais pas grand chose non plus) ou un autre outil où tu peux balancer le calcul que tu veux, ma courbe en bas est définie par
Code:
angle_cou = (angle_tete / 90°)³ * 30°
(à traduire avec la syntaxe correcte suivant l'outil utilisé). Ça donnerait un résultat assez proche de ce que tu veux mais en moins brusque, je suis pas convaincu que ton démarrage à +/-60° donne visuellement un résultat très intéressant.
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Mer 27 Sep - 9:29
Est-ce que par hasard @meltingman et/ou @petitagore n'ont pas la solution ? Je sais que l'un connais la partie technique propre à blender, l'autre a fait une démonstration de son talent en programmation. Peut-être complémentaire ?

Dans un premier temps, ou placer le driver ? Dans un modifier et de quel type et sur quelle valeur ?
meltingman
meltingman
https://www.melting3d.org/

Résolu Re: Faire une rotation à partir d'un angle défini

Mer 27 Sep - 16:32
transpire désolé de ne pas entrer dans la conversation, mais là, tout ce qui touche à des math ça me dépasse Gag !
donc, on va dire que c'est au-dessus de mes compétences mal de crane .

Pour le driver ça dépend de ce qui doit subir la transformation. ça peut être un Bone .. un objet.. un shape.. etc..
et si si on peut se servir de la rotation d'un os comme driver,
le plus simple est de passer le Bone en question en Euler, pour pouvoir "isoler" un sens de direction X,Y ou Y.

On à aussi comme énnoncé par @Redstar , passer par une contrainte sur le Bone et ajouter des rotations Min-MAX

bon courage rasta banane

salut
avatar
thierry1222

Résolu Re: Faire une rotation à partir d'un angle défini

Ven 29 Sep - 12:39
Bonjour,
Pour moi le plus simple c'est d'utiliser un driver. Je te met mes réglages et le résultat:

Faire une rotation à partir d'un angle défini Captur10

busanga aime ce message

avatar
CBY

Résolu Re: Faire une rotation à partir d'un angle défini

Ven 29 Sep - 16:43
Bonjour,
Je suis arrivé en parallèle à une solution similaire à  celle de Thierry1222 en appliquant  un driver au niveau du squelette défini par une courbe. 1 cube pour aller vite et 3 bones: corps,cou, tête.
Le driver est défini sur l'axe de rotation Y du bone cou commandé par l'axe de rotation Y du bone tête.
Attention les angles de rotation des bones sont exprimés en radian, 3.14 radian correspondent à180°.
60° -> PI/3 ~ 1.046 radian

https://www.dropbox.com/scl/fi/8zgwx178fmzgfk38gftrt/t-te_cou_armature.blend

?rlkey=ir0n02ci0hzaii88cc5k5k1l5&dl=0Faire une rotation à partir d'un angle défini Tzote_10

Je ne sais pas quel pourrait être le rendu dans ton cas.
avatar
CBY

Résolu Re: Faire une rotation à partir d'un angle défini

Dim 1 Oct - 18:20
Bonjour,
Une version avec un driver programmé en Python.
le fichier blend :  https://www.dropbox.com/scl/fi/h7vjvfqvq1w7lgptu3h1z/t-te_cou_armature_python.blend?rlkey=ipqka7sparcyjndt7m31aqcf1&dl=0
le fichier py : https://www.dropbox.com/scl/fi/sfs9hjnyzwg2swyg00ces/t-te_cou_decalage.py?rlkey=uzzhovtzwc2xd7jbxhe21s6xq&dl=0

A l'initialisation: cliquer sur "run script"   (1)
clic droit sur le driver, EDIT-> Update dependencies

sélectionner le bone tête, la rotation en Y à partir de 60° fera tourner le cou.
L'angle de 60° est paramétrable de même que le facteur de rotation du cou.
Faire une rotation à partir d'un angle défini Tzote_11
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Lun 2 Oct - 10:58
Bonjour tout le monde,

@thierry1222
C'est effectivement l'effet que je recherche, sauf que ce n'est pas sur des objets mais sur une armature, je pense avoir compris que je dois appliquer le driver sur le cou (en rotation y) et indiquer le bone contrôleur de la tête dans "var" (le bone de la tête a un copy rotation sur ce bone contrôleur), ce qui indique à blender qu'en fonction de ce bone, celui du cou devra pivoter.

Par contre, je ne comprends pas comment tu as appliqué les clés, en quoi sont exprimé les graduations ? Je suppose en degré, vu que tu as dézoomé en Y -60 et 60 mais le -1 & 1 en X me laisse perplexe, est-ce une plage de valeur, une limite ? Dans mes essais, la courbe ne correspond pas du tout à ton image et je ne vois pas combien de clé tu as installé, j'aurai dis 5.

@CBY
Ton premier lien dropbox ne m'autorise pas à télécharger ce dernier, même si je dois me connecter, contrairement aux autres liens avec le script python.

Le script fonctionne mais dés que l'os de la tête atteint 60 ou -60, le bone du cou pivote instantanément, comme si il faisait un 180° + les degrés rajoutés) et cela donne une torsion du cou complètement incohérente... il est littéralement tordu.
avatar
CBY

Résolu Re: Faire une rotation à partir d'un angle défini

Lun 2 Oct - 17:57
Bonjour Redstar,

Désolé si ton modèle a attrapé un torticolis, c'était du brutal! Une première approche.

En deuxième approche et pour y aller plus en douceur, une version améliorée:

my_tête_cou_décal2(angle,limit,max_rot_cou,max_rot_tete)

angle = angle de rotation de la tête lors de l'appel
limit: angle  de rotation de la tête  en degrés à partir duquel le cou tournera (en valeur absolue)
max_rot_cou: amplitude maxi de rotation du cou en degrés (en valeur absolue)
max_rot_tête: angle maximum de rotation de la tête, assurer "manuellement" qu'il est supérieur à limit_max_rot et qu'on ne le dépassera pas en faisant tourner le tête, (en valeur absolue)

Dans l'exemple: my_tête_cou_décal2(téta,60,20,90)
le cou tournera de 0° à 20° avec une progression linéaire  pour une rotation de la tête entre 60° et 90°
à 60° rotation de 0°
à 70° rotation de 6.7°
à 75° rotation de 10°
à 80° rotation de 13.3°
à 90° rotation de 20°

Le fichier blend exemple, dans le style cubiste:
https://www.dropbox.com/scl/fi/azjg4j56lfy5zszgnsc8o/t-te_cou_armature_python_2.blend?rlkey=fd7mnz7a9ilj023evmhvl8v60&dl=0

le fichier py:
https://www.dropbox.com/scl/fi/xtinsldb4nq2gn5t041ba/t-te_cou_decalage_2.py?rlkey=yyc2kwap5lxc2cbu2kdhb17in&dl=0

Attention à ne pas faire tourner manuellement l'os du cou, laisser le driver calculer, ne faire tourner que la tête

Tout est paramétrable, et devrait pouvoir lui ménager les cervicales, du moins je l'espère.
Bon courage.

Nota: je ne suis pas un spécialiste de Blender ni de Python étant de la génération FORTRAN II à IV et COBOL. Donc je bricole.



Voir les paramètre du bone tête pour le driver dans l'exemple:
Type YRotation (l'axe vertical est Y)
Mode XZY Euler
Space Local Space

Faire une rotation à partir d'un angle défini Tzote_12
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Mar 3 Oct - 11:06
Ça fonctionne nickel ! Merci à tout le monde !
avatar
thierry1222

Résolu Re: Faire une rotation à partir d'un angle défini

Mer 4 Oct - 18:40
Bonjour Redstar,

Pour répondre à ta question, on a sur la courbe en ordonnée l'angle en degré de l'objet piloté par le driver (le torse dans mon exemple), et en abscisse l'angle en RADIANS du driver. Pour rajouter des clés sur la courbe c'est comme le graph editor, ctrl+clic droit sur la courbe. Tu peux voir que la courbe est plate entre -1,04 et +1,04 ce qui correspond à -60 et +60 en degrés. La tête n'influence pas le torse dans cette zone. J'espère que c'est plus clair comme ça?
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Jeu 5 Oct - 9:52
Presque: j'ai compris que pour obtenir la graduation -60 <-> 60, tu avais étendu la plage avec la barre de défilement vertical, là j'ai obtenu le même graphique que toi.

Par contre, j'ai un peu de mal à gérer et à comprendre la logique car avec les données que tu as transmises, j'ai le cou littéralement tordu. J'ai pu jouer sur les positions pour équilibrer la chose mais je ne trouve pas le résultat logique sur le graphique mais visuellement, ça correspondait à ce que je cherchais.

D'abord, dans le driver, j'ai dû pointer l'axe de rotation en Z (en global, car en local via axe Y, ça me donne quelque chose d'affolant et instable)

Par exemple, j'avais déplacé la position (-60, -2) à (-60 , -4) et le (0, -1,04) à (environ 2, -2). malgré ça, le cou est trop tordu et contrairement à la version python, il continue a se tordre plutôt que de s’arrêter (je veux que le cou fasse une rotation min et max de -30 <-> 30).
avatar
CBY

Résolu Re: Faire une rotation à partir d'un angle défini

Jeu 5 Oct - 19:12
Bonjour,
La version avec le driver défini par une courbe qui devrait donner le même résultat que Python, angle de déclenchement 60° (1.047 rd), rotation cou maxi 30° (0.524 rd)
5 points de coordonnées en radians:
(0,0)
(1.047,0)  ~ (60°,0)
(1.571,0.524) ~ (90°,30°)
(-1.047,0)  ~ (-60°,0)
(-1.571,-0.524) ~ (-90°,-30°)
courbe symétrique par rapport à O (0,0)

à utiliser pour une rotation du cou entre  [-1.571,1.571]  ~  [-90° et 90°]

le fichier blend:
https://www.dropbox.com/scl/fi/9raa6cohw17xpqivzf3qy/t-te_cou_armature_driver_by_curve.blend?rlkey=i9dq5njsjxipmnqrl7p227zq0&dl=0

Faire une rotation à partir d'un angle défini Tzote_13
Redstar
Redstar
Localisation : Belgique

Résolu Re: Faire une rotation à partir d'un angle défini

Ven 6 Oct - 9:13
Merci, ça fonctionne. Je comprends mieux certaines choses aussi.
meltingman
meltingman
https://www.melting3d.org/

Résolu Re: Faire une rotation à partir d'un angle défini

Mar 17 Oct - 3:43
Whao vous êtes super forts Smile

Alors juste une question, pourquoi avoir gardé le mode de rotations des Bones en quaternion ?
Avec un passage par Euler les rotations se font en degrés et sur 3 Axes au lieu de 4. je pense que c'est plus simple.

Après bon, ça fonctionne donc c'est cool lol!
avatar
CBY

Résolu Re: Faire une rotation à partir d'un angle défini

Mar 17 Oct - 9:41
Bonjour,

Déformation scientifique, 60° = Pi/3. Pourquoi faire simple quand on peut faire compliqué!
Bonne remarque.


Contenu sponsorisé

Résolu Re: Faire une rotation à partir d'un angle défini

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum