Aller au contenu

Moteur 3D

Un article de Wikipédia, l'encyclopédie libre.
Schéma d’unpipelinede rendu avec indication du lieu d'intervention despixelset desvertexshaders(en rouge).

Unmoteur 3Dest uncomposant logicielqui crée desimages matriciellesà partir de coordonnées tridimensionnelles. C'est un composant fréquent desmoteurs de jeuet de logiciels de calcul et de simulation (par exemple logiciels dedessin assisté par ordinateur,conception assistée par ordinateur,éléments finis…).

La plupart du temps, le moteur 3D est indissociable du reste dumoteur de jeu,comme lemoteur physiqueou lemoteur de sonpar exemple. Néanmoins certains moteurs 3D fonctionnent tout seuls, ils fournissent alors un ensemble de fonctions permettant à leur utilisateur de l'intégrer aux autres moteurs.

L'opération d'affichage est appelée le «rendu».

La sociétéIntela commercialisé desprocesseurséquipés du jeu d’instructionsMMX,destiné à améliorer les performances des ordinateurs personnels en matière de multiplication de matrices (le calcul matriciel a permis de masquer les équations originelles, mais ralentit le moteur 3D). Depuis le débug des années 2000, MMX et3DNow!(l'équivalent de MMX chezAMD) ont été remplacés parSSEsur tous les processeurs modernes.OpenGLutilise également le calcul matriciel, ainsi que toutes les «cartes graphiques3D ».[réf. nécessaire]

Méthodes de rendu

[modifier|modifier le code]

Il existe plusieurs procédés derendu 3D(procédés de calculs destinés à obtenir uneimage matricielleen deux dimensions). Les procédés les plus communs sont leray tracinget larastérisation.

Larastérisationest le procédé le plus utilisé pour les jeux vidéo. Le peu de temps nécessaire pour calculer une image selon ce procédé permet d'obtenir en continu des images à un rythme suffisamment élevé pour faire du temps réel (jeux vidéo).

Leray tracingpermet d'obtenir une image d'une qualité supérieure à celle de larastérisation(voirphotoréalisme). Les calculs complexes effectuées dans ce procédé nécessitent beaucoup de temps et de puissance de calcul et ne permettaient pas, jusqu'à peu, d'obtenir une image dans un délai suffisamment court pour être utilisé dans un jeu vidéo, mais des progrès sont en cours. Le ray tracing est utilisé pour réaliser des images fixes et desfilms d'animation.

L'accélération matérielleconsiste à utiliser dans la mesure du possible leprocesseur graphique- souvent inclus dans lacarte graphique- pour effectuer les calculs. Le but est de gagner du temps en libérant leprocesseur centralpour d'autres tâches telles que l'arbitrage du jeu, les calculs dumoteur physiqueet dumoteur de son,l'intelligence artificielle,etc. Afin de profiter de l'accélération matérielle, les moteurs 3D font souvent usage des possibilités debas niveaudesbibliothèques logiciellestelles queDirectXouOpenGL.

Avec le lancement de la technologieLarrabee,le développement duparallélisme,et plus généralement l'augmentation de la vitesse desprocesseurs graphiques,certaines personnes pensent que le ray tracing pourra dans le futur être utilisé pour faire du rendu temps réel[1].

Le procédé delancer de rayon(anglaisray tracing) consiste à calculer le chemin parcouru par le rayon de lumière correspondant à chaque pixel de l'image. Le moteur 3D calcule le chemin en le parcourant en sens inverse en suivant les règles de la physique telle que laréflexionet laréfraction.Il effectue différents calculs d'optique géométrique.

Comme le calcul de couleur est répété une fois par pixel, cette technique peut tirer grandement parti duparallélisme.

Rastérisation

[modifier|modifier le code]

Larastérisationourendu de polygonesest un procédé où les objets sont représentés sous forme de triangles auquel la carte graphique fait subir différentes transformations géométriques afin de les projeter sur l'écran.

Une fois les coordonnées 2D des triangles connues, la carte transforme ceux-ci en un ensemble de pixels, puis calcule la couleur de chaque pixel individuellement.

Lorsque la rastérisation est effectuée par la carte graphique, l'utilisation deshaderspermet de modifier les différentes étapes du rendu, dans le but d'ajouter des effets graphiques personnalisés.

Valeur ajoutée d'un moteur 3D

[modifier|modifier le code]

Si les APIs de bas niveau permettent de dessiner des objets à l'écran, celles-ci restent assez complexes. Pour un développeur de jeux, il est ainsi préférable d'utiliser un moteur 3D qui lui permettra d'obtenir beaucoup plus facilement le rendu qu'il désire.

Pour cela le moteur fournit notamment des fonctions permettant de charger des fichiers dans différentsformats,d'animer les modèles en fournissant uniquement le nom de l'animation et ainsi de suite, son but étant de simplifier au maximum le travail du concepteur du jeu.

Bien que lesprocesseurs graphiquessoient de nos jours très puissants, les jeux vidéo tentent en permanence de repousser leurs limites. L'optimisation est d'autant plus nécessaire sur PC où de nombreux joueurs potentiels ne possèdent pas de carte graphique dernier cri.

L'optimisation dépend beaucoup du type de jeu. Par exemple:

  • l'utilisation d'octrees(en extérieur) ou d'arbres BSP(en intérieur)
  • pour les jeux affichant de très nombreuses unités (exemple: la sérieTotal War), l'utilisation de modèles 3D simplifiés pour les objets éloignés de la caméra.

Utilisation d'effets

[modifier|modifier le code]

Si les techniques de rendu offrent de nombreuses possibilités, c'est le rôle du moteur 3D d'exploiter ces possibilités afin de créer des effets graphiques.

Cela inclut:

  • Skybox,technique d'affichage du ciel;
  • Ombres portées;
  • Billboardsnotamment pour les particules;
  • Bump mapping;
  • Reflets sur une surface ou dans un miroir.

Voir l'articlerastérisationpour des détails sur la mise en œuvre de ces effets.

Quelques moteurs 3D

[modifier|modifier le code]

Notes et références

[modifier|modifier le code]

Articles connexes

[modifier|modifier le code]

Liens externes

[modifier|modifier le code]