Voxel

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Schématisation d'une matrice de voxels en nuances de gris.
Une série de voxels dans une pile avec un seul boxel marqué

Le voxel (contraction de « volumetric pixel ») est un pixel en 3D. Le voxel est un terme nettement plus souvent utilisé que son synonyme, le boxel. Il consiste à stocker une information colorimétrique avec ses coordonnées spatiales, voire temporelles, de positionnement ainsi que, facultativement, une taille relative à l'unité utilisée ou d'autres informations telles qu'une matière… Ils s'inscrivent plus généralement dans des espaces matriciels bien que les espaces vectoriels leur soient favorables. On notera que leurs coordonnées spatiales peuvent être polaires.

Leur point faible (par rapport à la 3D vectorielle) est de nécessiter énormément de ressources, tant pour leur stockage que pour leur rendu qui ne bénéficie pas d'accélération matérielle. Cependant, des algorithmes de compression traditionnels à l'imagerie numérique ou l'informatique peuvent être employés sans difficulté.

Différence entre voxel et boxel[modifier | modifier le code]

Le terme « boxel » dérive du terme anglais box, qui signifie « boite ». Ils constituent une sous-catégorie des voxels. Le terme « voxel » est donc plus généraliste que le terme « boxel » et l'on distinguera alors l'aspect vectoriel des voxels en opposition à l'aspect matriciel des boxels.

Un boxel n'est rien d'autre qu'un pixel volumique matriciel. Sa représentation basique se fera donc sous la forme d'un cube au sein d'une matrice (i.e., d'une grille) tridimensionnelle (i.e., en 3D). Cependant, diverses techniques de rendu permettent d'en arrondir les angles selon la nature des boxels adjacents (à la manière des metaballs). Ils sont généralement associés à des octrees pour leur manipulation et leur stockage (bien que ceci ne constitue en rien une obligation).

Néanmoins, la nuance entre ces deux termes n'est pas réellement factuelle. En effet, la plupart des moteurs utilisant des voxels utilisent en réalité des boxels, et comme les boxels sont des voxels, on utilisera plutôt le terme de « boxel » dans le langage usuel pour faire référence à une méthode de traitement matricielle en opposition aux techniques vectorielles.

Cette différence n'est de fait pas réellement pertinente car les diverses techniques (de stockage, de manipulation, de rasterisation, de rendu, etc.) sont souvent mixées et cumulées.

Par exemple, rien n'empêche de rendre graphiquement un voxel vectoriel avec les techniques utilisés par les boxels, c'est-à-dire, dans un espace matriciel via l'utilisation du Wu-Pixeling appliqué aux espaces matriciels tridimensionnels. Ceci consiste juste à transposer les coordonnées vectorielles du voxel dans un espace matriciel constitué de boxels via une synthèse additive proportionnelle de la couleur des boxels adjacents.

Imagerie médicale[modifier | modifier le code]

Le voxel s'avère particulièrement adapté à la représentation de volumes à partir de plusieurs images de coupes. C'est pour cette raison qu'il est souvent utilisé en imagerie médicale 3D (Scanner, IRM ...) ainsi qu’en géophysique et en astrophysique où il offre un résultat rapide et suffisant.

Voir par exemple le scanner à rayons X (ou CT).

Rendu par voxel[modifier | modifier le code]

Le voxel est principalement utilisé pour le rendu des terrains dans les jeux vidéo (Outcast étant un de ses grands représentants) en utilisant une Heightmap (en) combinée avec un Y-Buffer. La technique consistait à afficher le terrain colonne par colonne en ne prenant en compte que les voxels dont la hauteur était supérieure au Y-Buffer, ce dernier prenant comme valeur la hauteur de la dernière colonne affichée. Les parties non visibles de la scène étaient ainsi tout simplement ignorées lors du rendu, ce qui offrait un fort gain de ressources.[1]

Une des optimisations les plus remarquables offerte par le voxel apparaît lorsque l'on passe de l’utilisation d'une matrice de voxel à l'utilisation d'un arbre ayant comme racine chaque voxel et dont chaque nœud père est un voxel faisant la moyenne de ses fils (couleur, texture). Plusieurs optimisations apparaissent alors :

  • Premièrement, si un nœud contient plusieurs fils ayant toutes les mêmes caractéristiques (couleur, texture), alors il est possible de les supprimer sans perdre en détail.
  • Deuxièmement, le niveau de détail peut être géré très facilement en parcourant en profondeur l'arbre et en s’arrêtant dès que la taille du voxel est inférieure à la taille d'un pixel.[1]

Ces deux optimisations permettent un gain de mémoire mais surtout une vitesse d'affichage équivalent quel que soit le niveau de détail de l'objet, son gros désavantage étant son coût lors de la modification de l'arbre qui devient alors énorme là où une matrice le gérait aisément. Le dessin par triangle reste donc le plus courant dans les moteurs 3D, même si le voxel devient de plus en plus utilisé pour créer de grands environnements souvent entièrement interactif (comme Space Engineers).

Quelques moteurs 3D utilisant un rendu par voxel :

  • (en) WinUFO et SimUFO. Il existe un applet Java pour tester WinUFO en ligne. SimUFO permet d'éditer directement le paysage dans le programme.
  • (en) Atomontage est un moteur hybride de 3D temps réel de nouvelle génération dédié aux jeux vidéo gérant la géométrie tant en voxel qu'en vectoriel, la physique et l'éclairage.

Jeux vidéo utilisant les voxels[modifier | modifier le code]

Les jeux vidéo utilisant un moteur de rendu 3D par voxel sont peu nombreux. On peut citer :

Voir aussi[modifier | modifier le code]

Lien externe[modifier | modifier le code]

Notes et références[modifier | modifier le code]