Les mondes de la 3D

Les mesh

Les formes 3D en réalité virtuelle peuvent être modélisées sous forme de liste de triangles ou de liste de quads (voir image ci-dessous). On parle de maillage ou de mesh en anglais. Ces maillages sont plus ou moins denses suivant la qualité du rendu recherchée :

../_images/malehead.jpg

Le monde du jeu vidéo

Le monde du jeu vidéo requiert un affichage temps-réel atteignant 60 images par seconde (60 fps). La puissance de calcul demandée nécessite l’utilisation de GPU pour atteindre des performances suffisantes. L’algorithme de rastérisation (rasterization algorithm) utilisé par les GPU est très simple et efficace : chaque triangle de chaque forme est dessiné indépendamment. Ainsi les milliers de cœurs d’un GPU travaillent en parallèle pour dessiner des millions de triangles texturés en moins d’un centième de seconde. Cependant, cette approche très rapide ne permet pas de réaliser des effets complexes. Il faut donc passer par des astuces pour améliorer la qualité du rendu, comme par exemple : précalculer l’ombre d’un bâtiment sur le sol et la stocker dans une image/texture pour l’utiliser telle quelle lors du rendu.

Le monde du cinéma

Parallèlement au monde des jeux-vidéo existe un autre univers tout aussi important : celui des films, de la publicité (70% des publicités incluent des images de synthèse aujourd’hui) et de l’architecture. Les contraintes sont différentes : la qualité du rendu doit être très haut de gamme. Les algorithmes utilisées sont plus complexes et l’on recherche soit le photoréalisme soit l’effet Wahou ! En moyenne, le temps de calcul pour une image se situe autours de 24h/CPU, nous sommes loin des contraintes du temps-réel.

Quel temps de production prend un film d’animation ? Une production de type Pixar ou Disney de 120 minutes à 24 images/seconde comporte ~170 000 frames soit ~170 000 jours de calcul pour un CPU. Une baie de calcul (une sorte d’armoire remplie de CPU) contient en moyenne 40 lames contenant jusqu’à 4 CPU chacune. La mise en place de 12 baies de calcul de ce genre ramène donc la production à ~90 jours de calcul soit trois mois ce qui représente une durée acceptable. Les premières « Render Farm » hollywoodiennes ont vu le jour dans les années 90. Quant aux 2000 CPU requis, cela coûte aujourd’hui environ 2 millions de $. Comparé aux 100 à 200 millions de $ que coûte la production d’un film d’animation, cette dépense est tolérable ! Aujourd’hui ces fermes de rendu n’existent plus car vers 2010, la puissance de production s’est déplacée sur le Cloud afin de gagner en rapidité (beaucoup plus de CPU disponibles) et en baisse des coûts.

Notre projet

Dans ce projet, nous allons mettre en place un moteur de rendu « from scratch » en utilisant des modèles géométriques simples : des sphères et des rectangles. Ce choix va nous permettre d’aller très loin dans les algorithmes de rendu, de créer des scènes tout à fait impressionnantes et pour lesquelles la puissance de calcul CPU devrait être suffisante. Le but ultime du projet est d’arriver à mettre en place des méthodes issues des studios de production cinéma comme celle du pathtracing ou du raytracing.

Un autre objectif de ce module est de limiter l’aspect mathématique en n’utilisant pas d’algèbre linéaire ce qui est souvent un incontournable dans les cours de 3D. Ce choix permet aux élèves de se concentrer sur la partie développement / programmation / algorithmique, ce qui en soit représente déjà un challenge important vu le temps disponible. Dans cette optique, les objets géométriques restent fixes dans la scène 3D, il n’y aura pas de rotation à gérer et la position des objets sera donnée en coordonnées absolues relativement au repère principal. Ainsi, nous évitons la gestion des sous-repères.