Normales, faces et ordre des points

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour à tous,

Dans mon cours d’animation 3D, la prof dit qu’il faut faire attention à toujours décrire les faces en donnant dans un ordre précis les points : il faut toujours utiliser cet ordre.

Ceci est illustré ci-dessous :

Image utilisateur
Image utilisateur

Jusque-là, je pensais que tout simplement Maya posséddait un algorithme de rendu calculant les normales à partir d’une liste de points, et que cet algorithme considérait qu’une face était définie par trois points. Il me semblait que cet algorithme prenait donc les points dans l’ordre dans lequel ils étaient donnés. Or si à la création de l’objet 3D, dans la RAM ces points étaient ordonnés par exemple en ABCDEF, et qu’à l’enregistrement dans un fichier l’ordre changeait (EFDBAC par exemple), eh bien… Lors de l’ouverture de ce fichier, effectivement les normales ne seraient pas les mêmes. J’ai dit ça à ma prof, elle a dit "oui", puis j’ai insisté pour qu’elle confirme son "oui" et là elle a commencé à dire d’autres trucs qui n’avaient rien à voir avec ça :o

Elle m’a dit par exemple que dans Maya par exemple, certaines personnes inversaient les normales en poussant trop sur une surface (enfin sur des vertices je suppose), et donc que la face concernée devenait noire. Ensuite elle a expliqué un autre truc mais c’est assez flou aussi…

Bref je suis perdu, je n’ose pas poser de nouveau la question à ma prof, et je n’ai pas osé lui dire que je n’avais rien compris à ses explications (d’autant plus que d’habitude elle est très claire quand elle nous enseigne quelque chose !).

Donc voilà, si des gens parmi vous ont vu ça au cours de leurs études ou quoi, ce serait vraiment cool de votre part de m’éclairer =/

Merci d’avance !

+0 -0

La normale est définie par le sens direct, aussi appelé la "règle de la main droite" (si tu vois ce que je veux dire :diable: ).

Bref, l’ordre de définition des vertices permet bien de savoir de quel côté ce situe la normale :)

+1 -0

Cette représentation est économe en mémoire, et la quantité de calcul nécessaire est tellement négligeable qu’il n’y a pas de raison de s’en priver.


La normale c’est utile dans pas mal de cas. Un moteur de rendu peut utiliser cette information pour savoir quand il entre/sort d’un objet. Pareil pour les slicers des imprimantes 3D / CNC.

C’est aussi utilisé pour les opérations "booléennes" sur les maillages (Union/Intersection/Différence).

Ou encore pour l’application des textures, une normal map/ displacement map / whatever you want par exemple ne rendrais pas pareil selon l’orientation de la normale (un creux deviendrait bombé, etc.)

+0 -0
Auteur du sujet

Mais en fait ce que je voulais dire, c’est : en quoi l’ordre de ces points, qui interviennent dans le calcul des normales, est important à conserver dans un logiciel comme Maya ? Autrement dit : est-ce lors de l’enregistrement puis de la ré-ouverture d’un objet 3D ? Etc.

+0 -1

D’un point de vue géométrique élémentaire, l’ordre des points ne compte pas pour la définition d’un triangle. Cependant, pour le rendu 3D, il est nécessaire de donner une orientation aux triangles, c’est-à-dire un devant et un derrière. Là où pointe la normale, c’est le devant, et l’autre côté, c’est le derrière.

La définition d’un triangle orienté peut se faire via une liste ordonnée de points. Tu es obligé de garder l’ordre, parce que si tu échanges deux points, tu risques d’obtenir le même triangle , mais avec l’autre orientation. Du point de vue de la normale, cela revient à avoir une normale opposée. Cela est dû au lien très étroit entre la normale et le produit vectoriel de deux vecteurs.

Là où c’est critique dans le rendu 3D, c’est que tout un tas d’algorithme utilisent ces normales pour fonctionner. Quand tes normales sont mal positionnées, tu as des problèmes de lumière, de textures, etc. Typiquement, on veut que les surfaces fermées aient leurs normales à l’extérieur. Parfois, certaines fausses manipulations cassent cet état de fait, et il faut utiliser les options du logiciel du type "recalculate normals outside".

+0 -0
Auteur du sujet

Oui ça j’ai bien compris, mais concrètement, quand est-ce qu’un problème de normales lors du rendu peut survenir ?

Est-ce que c’est quand l’utilisateur a créé son objet, puis l’enregistre avec une liste bien ordonnée de points en théorie mais dans la pratique il s’avère que ces points ne le sont pas, et ensuite l’utilisateur rouvre/importe ce fichier et donc les normales ne sont pas les mêmes ?

+0 -1

Est-ce que c’est quand l’utilisateur a créé son objet, puis l’enregistre avec une liste bien ordonnée de points en théorie mais dans la pratique il s’avère que ces points ne le sont pas, et ensuite l’utilisateur rouvre/importe ce fichier et donc les normales ne sont pas les mêmes ?

The-Aloha-Protocol

Je comprends absolument pas ce que tu veux dire. Si tu modélise un triangle, et que sa normale a une certaine direction, et que tu enregistres ton fichier, que tu le fermes puis que tu l’ouvres, et bien les normales sont toujours dans le même sens… Si ce n’est pas le cas, cela veut dire qu’il y a un bug dans ton logiciel. C’est au logiciel de savoir dans quel ordre les points sont stockés, pas à l’utilisateur. Lui, il ne veut que son triangle avec la normale dans le bon sens.

+0 -0

J’ai du mal à comprendre tes interrogations.

Si tu n’as pas le même ordre des points, tu n’as pas le même triangle orienté, c’est tout. Si ce triangle fait partie d’une structure plus vaste, et bien tu changes également cette structure.

C’est un peu comme un triplet RVB pour une couleur. Si tu changes l’ordre des valeurs, tu n’as pas la même couleur. Par exemple (10, 100, 200), c’est pas la même chose que (100, 10, 200). Alors ça va te paraître évident, mais si tu veux une couleur et pas une autre, tu as intérêt à garder les valeurs dans l’ordre… Ce n’est même pas une histoire de bug ou de pratique à éviter, mais de définition en vérité.

Pour donner un autre exemple. Si tu as un vecteur $\vec{AB}$, l’ordre compte. Prendre $\vec{BA}$, c’est juste prendre un autre vecteur. Il n’y a pas de cas d’école ou de bugs. C’est juste changer d’objet. Si tu fais du calcul vectoriel sans prendre en compte le sens, tu fais n’importe quoi. C’est pareil avec tes triangles : tu prends d’autres triangles, c’est n’importe quoi.

+0 -0
Auteur du sujet

En fait c’est parce que vous n’abordez la question que d’un point de vue purement mathématique. Je prends la casquette de l’informaticien qui développe son propre logiciel de modélisation/rendu. Dans quel(s) cas un problème d’inversion de normale peut-il survenir suite à un désordre des points des triangles ?

+0 -1

Cette réponse a aidé l’auteur du sujet

Le problème survient quand tu fais de la merde de manière quasi volontaire ^^

Je ne vois pas le problème en fait, il n’y a pas besoin de casquette informaticien/mathématicien pour ça, surtout dans le cas de la création d’un tel logiciel, ou si tu n’es pas un minimum des deux (et un minimum suffisamment conséquent), tu ne pourras rien faire ^^

Si dans ton programme, tu as le triangle défini avec les vertices ABC, pourquoi tu enregistrerais CBA ?? Et là, informaticien ou mathématicien, je ne trouve aucune raison qui justifierait de faire ça…


L’inversion apparaît dès lors que le tu ne lis pas ton triangle dans le même sens… ABC, BCA, CAB donnent la même normale, et les autres donnent la normale inverse.

Dessine un triangle et regarde toutes les possibilités dans le sens horaire, là, tu as toujours la même normale. Tous les triangles que tu peux lire en sens antihoraire te donnent l’autre normale.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte