Modélisation 3D – Tour d’horizon

 

Revenons un peu dans le monde de la 3D, après cet aparté sur l’aspect « calcul » de courbes.

Élimination des parties cachées

Je vais expliquer ici les différentes méthodes qui existent pour éliminer les parties non visibles dans une scène 3D, afin d’optimiser aux maximum les ressources.

Algorithme du peintre

Son nom lui sied plutôt bien, car ici on va, pour déterminer quelle partie est visible ou non en fonction de la position de la caméra, commencer par afficher les éléments les plus éloignés possible. A la manière d’un peintre qui voudrait faire une toile : il commence par le fond (ciel),, paysage, montagnes, … etc et il se rapproche en finissant par peindre les objets les plus proches du point de vue de l’observateur.

Méthode de Newell et Sancha

L’algorithme va se placer dans une vue plane sur l’axe de X, Y puis Z. Dans chaque vue, il va vérifier si les formes se chevauchent, si c’est le cas, elle va devoir calculer qui cache qui. Pour se faire, on va récupérer depuis quelle vue le chevauchement est perçu : puis on va vérifier, dans l’ordre :

  1. Les autres faces (X, Y) si les points les plus proches des formes se chevauchent ou non
  2. Ensuite, la profondeur. Que la forme possède ces vertices plus éloignées que l’autre ou vice-versa.
  3. Puis utiliser l’algorithme du peintre pour afficher les éléments.

La méthode du z-buffer

Dans cette méthode, on va récupérer chaque pixel des formes extraites une par une, présentes sur la scène. Puis appliquer une valeur profondeur à chacun. Ensuite, on se place sur la vue de l’axe de Z et on détermine quels sont les pixels qui se superposent (qui ont donc les même x et y). Enfin, on compare pour chaque conflit de pixel, sa valeur en profondeur notée, et la couleur qui a le moins de profondeur est affichée.

z-buffer

Cette méthode est facilement implémentable mais n’est pas spécialement optimisée.

Elle peut provoquer ce qu’on appelle le z-fighting , lorsque deux surfaces sont très proches, les textures des deux se mélangent à l’endroit de jointures et forment des bandes alternatives des deux.

z-fighting

Z-Fighting, bandes de textures confondues

Il est donc plus conseillé d’utiliser le y-buffer pour les formes proches les unes des autres pour éviter ce phénomène, et le z-buffer pour les formes plus lointaines entre elles.

Arbres BSP : Binary Spatial Partition

Cette méthode est très dure à expliquer avec les termes donc je vous ai concocté un petit schéma :

bsp1

Fig. BSP 1

La vue se trouve en dessous, on va arbitrairement se situer sur un axe (par exemple A) qui représente une forme dans l’espace dans la dimension z. On trace une ligne qui représente la séparation à partir de cet axe. D’après la vue de la figure BSP 1, on va pouvoir en déterminer le fameux arbre BSP : on prend toutes les formes qui se trouvent au dessus de l’axe et on les place dans une branche séparée, et celles du dessous dans une autre branche. Les formes coupées par la ligne de séparation sont séparée en deux forme. Par exemple, ici B est séparé en B1 et B2 :

bsp2

Fig. BSP 2

 

On répète l’opération pour chaque sous partie ainsi générée, pour former un arbre, et ainsi, en partant de A, on va pouvoir déterminer en descendant dans les branches, qu’elle partie est devant ou derrière leur parent et tout se met bien en place !

L’algorithme de Warnock

John Warnock, comme je l’ai dit auparavant, est le fondateur d’Adobe ! Et il est aussi à l’origine d’un algorithme à son nom (je vous donne le droit de porter plainte contre Captain Obvious, pour harcèlement), qui permet comme ceux énoncés juste avant de cacher les parties non-visibles dans une modélisation 3D. Basiquement, il fonctionne sur de la subdivision récursive de zone. Voici, en exemple son fonctionnement :

Source :  Wojciech Muła - Wikipédia

Source : Wojciech Muła – Wikipédia

Dans le schéma ci-dessus, on constate que 3 formes son présentes dans la scène. Deux se chevauchent du point de vue de 2 dimensions. Le principe est simple : On va diviser l’image en 4 parties égales à chaque itération, et subdiviser ses parties encore une fois, si elles contiennent au moins deux parties de formes différentes.

Ici, itération n°1, on divise en 4 l’image de base. Chaque cadre contient au moins deux parties de formes différentes. Itération n°2, on subdivise donc chaque partie, l’algorithme de Warnock ne s’attarde plus sur le triangle vert, car il est contenu dans un cadre sans aucune autre partie de forme. En revanche, il y a encore de l’ambiguïté pour les formes bleue et rouge. Itération N°3, on subdivise les parties qui ont besoin de l’être. On trouve pour le cadre à gauche du triangle vert, que la forme bleue et rouge est contenue chacune dans un cadre différent. Plus besoin de subdiviser ici. En revanche, on refait une 4ème et dernière itération pour la partie gauche de l’image, ou les formes bleue et rouges n’étaient pas encore séparées.

De longues explication probablement inutile la logique ressort assez vite, toutefois, il est important à la fin de constater, que chaque case contient une couleur spécifique, et quand ce n’est pas le cas, comme certaines ici, c’est qu’on est arrivé à la limite du pixel ! Effectivement, un pixel ne peut pas être divisé, il est atomique !

Méthode des plans de balayage

Dernière méthode que nous allons passer en revue, est la méthode des plans de balayage. [Article en cours de rédaction]

 

Le calcul des éclairages

Dans cette dernière partie nous allons voir comment fonctionnent en général les procédés d’éclairages dans notre scène 3D. On verra les différents types, les calculs utilisés, les méthodes de réfraction et réflexion, etc … comme dans les précédents chapitres, on ne va que prendre connaissance des procédés, sans creuser le sujet en profondeur, car le but reste de listes les besoins, procédés et techniques différentes qui existent lors d’une modélisation 3D.

Les types d’éclairages

Modèles locaux :

Pas d’ombres portées, calcul indépendant de l’éclairage sur chaque objet : c’est le mode d’éclairage le moins couteux en performance, et il est utilisé en temps réel.

Modèles globaux :

Tout est pris en compte : réflexion, ombres portées. Ce modèle d’éclairage est utilisé en différé (films d’animations, …) car il requiert une forte puissance de calcul.

Modèles semi-globaux :

On s’intéresse dans ce modèle uniquement aux ombres : tout ce qui est lié aux effets de lumière ne sont pas calculés (réfraction/diffraction/réflexion).

 

Lumières

Nous allons parler dans cette partie, des différentes sources de lumières qui composent la panel d’outil d’éclairage des scènes. Il en existe 4 types à ma connaissance :

  • La lumière ambiante :
    • Pas de source localisée, lumière naturelle
  • La lumière directionnelle :
    • Source de lumière lointaine, envoi des faisceaux lumineux parallèles
  • Lumière ponctuelle :
    • C’est une lumière directionnelle mais qui diffuse avec une intensité différente sur 360°. Par exemple, la source éclairera plus derrière et moins devant, mais la lueur est quand même diffusée tout autour, et pas que dans une direction
  • Spot de lumière :
    • C’est une lumière ponctuelle mais avec un angle de diffusion ( < 360 °)

Réaction des matériaux à la lumière

Lorsqu’on affiche les matériaux soumis à un/des éclairage(s), la première chose à prendre en compte est la couleur ! Puis on s’occupe de l’alpha (la transparence). Viens le tour de la lumière ambiante de l’objet en question.

Quelques mots de vocabulaire :

  • Réflexion diffuse : c’est le changement de ton de la couleur en fonction de l’éclairage
  • Réflexion spéculaire : se sont les reflets blanc que vous voyez lorsque un matériau exposé à une lumière brille et sature en lumière. (reflet blanc sur une surface lisse par exemple)
  • La lumière émise : lumière émise par l’objet (phosphorescence, rétro-éclairage, écran …)

 

Optique géométrique

 

 

 

Pages: 1 2 3

Laisser un commentaire