- petitagore
Lacet, tangage, roulis : quelle orientation par défaut ?
Mer 25 Jan - 14:48
Bonjour tout le monde. Bon, un petit croquis valant mieux qu'un long discours:
Selon vous, quelle orientation par défaut faut-il donner à un objet pour que ses paramétrages en RotX, RotY et RotZ soient intelligibles? Je précise dans quel esprit je pose la question: c'est parce que je cherche à aboutir à des animations pilotées par des scripts Python... donc je travaille avec mes méninges beaucoup plus qu'avec mes yeux, et j'ai vraiment besoin de comprendre ce que je fais.
Comme on peut le voir dans l'image ci-dessus, quand l'objet est paramétré par défaut à l'horizontale avec sa face avant orientée vers l'Ouest (à la façon de Lucky Luke à la fin d'un album), alors, ô merveille, les paramètres RotX, RotY et RotZ correspondent à ce que les aviateurs appellent (respectivement) roulis, tangage et lacet (et que moi perso j'appelle plutôt le dévers, la pente et l'azimut).
Si on met RotX, RotY et RotZ à zéro, l'objet est horizontal et orienté vers l'ouest.
Si on joue sur RotZ, ça oriente l'objet par rapport au nord.
Si on joue sur RotY, ça fait pointer l'objet vers le haut ou vers le bas: les valeurs positives de RotY orientent vers le haut, les négatives vers le bas (ce que je trouve pratique car intelligible).
Si on joue sur RotX (ce dont en général on n'a pas besoin), ça permet de pencher l'objet vers la gauche ou la droite.
Globalement, dans ce cas de figure, les trois valeurs sont très faciles à évaluer mentalement, ce dont j'ai fichtrement besoin pour écrire proprement mes scripts Python. Seul défaut: l'objet est orienté par défaut vers... l'ouest, ce qui est bizarre.
Ma première idée aurait été d'orienter l'objet vers le nord, mais pour les calculs c'est pas top: Blender est en effet paramétré par défaut (et c'est très sensible quand on travaille sur des scripts Python) avec les rotations dans l'ordre RotX, RotY, RotZ, et j'aimerais bien que ça puisse correspondre, respectivement, à roulis, tangage et lacet sinon, perso, je comprends plus rien et ça rend mes scripts indébogables.
Je ne sais pas si vous l'avez noté, mais les caméras de Blender pointent par défaut vers... le bas (avec le haut de l'image orienté vers le nord) quand on met leurs paramètres RotX, RotY et RotZ à zéro. Ca fait que RotZ peut facilement correspondre à l'azimut et RotX à la pente... mais d'une part il faut mettre RotX à 90 ° et non à zéro pour être à l'horizontale, et par ailleurs si on touche à RotY pour que la caméra soit un peu de travers (certains appellent ça un cadrage psychologique et en tout cas moi ça me rend zinzin)... alors je ne comprends vraiment plus rien à rien et c'est justement ce que je cherche à éviter.
Voilà... Avez-vous un avis sur la question?
Selon vous, quelle orientation par défaut faut-il donner à un objet pour que ses paramétrages en RotX, RotY et RotZ soient intelligibles? Je précise dans quel esprit je pose la question: c'est parce que je cherche à aboutir à des animations pilotées par des scripts Python... donc je travaille avec mes méninges beaucoup plus qu'avec mes yeux, et j'ai vraiment besoin de comprendre ce que je fais.
Comme on peut le voir dans l'image ci-dessus, quand l'objet est paramétré par défaut à l'horizontale avec sa face avant orientée vers l'Ouest (à la façon de Lucky Luke à la fin d'un album), alors, ô merveille, les paramètres RotX, RotY et RotZ correspondent à ce que les aviateurs appellent (respectivement) roulis, tangage et lacet (et que moi perso j'appelle plutôt le dévers, la pente et l'azimut).
Si on met RotX, RotY et RotZ à zéro, l'objet est horizontal et orienté vers l'ouest.
Si on joue sur RotZ, ça oriente l'objet par rapport au nord.
Si on joue sur RotY, ça fait pointer l'objet vers le haut ou vers le bas: les valeurs positives de RotY orientent vers le haut, les négatives vers le bas (ce que je trouve pratique car intelligible).
Si on joue sur RotX (ce dont en général on n'a pas besoin), ça permet de pencher l'objet vers la gauche ou la droite.
Globalement, dans ce cas de figure, les trois valeurs sont très faciles à évaluer mentalement, ce dont j'ai fichtrement besoin pour écrire proprement mes scripts Python. Seul défaut: l'objet est orienté par défaut vers... l'ouest, ce qui est bizarre.
Ma première idée aurait été d'orienter l'objet vers le nord, mais pour les calculs c'est pas top: Blender est en effet paramétré par défaut (et c'est très sensible quand on travaille sur des scripts Python) avec les rotations dans l'ordre RotX, RotY, RotZ, et j'aimerais bien que ça puisse correspondre, respectivement, à roulis, tangage et lacet sinon, perso, je comprends plus rien et ça rend mes scripts indébogables.
Je ne sais pas si vous l'avez noté, mais les caméras de Blender pointent par défaut vers... le bas (avec le haut de l'image orienté vers le nord) quand on met leurs paramètres RotX, RotY et RotZ à zéro. Ca fait que RotZ peut facilement correspondre à l'azimut et RotX à la pente... mais d'une part il faut mettre RotX à 90 ° et non à zéro pour être à l'horizontale, et par ailleurs si on touche à RotY pour que la caméra soit un peu de travers (certains appellent ça un cadrage psychologique et en tout cas moi ça me rend zinzin)... alors je ne comprends vraiment plus rien à rien et c'est justement ce que je cherche à éviter.
Voilà... Avez-vous un avis sur la question?
- Gorgious
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Mer 25 Jan - 18:03
Je ne sais pas si ça va t'aider mais je trouve que le mieux pour travailler avec des combinaisons de rotations, translations, échelles c'est d'utiliser des matrices.
C'est beaucoup plus complexe que des vecteurs mais ça permet de faire des opérations beaucoup plus complexes.
Par exemple si tu veux faire une rotation X de 90° puis Z de 90°
Si tu veux faire une rotation Z puis une rotation X, il y a juste besoin de changer l'ordre d'application des matrices
Ici un lien vers la documentation des Matrices de Blender
Pour ce qui est des orientations, effectivement Blender a choisi Z = Up contrairement à d'autres logiciels où c'est Y = Up. De même par défaut les objets de "Face" sont orientés vers l'axe Y négatif. Ce sont des choix de design mais il n'y a pas de vérité dans ce domaine, une orientation n'est jamais qu'un référentiel arbitraire servant à décrire des positions et des transformations. L'essentiel est de bien faire attention si tu utilises des référentiels différents dans ton flux de travail, à bien réorienter tes modèles. Par exemple, le moteur de jeu Unity utilise Y = Up, donc tu dois tourner tes modèles de 90° autour de l'axe X si tu veux qu'ils soient bien orientés dans Unity.
C'est beaucoup plus complexe que des vecteurs mais ça permet de faire des opérations beaucoup plus complexes.
Par exemple si tu veux faire une rotation X de 90° puis Z de 90°
- Code:
import math
import mathutils
import bpy
obj = bpy.context.active_object
rot_x = mathutils.Matrix.Rotation(math.radians(90.0), 4, 'X')
rot_z = mathutils.Matrix.Rotation(math.radians(90.0), 4, 'Z')
obj.matrix_world = obj.matrix_world @ rot_x @ rot_z
Si tu veux faire une rotation Z puis une rotation X, il y a juste besoin de changer l'ordre d'application des matrices
- Code:
obj.matrix_world = obj.matrix_world @ rot_z @ rot_x
Ici un lien vers la documentation des Matrices de Blender
Pour ce qui est des orientations, effectivement Blender a choisi Z = Up contrairement à d'autres logiciels où c'est Y = Up. De même par défaut les objets de "Face" sont orientés vers l'axe Y négatif. Ce sont des choix de design mais il n'y a pas de vérité dans ce domaine, une orientation n'est jamais qu'un référentiel arbitraire servant à décrire des positions et des transformations. L'essentiel est de bien faire attention si tu utilises des référentiels différents dans ton flux de travail, à bien réorienter tes modèles. Par exemple, le moteur de jeu Unity utilise Y = Up, donc tu dois tourner tes modèles de 90° autour de l'axe X si tu veux qu'ils soient bien orientés dans Unity.
- petitagore
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Mer 25 Jan - 18:32
Gorgious a écrit:Je ne sais pas si ça va t'aider mais je trouve que le mieux pour travailler avec des combinaisons de rotations, translations, échelles c'est d'utiliser des matrices.
C'est beaucoup plus complexe que des vecteurs mais ça permet de faire des opérations beaucoup plus complexes.
Moi, je chercherais plutôt à me limiter à ce que je suis capable de comprendre... et accessoirement, à ce que je suis capable d'expliquer à des débutants. Mais ça n'empêche pas que ces matrices ont effectivement l'air de représenter une piste intéressante.
Donc, merci!
- Redstar
- Localisation : Belgique
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Jeu 26 Jan - 9:26
Bonjour,
Je sais qu'il y deux types de coordonnées, la global et la local. Quand tu fais une rotation d'un objet, ses coordonnées globales changent tandis que le local équivaut à changer la direction du mesh de ton objet mais ça ne modifie pas la direction des axes. Cette information peut-elle t'aider ?
Je sais qu'il y deux types de coordonnées, la global et la local. Quand tu fais une rotation d'un objet, ses coordonnées globales changent tandis que le local équivaut à changer la direction du mesh de ton objet mais ça ne modifie pas la direction des axes. Cette information peut-elle t'aider ?
- petitagore
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Jeu 26 Jan - 10:13
@Redstar Je suis au courant, merci.
Bien entendu, je me sers de cette faculté, tout particulièrement dans les structures hiérarchiques articulées (quand l'orientation finale d'un "Child" répercute mais éventuellement modifie l'orientation d'un "Parent").
Mais tout ça devient facilement très confus quand on manipule un objet situé à un niveau hiérarchique inférieur. Par exemple, on joue sur le paramètre "RotZ" d'un "Child" placé sur le bras articulé d'un objet qui est son "Parent", et on voit l'objet tourner... n'importe comment, en tout cas absolument pas de façon parallèle à l'axe dez Z: on a par exemple le sentiment qu'il tourne autour d'un axe plus ou moins horizontal et parallèle à aucun des axes du repère 3D). C'est une conséquence logique de la combinaison des rotations dans une structure hiérarchique, mais ça n'est pas parce que c'est logique que c'est forcément compréhensible...
Je cherche un moyen de garder des paramètres intelligibles quel que soit l'orientation que l'objet est obligé de prendre du fait des orientations de son "Parent". C'est pour ça que les notions de roulis, tangage et lacet (voir schéma dans mon premier post) en lieu et place des RotX, RotY et RotZ m'intéressent: elles font référence à la structure de l'objet lui-même, qui ne change pas, et non aux axes globaux de Blender, autour desquels l'objet peut avoir des rotations combinées bien trop complexes pour un cerveau humain (surtout quand c'est le mien).
Si absurde que soit l'orientation dans l'espace d'un avion qui fait des acrobaties aériennes, son pilote sait toujours comment il doit incliner ses instruments pour jouer sur le lacet, le tangage et le roulis. Je cherche à faire un peu la même chose, mais Blender ne met à ma disposition que les paramètres RotX, RotY et RotZ, je cherche donc un moyen de donner à mon objet une orientation par défaut qui permette d'établir des correspondances entre RotX, RotY et RotZ d'une part, roulis, tangage et dévers d'autre part. Comme indiqué dans le schéma tout en haut de ce fil, j'ai le sentiment d'y parvenir en orientant mon objet, par défaut, horizontalement et en direction de l'Ouest (ou en direction de l'axe des -X si on préfère le dire comme ça): RotX correspond parfaitement au roulis, RotY correspond parfaitement au tangage, RotZ correspond parfaitement au lacet. En fait, ça marche très bien, mais comme ça me paraît quand même un peu... saugrenu, bricolo et Système D, je me demande si quelqu'un aurait idée d'une méthode préférable, plus élégante d'un point de vue mathématico-logique.
Pour le moment je n'ai pas trouvé mieux que mon Système D mais il ne marche pas si mal... Je demandais l'avis des copains à tout hasard, je ne serais pas étonné qu'il y en ait parmi eux qui soient de meilleurs matheux que moi.
Symétriquement, il y en a peut-être qui ne sont pas plus malins que moi (dommage pour eux) et qui pourraient avoir l'usage de mon Système D si personne ne leur en indique un meilleur.
Bien entendu, je me sers de cette faculté, tout particulièrement dans les structures hiérarchiques articulées (quand l'orientation finale d'un "Child" répercute mais éventuellement modifie l'orientation d'un "Parent").
Mais tout ça devient facilement très confus quand on manipule un objet situé à un niveau hiérarchique inférieur. Par exemple, on joue sur le paramètre "RotZ" d'un "Child" placé sur le bras articulé d'un objet qui est son "Parent", et on voit l'objet tourner... n'importe comment, en tout cas absolument pas de façon parallèle à l'axe dez Z: on a par exemple le sentiment qu'il tourne autour d'un axe plus ou moins horizontal et parallèle à aucun des axes du repère 3D). C'est une conséquence logique de la combinaison des rotations dans une structure hiérarchique, mais ça n'est pas parce que c'est logique que c'est forcément compréhensible...
Je cherche un moyen de garder des paramètres intelligibles quel que soit l'orientation que l'objet est obligé de prendre du fait des orientations de son "Parent". C'est pour ça que les notions de roulis, tangage et lacet (voir schéma dans mon premier post) en lieu et place des RotX, RotY et RotZ m'intéressent: elles font référence à la structure de l'objet lui-même, qui ne change pas, et non aux axes globaux de Blender, autour desquels l'objet peut avoir des rotations combinées bien trop complexes pour un cerveau humain (surtout quand c'est le mien).
Si absurde que soit l'orientation dans l'espace d'un avion qui fait des acrobaties aériennes, son pilote sait toujours comment il doit incliner ses instruments pour jouer sur le lacet, le tangage et le roulis. Je cherche à faire un peu la même chose, mais Blender ne met à ma disposition que les paramètres RotX, RotY et RotZ, je cherche donc un moyen de donner à mon objet une orientation par défaut qui permette d'établir des correspondances entre RotX, RotY et RotZ d'une part, roulis, tangage et dévers d'autre part. Comme indiqué dans le schéma tout en haut de ce fil, j'ai le sentiment d'y parvenir en orientant mon objet, par défaut, horizontalement et en direction de l'Ouest (ou en direction de l'axe des -X si on préfère le dire comme ça): RotX correspond parfaitement au roulis, RotY correspond parfaitement au tangage, RotZ correspond parfaitement au lacet. En fait, ça marche très bien, mais comme ça me paraît quand même un peu... saugrenu, bricolo et Système D, je me demande si quelqu'un aurait idée d'une méthode préférable, plus élégante d'un point de vue mathématico-logique.
Pour le moment je n'ai pas trouvé mieux que mon Système D mais il ne marche pas si mal... Je demandais l'avis des copains à tout hasard, je ne serais pas étonné qu'il y en ait parmi eux qui soient de meilleurs matheux que moi.
Symétriquement, il y en a peut-être qui ne sont pas plus malins que moi (dommage pour eux) et qui pourraient avoir l'usage de mon Système D si personne ne leur en indique un meilleur.
- busanga
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Jeu 26 Jan - 15:07
Salut,
Pas sûr de bien comprendre la question et encore moins d'y répondre, mais je viens apporter mes 2 centimes de matheux. La manipulation des rotations en X, Y, Z (angles d'Euler) mène inévitablement à un moment donné à des approximations de calcul trop importantes (blocage de cardan) dues d'un point de vue mathématique à une division par zéro (que seul Chuck Norris est en mesure de maîtriser, comme chacun sait), qui vont se traduire visuellement par des sauts ou des rotations qui semblent aberrantes. Un moyen de contourner le problème est l'utilisation des matrices de rotation déjà mentionnées, ou des quaternions, mais là on rentre dans du encore plus complexe à appréhender. Je te donne quand même la piste, au cas où, au détour d'un article sur la question, tu trouverais une piste intéressante à explorer.
Pas sûr de bien comprendre la question et encore moins d'y répondre, mais je viens apporter mes 2 centimes de matheux. La manipulation des rotations en X, Y, Z (angles d'Euler) mène inévitablement à un moment donné à des approximations de calcul trop importantes (blocage de cardan) dues d'un point de vue mathématique à une division par zéro (que seul Chuck Norris est en mesure de maîtriser, comme chacun sait), qui vont se traduire visuellement par des sauts ou des rotations qui semblent aberrantes. Un moyen de contourner le problème est l'utilisation des matrices de rotation déjà mentionnées, ou des quaternions, mais là on rentre dans du encore plus complexe à appréhender. Je te donne quand même la piste, au cas où, au détour d'un article sur la question, tu trouverais une piste intéressante à explorer.
- petitagore
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Jeu 26 Jan - 20:03
@busanga Oui, les quaternions peuvent être considérés comme une solution vraiment universelle. A l'époque héroïque de VRML (que j'ai connu... je suis vieux!), c'était même à peu près le seul moyen de s'en sortir. Hélas, il faut avoir les capacités mathématiques de William Rowan Hamilton pour y comprendre quelque chose... et j'en suis assez loin.
Cela dit, les blocages de cardan ne constituent vraiment une problématique... bloquante que dans les aéronefs et les vaisseaux spatiaux, où le pilote doit parfois réagir très vite sans avoir le temps de réfléchir et/ou de manoeuvrer. Devant un écran de Blender, on peut prendre pour réfléchir tout le temps qu'on veut, deux heures s'il le faut, la carte graphique ne s'écrasera pas au sol pour si peu... et par conséquent on peut quand même toujours s'en sortir avec des valeurs de RotX, RotY et RotZ bien choisies, même si elles sont très difficiles à identifier. Ca peut être très contre-intuitif... mais ça n'est jamais vraiment bloquant à proprement parler.
Cela dit, les blocages de cardan ne constituent vraiment une problématique... bloquante que dans les aéronefs et les vaisseaux spatiaux, où le pilote doit parfois réagir très vite sans avoir le temps de réfléchir et/ou de manoeuvrer. Devant un écran de Blender, on peut prendre pour réfléchir tout le temps qu'on veut, deux heures s'il le faut, la carte graphique ne s'écrasera pas au sol pour si peu... et par conséquent on peut quand même toujours s'en sortir avec des valeurs de RotX, RotY et RotZ bien choisies, même si elles sont très difficiles à identifier. Ca peut être très contre-intuitif... mais ça n'est jamais vraiment bloquant à proprement parler.
- petitagore
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Jeu 26 Jan - 20:18
Une petite vidéo valant toujours mieux qu'un long discours...
... voici la preuve par l'image que le "blocage" de cardan est une expression impropre: on voit bien qu'en jouant sur trois rotations, il est toujours possible de donner à l'objet une orientation absolument quelconque. Mais ça ne veut pas dire que c'est toujours facile à faire pour un cerveau humain!
... voici la preuve par l'image que le "blocage" de cardan est une expression impropre: on voit bien qu'en jouant sur trois rotations, il est toujours possible de donner à l'objet une orientation absolument quelconque. Mais ça ne veut pas dire que c'est toujours facile à faire pour un cerveau humain!
- Redstar
- Localisation : Belgique
Re: Lacet, tangage, roulis : quelle orientation par défaut ?
Lun 27 Fév - 14:48
Salut petitagore,
Je me permet de mettre le sujet , si tu as de nouvelles infos ou que tu as résolu le problème, n’hésite pas à partager et à changer le statut du topic, peut-être que quelqu'un serai dans la même situation ou qui détiendrait un élément de réponse...
Je me permet de mettre le sujet , si tu as de nouvelles infos ou que tu as résolu le problème, n’hésite pas à partager et à changer le statut du topic, peut-être que quelqu'un serai dans la même situation ou qui détiendrait un élément de réponse...
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum