Pourquoi les moteurs de jeu convertissent-ils les modèles en triangles au lieu d'utiliser des quads?

47

J'ai travaillé avec Maya pour l'animation et pour des projets plus orientés sur le film, mais je me concentre également sur mes études sur le développement de jeux vidéo. Quoi qu'il en soit, je parlais avec l'un de mes professeurs et nous ne pouvions pas comprendre pourquoi tous les moteurs de jeu (que je connais) se convertissent en triangles.

Quelqu'un at-il eu l'occasion de savoir pourquoi les moteurs de jeu se convertissent en triangles par rapport aux modèles à quatre polygones? Aussi, quels sont les avantages et les inconvénients (le cas échéant) de le faire?

Subvention
la source
1
De manière quelque peu connexe, NVidia NV1 a utilisé une texture quadratique (qui utilise des quadruples) au lieu de triangles / polygones. Ce n'était pas un grand succès, c'est le moins qu'on puisse dire. Voir en.wikipedia.org/wiki/NV1 .
Macke
5
@Macke: quadratique comme dans "équation quadratique", pas quadratique comme dans "quadrilatère". Il n'utilise pas de quadruples mais plutôt une courbe quadratique définie par 9 points. stason.org/TULARC/pc/3d-graphics-cards-faq/…
9
+1 pour votre question mais un gros -1 à votre professeur. C’est un truc de base qu’il aurait dû connaître aussi bien qu’il connaissait le dos de sa propre main, et un signe qu’il était un peu en décalage avec l’évolution des quelque 15 dernières années.
Maximus Minimus
1
Eh bien, dans la défense de mes professeurs, il n'est pas du côté des développeurs de jeux, il est plutôt un animateur / modélisateur. Il savait qu'il convertissait en tris mais ne connaissait pas la raison mathématique expliquant le rendu. Mais oui, il aurait probablement dû savoir.
Grant

Réponses:

56

La ligne du bas est la triangulation triangulaire, qui permet aux ordinateurs de restituer des objets à l'écran. Bien que d'autres le disent plus souvent que moi:

Tous les objets 3D que nous voyons sur l'écran de l'ordinateur sont en réalité constitués de minuscules objets géométriques souvent appelés primitives. Les quadrilatères, les triangles, les n-gons, etc. sont des exemples de primitives. Nous allons nous concentrer sur les triangles principalement pour une raison principale: chaque objet peut être divisé en triangles, mais un triangle ne peut être divisé en autre chose que des triangles. De ce fait, dessiner des triangles est beaucoup plus simple que dessiner des polygones d’ordre supérieur; moins de choses à traiter. C'est pourquoi ces triangles sont si couramment utilisés en infographie.

L'accent est à moi. Source: http://www.devmaster.net/articles/software-rendering/part3.php

Nate
la source
2
Impressionnant! Cela fait beaucoup de sens quand on y pense. Merci d'avoir répondu!
Grant
1
Dans OpenGL ES, dans le cadre des efforts de simplification de l'API, les quadrilatères et les polygones ne sont même pas pris en charge. Donc, une raison pratique d'utiliser des triangles est parce que vous n'avez pas d'autre choix. Mais la raison pour laquelle une API rationalisée telle que ES évite les autres types primitifs est due aux raisons exposées dans cette réponse et dans d’autres.
Suboptimus
5
+1 Car est une réponse que je peux utiliser en toute sécurité comme référence lorsque quelqu'un me demande la même chose, à mes favoris. Dites seulement que j’ai toujours pensé que la raison pour laquelle les triangles sont la plus petite primitive possible est qu’avec l’imprécision de l’arithmétique en virgule flottante, les tris sont le seul polygone sûr que vous pouvez garantir d’être plat dans tous les cas. être planaire tout le temps. Le logiciel de modélisation montre probablement les objets sous forme de quadruples ou de n-gons comme commodité pour le modélisateur, mais applique des transformations / rendus aux polygones diviseurs sous forme de deux ou plusieurs triangles.
Hatoru Hansou
56

Les triangles ont de nombreuses propriétés qui les rendent plus faciles, et donc plus rapides, à dessiner.

Quatre points ou plus peuvent ne pas être sur le même plan, mais trois points le sont toujours (en ignorant les cas dégénérés). Cela a la propriété intéressante que les valeurs scalaires varient linéairement sur la surface du triangle. Même lorsque le triangle est projeté à l'écran, les valeurs scalaires varient toujours linéairement par rapport à x '/ z et y' / z.

Ceci, à son tour, signifie que la plupart sinon la totalité des éléments nécessaires à l'ombrage, à la texture et au filtrage en profondeur d'un triangle peuvent être calculés à l'aide d'une interpolation linéaire extrêmement rapide dans du matériel spécialisé.

tl; dr: les triangles sont les primitives les plus simples, de sorte que les algorithmes utilisant des triangles peuvent être fortement optimisés.

Ggambett
la source
11
+1 Je pense que le fait qu’un triangle soit toujours plan est l’une des principales raisons. Les polygones non plans rendent les choses beaucoup plus compliquées.
Bummzack
2
+1 Je pense que les triangles étant le seul polygone que vous puissiez garantir d'être planaire, c'est la principale raison technique pour créer des API et du matériel nécessitant des triangles. Les logiciels de modélisation affichent probablement des maillages en quadrilatères comme commodité pour le modélisateur.
Hatoru Hansou
1
Une belle analogie non plane que j'utilise ... Un tabouret à trois pieds ne peut se tenir au sol que dans un sens, ses pieds ressemblant aux coins d'un triangle. Mais un tabouret à quatre pieds peut se tenir sur le sol de deux façons et oscille d'une position à l'autre si une jambe est plus courte que les autres.
ChrisC
Je suis curieux; Comment est-il possible qu'un triangle ait toujours des points sur le même plan? Comment dessinez-vous réellement une sphère alors? Au moins un des points doit être traduit sur un autre plan, sinon vous obtiendrez une surface plane.
Rataplan
@newbiez Trois sommets définissent toujours un seul plan. Une sphère est composée de différents triangles; deux triangles adjacents représentant un carré de la surface de la sphère partagent deux sommets, mais ils ne sont pas sur le même plan. Cette image peut éclaircir les
ggambett
8

Trois points (un triangle) définissent TOUJOURS un plan plat. En d'autres termes, pour trois points quelconques, vous pouvez toujours créer un plan plat capable de couper ces trois points. Cependant, la même chose n'est pas toujours vraie de quatre points. Vous pouvez avoir quatre points dans un avion, mais vous pouvez également avoir quatre points qui ne sont pas dans un avion.

Tim Holt
la source
2
En fait, 4 points aléatoires sont plus susceptibles de ne pas être dans un avion, vous devrez donc trianguler quand même.
ChrisF
Ceci n'est vrai que si les points ne coïncident pas.
Notlesh
1
Même si les points coïncident, ils sont coplanaires sur un nombre infini de plans.
3Dave
Être coplanaire ne «définit TOUJOURS pas un plan plat» .
Sam hocevar
6

Ce ne sont pas les "moteurs de jeu" qui font cela - tous les logiciels 3D que vous utilisez le font. Cela ne vous en dit pas rien, et votre professeur semble sous-qualifié s'il ne le sait pas. Ils existent dans la mémoire de l'ordinateur même si le logiciel vous les cache. Tous les programmes 3D ont une option qui rend les triangles visibles. Ils auront également une option qui les divise en bords modifiables, de sorte que vous pouvez jouer avec eux. Mais ils ont toujours été présents au début et il est naïf de la part de votre professeur d’enseigner ce sujet et de se demander encore "à quoi servent les triangles".

Un triangle est le seul moyen de disposer des verts et de garantir une surface plane. Lorsque vous avez un quad, vous pouvez arranger les verts de manière à ce qu’ils soient pliés. Mais il est déjà composé de triangles et ce sont ces triangles qui permettent le pliage.

Domarius
la source
3

Un triangle est la primitive la plus simple pouvant être décrite isolément car elle comporte trois points, moins que ceux qui ne décrivent pas une surface en 3D.

Puisqu'un triangle peut être considéré isolément, il est possible de créer un morceau de code ou de silicium capable de ne restituer qu'un seul triangle, ce qui, via le pouvoir de la répétition, peut rendre n'importe quelle surface.

Par conséquent, le premier système informatique qui a réussi à rendre "n'importe quelle surface" l'a fait naturellement en rendant plusieurs triangles de manière indépendante.

Si l'on considère les triangles et les quadruples comme des "primitives" (c.-à-d. Des bits de géométrie complètement isolés sans contexte), le triangle est le plus primitif et il aura donc tendance à "gagner".

Cependant, une fois que les ordinateurs destinés au divertissement ont dépassé un certain niveau de sophistication dans les années 1980, la simplicité de considérer les "primitives" isolément est devenue moins importante. Si les graphiques doivent être produits en série, les économies d’échelle favorisent le traitement de groupes de sommets associés, tout comme ils préfèrent assembler une centaine de voitures à la fois identiques.

C'est pourquoi, dans les années 1980, les films ont adopté le "quad", qui est un terme impropre, car il fait référence à une grille 2D de sommets dans un espace 3D et non à un quadrilatère isolé.

Le même passage des triangles aux "quads" n’a pas encore eu lieu dans le domaine du divertissement interactif, mais il est probable que cela se produira bientôt, et pour les mêmes raisons que dans le secteur cinématographique.

bmcnett
la source
2

Il n’ya qu’une façon de trianguler un triangle contre «n-2» pour un polygone à n côtés. Ainsi, les triangles sont finalement le moyen le moins ambigu pour définir une forme polyhédrique. En outre, comme d’autres affiches l’ont indiqué, il existe de nombreuses façons d’accélérer la rastérisation triangle (plutôt que quad ou supérieure) (la constante z est l’un de mes favoris). En outre, il est plus facile d'optimiser les tests d'intersection rayons-triangle que pour les tests d'intersection de rayons arbitraires. En fait, de nombreuses opérations sur des polygones à n côtés tirent avantage d’une représentation triangulée. Cela ne veut pas dire que les représentations de polygones à n côtés sont «mauvaises» - elles sont très utiles, mais au final, vous allez vouloir utiliser des triangles pour de nombreuses opérations de maillage.

Luther
la source
2

Tant que le triangle est défini par trois sommets non colinéaires (lire: aucun des angles n'est exactement Pi), les sommets définissent un plan unique.

Un quad est bien sûr défini par quatre sommets. Il est parfaitement possible que ces sommets soient non coplanaires. Dans ce cas, votre quad serait vraiment deux triangles divisés par une diagonale sur le quad. C'est deux plans, deux jeux de normales de surface, etc.

Tous les outils de modélisation disponibles, tous les algorithmes de texturation, d’éclairage, etc. supposent tous qu’un modèle est constitué de segments plans et que toutes les formules dont nous disposons (les produits croisés pour le calcul normal sont les premiers que nous ayons) utilisent le jeu de données d'entrée minimum absolu - trois. les sommets définissent un plan, et ce plan est ce dont nous avons besoin pour faire tout ce qui est sophistiqué.

Vous pourriez certainement écrire un moteur pour travailler avec des quads, mais vous vous retrouveriez dans tous les cas à ignorer le quatrième sommet, sauf lorsque vous devez (fréquemment) vous assurer qu'il est coplanaire avec les trois autres qui définissent le quad. Et, la solution la plus logique au cas où ce n’est pas coplanaire serait de scinder le quad en deux triangles. Alors, pourquoi ne pas simplement faire cela pour commencer?

Quel serait l'intérêt de travailler avec des quads?

Si vous voulez un quad, mettez deux triangles ensemble.

3Dave
la source
2

Si nous supposons qu'obtenir 4 points pour être coplanaires n'est pas un problème (comme les autres l'ont souligné, mais supportez-moi), alors vous trouvez que le rendu d'un trapèze arbitraire (qui est ce à quoi ressemblera un quadrilatère lorsqu’il est transformé en espace d’écran) n’est pas très différent du rendu d’un triangle - en fait, cela fonctionne quasiment de la même manière une fois que vous effectuez un écrêtage car cela peut introduire des sommets supplémentaires. (Au moins dans un modèle de logiciel - le matériel peut avoir un moyen plus simple d’utiliser la force brute pour effectuer le découpage.)

Le problème restant est donc celui de l'efficacité de la représentation. - vous pouvez facilement représenter un quad avec 2 triangles, et sans aucun sommet supplémentaire si vous utilisez une bande de triangle (3 verts pour le 1er triangle, puis un vert supplémentaire pour le 2ème triangle). D'autre part, si vous essayez de représenter un triangle avec un quad, vous devez utiliser 4 sommets et en avoir un dégénéré identique à un autre. Ce n'est pas idéal en termes d'efficacité.

Kylotan
la source