Moteur 3D

Un article de Wikipédia, l'encyclopédie libre.

Schéma d’un pipeline de rendu avec indication du lieu d'intervention (en rouge) des pixel et des vertex shaders.
Schéma d’un pipeline de rendu avec indication du lieu d'intervention (en rouge) des pixel et des vertex shaders.

Sommaire

[modifier] Généralités

Un moteur 3D est une bibliothèque dont les principales fonctions sont :

  • de gérer des objets dans un espace tridimensionnel virtuel, appelé la scène ;
  • d'afficher à l'écran cette scène à partir d'un point de vue spécifié, cet affichage peut présenter la scène sous différentes projections.

L'opération d'affichage est appelée le rendu (rendering en anglais).

Il existe plusieurs méthodes de rendu 3D, les plus connues sont :

  • le ray-tracing ou lancer de rayons : pour chaque point (pixel) de l'image à afficher le moteur tire un rayon partant de la caméra et calcule ce qui lui arrive (intersection avec les surfaces des objets, réflexions, réfractions ...) et affiche le pixel de l'image avec la couleur ainsi déterminée en fonction des sources de lumière, des matériaux ...
  • le rendu de polygones : les objets sont représentés sous forme de surface polygonale (des triangles dans le cas le plus général) auquel le moteur fait subir différentes transformations géométriques (transformations dans l'espace puis projection), puis qu'il rend en fonction de leur éclairement et de leur couleurs ou texture.

Les moteurs 3D doivent en général faire du rendu en temps réél avec une vitesse de l'ordre de 60 images par seconde (pour les jeux vidéos) et la technique utilisée dans ce cas est le rendu de polygones, car les calculs d'intersection de rayon avec des surfaces dans l'espace sont actuellement très gourmant en temps CPU (quoi que certains rêvent bientôt à du ray-tracing en temps réél).

Le ray-tracing est peu utilisé dans les moteurs 3D, et ce sont plutôt les modeleurs 3D qui peuvent l'utiliser. Son gros avantage est qu'il gére nativement les problèmes de réflexion, de réfraction, d'ombres portées et qu'il peut également gérer les surfaces non polygonales (dites aussi "surfaces gauches"). Nous parlerons donc du rendu de polygones dans la suite de cet article.

L'objet est représenté sous forme d'un ou plusieurs maillages (mesh), composés de triangles (dans le cas général). Ces maillages sont un ensemble de sommets (vertex pl. vertices) reliés.

Les transformations géométriques permettent de savoir où afficher chacun des points du maillage sur l'écran.

L'ombrage des faces (shading, qui veut dire littéralement hachurage) permet d'afficher la surface des triangles (sinon on aura le fameux affichage "fil de fer" en reliant uniquement les sommets entre eux) selon plusieurs algorithmes. Cet ombrage va imposer :

  • d'avoir un modèle d'illumination
  • de savoir quels sont les faces affichées afin :
    • de ne pas écraser une face visible par une face non-visible qu'on affiche tout de même
    • de ne pas perdre du temps sur les faces invisibles (performance)
  • d'avoir des paramètres de visualisation pour chacune des faces : couleur, texture, et autres paramètres exigés par exemple par le modèle d'illumination (normales, ...)

Ainsi les transformations géométriques permettent de tracer le maillage, le shading de le remplir.

[modifier] Les transformations géométriques

(le but de cette rubrique n'est pas de faire un cour de géometrie dans l'espace, seulement d'expliquer certains termes ou méthodes utilisées).

[modifier] A compléter ...

Un moteur 3D manipule généralement des objets stockés sous la forme d’ensembles de polygones triangulaires; chaque triangle est formé par 3 points, et chaque point, ou plus précisément chaque vertex est représenté par ses 3 composantes X, Y, et Z, représentant ses coordonnées dans l'espace tridimensionnel, par les 3 composantes du vecteur normal (pour le calcul de réflexion de la lumière), Vx, Vy et Vz, ainsi que d'une couleur. Un ensemble de vertex est appelé un meshe. Un objet est composé d'un ou plusieurs meshe.


Depuis 1996 les moteurs 3D grand public ont commencé à tirer profit des fonctionnalités des nouvelles puces graphiques capables de gérer une partie des calculs nécessaire à l’affichage 3D, tandis qu’Intel lançait ses premiers processeurs équipés du jeu d’instructions MMX destiné à améliorer les performance des PC en matière de multiplication de matrice.


Pour accéder aux services offerts par un moteur 3D, on utilise généralement une interface de programmation ou API. Un programmeur choisira parmi les API graphiques disponibles lorsqu'il développera un moteur 3D accéléré. Les plus courantes sont :

  • DirectX créée par Microsoft est utilisable uniquement sur les plateformes Windows.
  • OpenGL initiée par Silicon Graphics (SGI) sous le nom de GL, utilisable désormais sur un grand nombre d'architectures.


Certains moteurs graphique, comme le CryEngine 2 utilisé dans Crysis[1], s'approchent du photoréalisme.


Quelques moteurs 3D :

[modifier] Liens externes

[modifier] Notes et références