Rendu volumique direct
Le rendu volumique direct est une technique utilisée pour afficher une projection 2D d'une série de données 3D.
Rendu volumique direct
Le rendu volumique direct nécessite que chaque valeur échantillonnée au sein du volume soit associée à une opacité et une couleur.
Cela est effectué grâce à ce que l'on appelle une fonction de transfert f
f (valeur_échantillonnée)→(couleur, opacité)
Celle-ci est généralement modélisée par une fonction linéaire par partie (tableau à deux dimensions contenant les valeurs des points anguleux de la fonction) mais également par tout autre type de fonction (fonction en escalier, etc.).
Les valeurs d'opacité et de couleur sont converties en composantes RGBA (canaux red, green, blue pour la couleur, et canal alpha pour l'opacité) et le composé résultant est projeté sur le pixel correspondant du frame buffer. La façon dont cela est fait dépend de la technique de rendu. Ces techniques peuvent être combinées afin de tirer parti des différents avantages qu'elles comportent.
Par exemple une implémentation de type shear sharp peut utiliser les routines de texturage matériel de la carte graphique afin de dessiner les tranches alignées.
Le lancer de rayons
Le moyen le plus commun de projeter une image 3D est le lancer de rayons à travers le volume. Cette technique consiste à générer un rayon pour chaque pixel de l'image désirée.
Généralement le rayon est échantillonné à pas régulier à l'intérieur du volume et les valeurs des couleurs RGBA des pixels ainsi calculées sont sommées dans le frame buffer au prorata de leur contribution de transparence Alpha.
Ce type d'algorithme est aisément parallélisable sur des architectures SIMD.
Splatting
Cette technique compromet la qualité de rendu du lancer de rayon pour y gagner en rapidité de traitement : chaque sous-élément volumique du volume à rendre est projeté directement dans le plan écran en utilisant une représentation 2D appropriée à ces sous-éléments (généralement ellipsoïde) dont les propriétés de couleur et de transparence varient doucement du centre vers l'extérieur de la projection.
Selon l'application, des représentations 2D aux propriétés uniformes sont aussi utilisées.
Shear warp
C'est une nouvelle approche de rendu volumique développé par Philippe Lacroute et Marc Levoy. Dans cette technique, le volume est transformé de telle sorte que les rayons émis soient alignés sur l'axe de la normale de la face du volume la plus proche du point de vue. Chaque tranche du volume subit donc une translation et une mise à l'échelle.
Ainsi les tranches du volume (textures 2D) sont accumulées successivement de la plus proche à la plus éloignée en respectant la contribution de chaque échantillonnage au pixel final. Cette image intermédiaire est ensuite transformée pour respecter les déformations liées à la perspective du point de vue.
Cette technique est relativement rapide au prix d'un échantillonnage moins précis et donc d'un potentiel rendu de mauvaise qualité par rapport au lancer de rayons classique.
Elle est utilisée afin de :
- réduire le coût :
- de projection des algorithmes de rendu orientés objets.
- des lancers de rayon des algorithmes orientés image.
Placage de texture
Le placage de texture sur des objets géométriques est aujourd'hui réalisé de manière matérielle par la plupart des systèmes graphiques 3D. Il est donc aisé de visualiser des tranches du volume pour un temps de calcul modique.
Ces tranches peuvent être alignées avec le volume et rendues avec une orientation dépendant de la position du point de vue. Ce type de visualisation apporte une grande rapidité mais au détriment d'un rendu de qualité moyenne.
Un autre type de visualisation consiste à ré-échantillonner le volume par des tranches alignées avec le point de vue. On gagne ainsi en qualité de rendu mais au détriment du coût de ré-échantillonnage du volume à chaque image.
Rendu accéléré par le matériel graphique
Une technique récemment exploitée pour accélérer le rendu est l'utilisation de cartes graphiques modernes pour accélérer les algorithmes traditionnels comme le lancer de rayons.
L'apparition des shaders sonna l'avènement de la GPU comme une architecture SIMD très bon marché et idéal pour réaliser toutes sortes de calculs parallèles.
Les pixels shaders sont capables de lire et d'écrire très rapidement la mémoire de texture, d'effectuer des opérations logiques et mathématiques basiques.
Ils se révèlent d'une grande utilité lors de traitements lourds tel que le lancer de rayon et plus généralement le traitement du signal.
Avec OpenGL version 2.0, les shaders sont maintenant capables de fonctionner comme des architectures MIMD (ils sont capables de branchements indépendants) avec 48 unités de traitements parallèles utilisant jusqu'à 1Go de mémoire de texture et des formats numériques d'une grande précision.
Une telle puissance augmente de façon radicale la rapidité d'exécution d'algorithmes comme le lancer de rayon, permettant même de les utiliser pour du rendu en temps réel !