Latest article: Exporter des données depuis Excel

Les bases de la 3D, partie 2

Dans le précédent article on a vu les fondations de la 3D, notamment la projection et les axes.

Seulement tout ça n’a d’intérêt que si on affiche quelque chose à l’écran ! On va donc voir dans cet article comment sont décrites les formes géométriques que l’on affiche en 3D.

Les primitives

Les primitives sont les formes de base qui nous serviront à décrire toute notre géométrie. Elles sont très simples et permettent de faire déjà beaucoup de choses.

  • Les Points : de simples points dans l’espace, on peut leur donner une épaisseur
  • Les Lignes : des lignes.
  • Les Triangles : c’est la primitive principale, la plus utilisée.
  • Les Quadrangles : Comme un triangle mais avec quatre côtés.
  • Les n-gones : très peu utilisés pour la 3D temps réel, ce sont des polygones qui ont n côtés (plus de 4, sinon ce sont des triangles ou des quadrangles). Je ne m’attarderai pas là dessus car leur usage en 3D temps réel est extrêmement marginal (pour ne pas dire inexistant).

Mis à part les n-gones, les cartes graphiques actuelles sont capables d’afficher directement toutes ces primitives. Cela n’a pas toujours été le cas, et beaucoup d’anciens modèles de cartes découpent les quadrangles en deux triangles.

D’une façon générale, les triangles permettent de représenter un vaste panel de formes, et tous les jeux actuels sont basés sur eux.

On préfèrera donc utiliser uniquement des triangles pour le rendu, par soucis d’homogénéité. En revanche, rien n’empêche d’utiliser des quadrangles lors de la modélisation, pour “y voir plus clair”.

A gauche, le sac lors de la modélisation. A droite, lors du rendu en utilisant uniquement des triangles.

Vertices

Les vertices (singulier vertex, sommet en français) sont des points dans l’espace 3D qui définissent une forme. Ces points sont les sommets de nos primitives.

Un seul vertex suffit à définir un point, deux font une ligne, trois un triangle et quatre un quadrangle.

Les points en orange sont les vertices

Ces vertices peuvent être partagés et servent à former plusieurs primitives (comme c’est le cas sur l’image au dessus).

Dans ce cas il va falloir dire au programme quels vertices forment une primitive, pour cela on utilisera des indices.

Indices

Un tableau de vertices, aussi nommé vertex buffer

Les indices (singulier index) servent à décrire nos primitives.

Imaginons que nous souhaitions partager nos vertices pour économiser de la mémoire (un seul vertex sera utilisé pour 3 ou 4 triangles par exemple), nous allons les stocker dans un tableau appelé vertex buffer (voir ci-contre).

Les indices correspondront à la colonne ID. On compte toujours à partir de 0, ainsi le premier élément dans le tableau aura l’index 0, le second 1, le troisième 2, et ainsi de suite.

On utilisera donc ces indices pour décrire notre primitive, si on veut par exemple décrire un triangle, on dira que ses trois sommets sont les vertices numéro 0, 4 et 6 (au hasard).

La carte graphique va donc regarder dans le vertex buffer à quoi correspondent ces indices. 0 ? c’est 0,0,0. 4 ? c’est 100,3,45. 6 ? 12,30,0.

Et avec ça elle va donc afficher notre triangle. Plusieurs primitives peuvent donc ré-utiliser les même indices, et donc les même vertices.

On fournit cette liste de vertices à la carte graphique à travers un autre tableau que l’on nomme logiquement index buffer.

Mais les indices ne servent pas seulement à partager des vertices, ils permettent par exemple de choisir la géométrie à afficher.

Imaginons que l’un de vos personnages porte un fourreau à la ceinture, et que dans certaines circonstances vous souhaitez ne pas l’afficher : il vous suffira de retirer les indices décrivant le fourreau de votre index buffer

Textures

Les textures servent à ajouter du réalisme aux modèles 3D. Et parce qu’une image vaut mieux qu’un long discours, voyez vous même :

A gauche sans textures, à droite avec.

Les textures servent donc à ajouter des détails par dessus nos modèles.

Une texture n’est qu’une simple image :

La texture du modèle présenté plus haut

On voit tout de suite le challenge : il faut faire correspondre un modèle 3D à une image 2D… pour cela on doit l’aplatir !

On appelle cela le dépliage d’UV ou UV Unwrapping, c’est une technique qui consiste à faire correspondre à chaque vertex un point sur la texture. Je ne vous cacherai pas que c’est une étape très longue et fastidieuse, heureusement des outils de plus en plus perfectionnés permettent d’automatiser ou de simplifier la tâche.

Le dépliage d'UV : on fait correspondre un point sur la texture à chaque vertex

Ces coordonnées de textures sont exprimées entre 0 et 1 :

Le coin supérieur gauche de la texture correspond à 0,0 et le coin inférieur droit à 1,1

Mentions

Discussion

    Reply