Rendu 3D : le raycasting de voxels

Un peu d’histoire…

Les expérimentations de Carmack avec les voxels ne datent pas de l’an dernier, en fait tout ça date d’une dizaine d’années. Entre les moteurs de Quake/Quake II et celui de Quake III,  John Carmack a réalisé plusieurs expérimentations avec de nouvelles techniques de rendu. Il a désigné  l’ensemble de ses recherches sous le nom de code Trinity que beaucoup de joueurs ont vu comme un futur produit, la nouvelle génération de moteurs 3D de chez id Software alors qu’au final le moteur de Quake III est resté assez conventionnel comme il l’a révélé lui-même dans un de ses .plan datant de 1998 :

«Voici quelques notes sur les technologies que j’ai explorées durant la mise au point du moteur de Quake III/Trinity.  J’ai consacré initialement plusieurs mois à des recherches assez ouvertes mais il s’est avéré finalement qu’aucune de ses recherches préliminaires n’ont eu de rapport avec les directions que j’ai finies par choisir. Ah tant pis, j’ai beaucoup appris au passage et cela paiera probablement dans quelques temps. »

Parmi ses expérimentations se trouvaient l’affichage d’octree de voxels. Voici ce qu’il déclarait peu de temps après la sortie de Quake III :

« J’ai écrit ces deux moteurs de rendu voxel au début du développement de Quake III et j’en suis arrivé au point où je pensais pouvoir pratiquement les faire tourner de façon logicielle mais ça aurait été à une résolution assez faible et comparé à ce que l’on pouvait faire à cette vitesse avec des triangles accélérés par le matériel, ça n’était pas rentable.

J’ai fait une analyse de ce que seraient les motifs d’accès mémoires, etc, on peut faire un raytracer de voxels en hardware avec nettement moins de matériel que ce que nous utilisons à l’heure actuelle pour les rasterizers de triangles et je pense que ça pourrait être une représentation visuelle beaucoup plus attirante dans de nombreux cas. »

Cette citation est extraite d’une interview de Firing Squad datant du début de l’an 2000, il y a prés de dix ans, on peut donc dire que cette idée trotte dans la tête de John Carmack depuis un bon moment.

Il est impossible de parler de voxels sans mentionner Outcast. Ce jeu sorti il y a plus de 10 ans (juillet 1999, voilà qui ne nous rajeunit pas) a marqué toute une génération de joueurs par ses multiples qualités mais aussi pour son moteur 3D si particulier à cette époque où les cartes 3D s’étaient imposées dans les PC des joueurs. En effet Outcast reposait sur un moteur de rendu totalement logiciel ce qui le rendait particulièrement gourmand, pour pouvoir faire tourner le jeu dans sa résolution maximale (un impressionnant 512x384 !) il fallait un processeur dernier cri (mais pas de carte d’accélération 3D). Mais la gourmandise n’est pas la seule raison qui fait que ce moteur 3D a marqué les esprits, son utilisation des voxels a également assuré au jeu un rendu véritablement unique.

Pour autant il faut relativiser quelque peu cette affirmation : si le jeu est resté (en compagnie des jeux de Novalogic) le porte étendard du rendu à base de voxels, en réalité il n’en utilisait qu’une forme assez simplifiée et uniquement pour le terrain. Tous les objets ainsi que les personnages étaient pour leur part des modèles polygonaux tout ce qu’il y a de plus classiques. Le terrain pour sa part reposait sur une heightmap (carte de hauteur), de ce fait il n’y avait qu’une seule hauteur possible pour chaque point du terrain, ce qui interdisait des structures complexes comme des arches par exemple.

Ce problème n’était pas vraiment rédhibitoire car ce type de structures reste assez rare dans la nature du fait des contraintes de la physique. L’affichage du terrain était assez simple et se faisait colonne par colonne. Pour chaque colonne une valeur maximale en Y était stockée (Y-Buffer) ensuite les pixels de la colonne en question étaient remplis du bas de l’écran vers le haut uniquement si leur valeur Y était supérieure à celle stockée dans le Y-Buffer.  Cette méthode de rendu permettait une suppression très efficace et très simple des parties non visibles de la scène.

Après ce retour dans le passé il est temps de voir maintenant ce que nous réservent les voxels dans le futur.