Sous-sections

Placage de texture

Le placage de texture (texture mapping) est la plus simple et la plus ancienne des technique à base d'images. Le principe est de remplacer un objet géométrique complexe par un objet plus simple sur lequel on applique une image de la surface de l'objet complexe d'origine. C'est une technique puissante et éprouvée, actuellement intégrée dans toutes les cartes graphiques qui obtiennent dans ce domaine des performances impressionnantes et toujours croissantes1.13.

Dans cette section, nous présentons le placage de texture et ses extensions que sont le placage de bosselures (Bump Mapping), l'ombrage par carte d'horizon (Horizon Mapping) et le Déplacement de Surface (Displacement Mapping). La technique du déplacement de surface a été implémentée de façon approchée dans plusieurs méthodes que nous détaillons.


Placage de texture classique

Le placage de texture a été introduit par Catmull [Cat74] et étendu par Blinn et Newell [BN76]. Le placage de texture permet d'ajouter du réalisme à une scène pour une relativement faible augmentation de la complexité du programme et du temps de rendu. Dans sa forme la plus simple, le placage de texture dépose une image (une texture) sur un objet de la scène. L'algorithme se décompose en deux phases : la transformation de l'image de l'espace texture à l'espace écran et le filtrage pour traiter les problèmes d'aliassage. Une description des différentes techniques de placage peut être trouvée dans [Hec86]. Le placage peut être effectué, entre autres, par balayage des pixels dans l'espace de l'écran (placage inverse) ou dans l'espace de la texture (placage direct). Le placage inverse est le plus employé en pratique et est implanté en particulier dans toutes les cartes graphiques.

Une fois que le placage a été effectué et la texture déformée sur la surface, l'image (la texture projetée à l'écran) doit être filtrée. Les techniques de filtrage de l'image, issues du Traitement du Signal, sont très nombreuses et les détails peuvent être trouvés dans [PM88,GW92]. En rendu en temps réel toutefois, les méthodes utilisées sont celles qui sont les plus rapides à calculer : interpolation bilinéaire, mip-mapping, filtrage trilinéaire et le filtrage anisotropique. Pour une description de ces algorithmes, voir [AMH02]. Le filtrage anisotropique est une approximation du filtre par moyenne pondérée elliptique (EWA,''Elliptical Weighted Average'') introduit par Heckbert[Hec89], et est le filtre qui donne les meilleurs résultats visuels actuellement. Les cartes graphiques ne l'implémentent pas directement car il est trop coûteux en accès mémoire, mais utilisent différentes formes approximées de ce filtre en se basant sur quelques échantillons de l'ellipse. Les positions de ces échantillons (et leur nombre) peuvent être choisies de façon fixée, ou de façon stochastique, ou encore de façon guidée par l'orientation de la surface.

Le placage de texture ne fonctionne bien que pour des surfaces planes ou légèrement courbées. De plus, des objets réalistes trés détaillés nécessitent beaucoup de textures, qui peuvent de plus nécessiter d'être traitées en plusieurs passes, ralentissant d'autant les performances. Des phénomènes tels que la fumée, le feu ou l'eau sont difficiles à traiter en employant cette méthode.


Placage de bosselures

Le placage de texture ajoute des détails à une surface en en modifiant la couleur, mais cette couleur reste la même quelque soient les conditions d'éclairement, ce qui révèle que le relief représenté par l'image n'est qu'une illusion. Pour améliorer un peu les choses, Blinn [Bli78] a introduit le bump mapping (litt. ''placage de bosselures''). Il s'agit d'une technique permettant de modifier l'apparence de la surface en fonction de l'éclairement, de façon a donner l'illusion d'une surface en relief. Le principe est de perturber la normale à la surface en fonction d'une carte de hauteurs. Cette carte de hauteurs permet de déterminer l'orientation de la normale en chaque pixel, normale qui est utilisée en lieu et place de celle de la surface lors des calculs d'éclairement. Ainsi, des zones sombres apparaissent sur la surface, ce qui est interprété par l'oeil comme de l'ombre dûe à du relief. Les résultats sont trés probants, bien qu'une fois encore, un angle rasant ou l'observation des bords (droits) montre qu'il s'agit d'une surface plane (cf. figure 1.8 (a) page [*]).

Le placage de bosselures est implémenté dans toutes les cartes graphiques actuelles, bien que sous différentes formes simplifiées (Emboss Bump Mapping1.14 [Sch94]) en raison de la perte de performances qu'il induit. En effet, il faut stocker et plaquer d'une part la texture de couleur, et d'autre part la carte de hauteurs. De plus, le calcul de la perturbation de la normale doit être évalué en chaque pixel, et il s'agit là d'une opération coûteuse. Depuis peu, le bump mapping peut être implémenté sans approximations car les calculs effectués par la carte graphique peuvent être programmés directement, au même titre que le processeur central.

Néanmoins, avec la hausse de la taille mémoire des cartes graphiques, le calcul de perturbation peut maintenant être précalculé et stocké directement. Au lieu d'utiliser une carte de hauteurs (une valeur de profondeur par texel) pour perturber la normale à la surface, on stocke directement la valeur de la normale (trois composantes $ (dx,dy,dz)$) en chaque texel. Cette technique est appelée dot3 bump-mapping par référence au produit scalaire effectué entre la position de la lumière et la normale à la surface, lors du calcul d'éclairement de Phong. Les normales peuvent être exprimées dans l'espace objet (objet statique) ou dans l'espace tangeant1.15(objet déformable) auquel cas la position de la lumière doit être transformée dans ce système de coordonnées lors du calcul d'éclairement.


Auto-ombrage

Ombrage par carte d'horizon

Afin d'augmenter encore l'impression de relief, Max introduit la technique de l'horizon mapping [Max88]. Une carte d'horizon est créée sur la base d'une carte de hauteurs. Cette carte d'horizon stocke, pour un nombre fixé d'azimuths (8 dans la publication originale), l'angle d'élévation à partir duquel un rayon issu du texel n'intersecte plus le relief. Lors du rendu, cette information est utilisée pour savoir si un pixel est dans une zone d'ombre ou pas en fonction de la position de lumière. L'impression de relief est encore plus saisissante que pour le bump mapping, bien que les bords du modèles révèlent qu'il s'agit d'une surface plane (cf. figure 1.8 (b) page [*]).

Bien que Sloan et Cohen [SC00] aient proposé un algorithme en plusieurs passes permettant d'effectuer cette technique intégralement par la carte graphique, l'horizon mapping tel quel reste une technique coûteuse à utiliser car d'une part le rendu en plusieurs passes prend du temps, et d'autre part la carte de visibilité (d'horizon) occupe beaucoup d'espace mémoire.

Figure 1.8: Les principales techniques de rendu à base de carte d'élévation ([WWT+03]).
[Bump mapping]\includegraphics[%
width=0.30\columnwidth,
keepaspectratio]{eps/ea-vdm-bump.eps}[Horizon mapping]\includegraphics[%
width=0.30\columnwidth,
keepaspectratio]{eps/ea-vdm-horizonmap.eps}[Déplacement de surface conventionnel (subdivision en micro-polygones)]\includegraphics[%
width=0.30\columnwidth,
keepaspectratio]{eps/ea-vdm-displacement.eps}

Auto-ombrage par cartes de visibilité

Dans [HS99], Heidrich et Seidel présentent une autre méthode permettant de calculer en temps réel l'auto-ombrage induit par une carte d'élévation. Ici, l'implantation de l'auto-ombrage est déduite de leur structure de visibilité qui permet également de prendre en compte les inter-réflexions de la lumière dans le relief de la carte de hauteurs. Pour la projection d'ombre, leur méthode commence par précalculer la visibilité de chaque texel de la carte de hauteur pour un certain nombre (fixé) de directions réparties sur un hémisphère centré sur le texel (image de gauche, figure 1.9). Ensuite, le vecteur unité de chaque direction est projeté sur le plan de base de l'hémisphère (image de droite). Etant donné la nature du relief, les directions intersectant la carte de hauteurs se retrouvent toujours à la périphérie du disque représentant la base de l'hémisphère. Leur méthode consiste alors à regrouper approximativement les points visibles dans une ellipse, et à stocker ses paramètres ($ r_{1}$et $ r_{2}$ sur la figure 1.9). Ainsi, les directions en dehors de l'ellipse correspondent à des rayons intersectant le relief, tandis que les directions à l'intérieur de l'ellipse correspondent à des directions d'observation pour lesquelles le texel est visible. Lors du rendu, pour savoir si le texel est éclairé par la lumière, la projection de la direction de la lumière est simplement comparée à l'ellipse : si elle est à l'intérieur de l'ellipse, le texel est éclairé.

Figure 1.9: Calcul de l'auto-ombrage dans le relief induit par une carte d'élévation selon Heidrich et al. [HS99]. Les points noirs correspondent aux vecteurs dont le rayon intersecte le relief, tandis que les autres points représentent les directions pour lesquelles la surface au point $ C$ est visible. L'ensemble des directions, contenues dans le cercle de rayon $ \overrightarrow {a}$ (la base de l'hémisphère des directions), sont partitionnées par une ellipse de rayons $ r_{1}$ et $ r_{2}$ contenant les directions pour lesquelles $ C$ est visible. Les points extérieurs à l'ellipse et contenus dans le cercle correspondent aux directions d'ombrage.
\includegraphics[%
width=1.0\columnwidth,
height=3.5cm,
keepaspectratio]{eps/ea-heidrich.eps}

Tous ces calculs sont effectués à l'aide du matériel, notamment, le calcul de comparaison de position par rapport à l'ellipse est décomposé en quelques multiplications, additions et produits vectoriels effectués par la carte, les données définissant l'ellipse étant stockées dans une texture (les composantes de couleur de la texture faisant office de paramètre de l'ellipse). Les détails de cette méthode peuvent être trouvés dans [KHD00]. L'ensemble de la méthode fonctionne en temps réel (20 FPS à l'aide d'une Ge-Force 2, c'est à dire une carte ancienne) mais le taux d'affichage n'est pas suffisant pour une application interactive nécessitant plusieurs modèles rendus avec cette technique, et ce, malgré les évolutions des cartes graphiques. La taille de leur structure stockée dans les textures est d'environ 2 Mo pour 100 directions de l'hémisphère et une résolution de la carte de hauteurs de 32x32 texels.

Déplacement de surface

Principe

Le déplacement de surface (displacement mapping) [Coo84] permet, à la différence des techniques précédentes, d'afficher réellement la surface du relief stocké dans une carte d'élévations. Ainsi, en particulier, les bordures de l'objet apparaissent réalistes (cf. figure 1.8 (c) page [*]).

Les deux principales techniques permettant d'en effectuer l'affichage sont la subdivision en micro-polygones de la surface, et le lancer de rayons. La subdivision en micro-polygones se fait en fonction du point de vue : les parties de la surface proches de l'écran sont plus finement subdivisées que les parties éloignées. Depuis peu, les cartes graphiques permettent d'effectuer l'affichage d'une telle surface déplacée. La surface a afficher est transmise à la carte graphique, qui la subdivise en micropolygones et déplace leurs sommets en fonction des données stockées dans la carte de hauteurs. Finalement, l'ensemble des micropolygones sont affichés de manière conventionnelle.

Cette technique est extrêmement coûteuse en puissance de calcul car la subdivision des polygones peut nécessiter d'être très fine, si la carte d'élévations est trés perturbée, afin de rendre tous les effets de relief. Néanmoins, cette méthode est bien adaptée à des reliefs de moyenne échelle (mésostructures1.16), exprimable sous forme de champ de hauteurs. Finalement, l'avantage principal de cette approche (qui a motivé son invention) est que l'espace mémoire nécessaire est minime comparé au relief produit. La création d'un tel relief de façon conventionnelle serait en effet prohibitive car elle nécessiterait de stocker et de transmettre à la carte graphique des millions de triangles.

Dernièrement, des techniques permettant d'effectuer le rendu en temps réel de telles surfaces déplacées ont été proposées [WWT+03,HEGD04]. Elles opèrent différemment à la subdivision en micropolygones en ce sens qu'elles déportent le problème dans l'espace de l'écran : au lieu d'afficher la surface sur laquelle est plaquée la carte d'élévations, elles cherchent à déterminer la position dans la carte d'élévation d'un pixel de l'écran. Le problème est inversé, et, de façon générale, correspond à l'approche qui caractérise beaucoup de méthodes actuellement proposées en rendu basé images en temps réel. Cette approche est motivée par le fait qu'il est plus efficace de résoudre les problème de visibilité par pixel plutot que par des traitement conventionnels dans l'espace de la scène, car la résolution d'un écran est fixe, relativement faible (généralement de 1024x768 pixels) et n'évolue quasiment pas (pas d'évolution significatives depuis 10 ans) tandis que parallèlement, la puissance de calcul des cartes graphiques, ainsi que leur flexibilité1.17, double tous les ans, voire les six mois. Un traitement effectué par pixel, permettant de synthétiser une image, est, dans une certaine mesure, indépendant (en termes de temps de calcul) de la complexité de la scène : seuls les calculs effectués par pixel comptent. Ils doivent donc être très rapides et simples, mais de telles méthodes permettent au final d'obtenir des résultats impressionnants tant en termes de rapidité que de qualité.

Déplacement de surface dépendant du point de vue

Ainsi, Wang et al. [WWT+03] ont développé une technique permettant d'effectuer du déplacement de surface en délocalisant les calculs au niveau du pixel, c'est à dire dans l'espace écran. Un modèle géométrique paramétré de façon conventionnelle est affiché (figure 1.10 (a)), et la couleur de chaque pixel affiché de sa surface est calculée par l'algorithme.

Figure 1.10: Déplacement de surface dépendant du point de vue
[Maillage englobant]\includegraphics{eps/ea-vdm-maillage.eps}[Déplacement de surface dépendant du point de vue]\includegraphics[%
width=0.30\columnwidth,
keepaspectratio]{eps/ea-vdm-vdm.eps}

Afin de déterminer cette couleur, issue de la carte de déplacement, leur algorithme se base sur un ensemble de cartes de profondeurs de la surface réelle, précalculées par lancer de rayons et combinées dans une texture spéciale à cinq dimensions appelée VDM (View-dependent Displacement Map)1.18.
Figure 1.11: Définition d'une VDM ([WWT+03])
[]\includegraphics[%
width=0.45\columnwidth,
keepaspectratio]{eps/ea-vdm1.eps}[]\includegraphics[%
width=0.30\columnwidth,
keepaspectratio]{eps/ea-vdm2.eps}

Cette VDM représente une fonction permettant, étant donnés un pixel $ P$ destiné à être affiché (cf. figure 1.11) et la direction d'observation $ \overrightarrow{V}$ par rapport au plan tangeant de la surface, de trouver l'origine dans la carte de hauteurs de la partie déplacée à cet endroit, c'est à dire le point $ P^{'}$.

Pour cela, cette texture stocke la distance $ d$ entre la surface englobante de référence et la surface réelle, pour chaque point $ P(x,y)$ de la surface de référence, en fonction de la direction de vue $ \overrightarrow{V}(\theta,\varphi)$ (en coordonnées sphériques). Cette texture étant destinée à être plaquée sur une surface quelconque (non plate), la courbure $ c$ de la surface réelle (au point $ P'$) est également stockée afin de prendre en compte les distorsions induites dans la carte de hauteurs. Ainsi, une VDM représente une fonction à cinq dimensions : $ d_{VDM}(x,y,\theta,\varphi,c)$. Cette fonction permet de trouver, lors du rendu, pour une position d'observation donnée, le décalage $ \overrightarrow{l}$ (figure 1.11(b)) apparent des points de la surface réelle, c'est à dire l'image de la surface réelle selon le point de vue d'affichage.

Une telle texture à cinq dimensions est discrétisée et compressée afin de pouvoir être stockée en mémoire : le nombre d'angles de vues de référence est fixé, ainsi que l'ensemble des valeurs de courbure. La taille d'une VDM de résolution de 128x128 pixels, 32x8 directions d'observation et 16 valeurs de courbure est de 64 Mo. La compression utilisée (une décomposition en vecteur propres des données) permet de réduire la taille de la structure à 4Mo. La décompression se fait au vol, lors du rendu.

Finalement cette technique permet de rendre tous les effets qui caractérisent la technique de déplacement de surface (figure 1.10 (b) page [*]) c'est à dire les occlusions dans la texture dues au relief ainsi que la silhouette du modèle. De plus, l'auto-ombrage est géré en extrayant l'information d'ombrage de la VDM à partir de la position de la lumière. Les performances de la méthode sont impressionnantes : plus de 100 images/s en utilisant les dernières cartes graphiques. En revanche, l'espace mémoire nécessaire pour stocker l'ensemble des textures représentant la VDM restreint son utilisation a des motifs de faible résolution.

Déplacement de surface par pixel

Hirche et. al [HEGD04] proposent également une technique permettant d'effectuer le rendu d'une surface déplacée à l'aide de pixels shaders.

La couleur de chaque pixel affiché correspond à l'intersection du rayon issu du centre de projection de la caméra avec la surface déplacée. Pour trouver cette intersection (figure 1.12 page [*]), l'affichage d'un prisme contenant la surface déplacée de chaque triangle de la surface de base est effectué. Le prisme est créé en extrudant chaque triangle de la surface de base le long des normales à ses sommets. La face du prisme orientée vers l'observateur détermine le point d'entrée du rayon dans le prisme. La méthode consiste alors à échantillonner la partie du rayon à l'intérieur du prisme afin de trouver l'endroit ou il intersecte la carte de hauteurs. A cause des limitations dans la taille des shaders, quatre échantillons seulement sont répartis régulièrement le long du rayon. Le calcul de ces points (0,1,2 et 3 sur la figure 1.12 page [*]) est effectué dans l'espace des coordonnées de texture et permet de comparer la hauteur du rayon à la hauteur stockée dans la carte. Cette méthode ''telle qu'elle'' ne fonctionne pas si la surface sur laquelle est plaquée la carte de déplacement est courbée, c'est à dire que le prisme peut être trop déformé (ne plus avoir ses côtés perpendiculaires au plan du triangle) et les interpolations linéaires faites sur les coordonnées de texture deviennent alors fausses. Pour traiter ce problème, le même principe est appliqué mais en se basant sur une décomposition du prisme en tétraèdres en fonction de la direction d'observation. Ceci nécessite un calcul par le CPU mais permet de traiter le cas général.

Figure 1.12: Affichage par pixel de surface déplacée ([HEGD04]).
\includegraphics[%
width=0.50\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-hirche.eps}\includegraphics[%
width=0.50\columnwidth,
height=5cm,
keepaspectratio]{eps/hirche-1.eps}

Comparé à la méthode précédente, cette approche vise à échantillonner directement, au vol, le rayon issu du pixel à dessiner, afin de trouver son intersection avec la carte de hauteurs au lieu de la précalculer pour l'ensemble des directions d'observations. Ainsi, cette approche ne nécessite aucun espace de stockage supplémentaire par rapport à du déplacement de surface conventionnel. Néanmoins, le nombre restreint d'échantillons par rayon (fixé par la taille maximum d'un shader) limite la qualité du rendu. De plus, les performances, bien qu'interactives, ne suffisent pas dans le contexte d'une application classique d'environnement virtuel : 20 FPS pour une résolution de 500x500 pixels.

Déplacement de surface par superposition d'images

Dans [KS01], Kautz implémente le déplacement de surface en affichant et combinant une série d'images issues de la découpe du volume de déplacement1.19 (figure 1.13).

Figure 1.13: Déplacement de surface basé image ([KS01])
[Texture]\includegraphics[%
width=0.30\columnwidth,
height=3cm,
keepaspectratio]{eps/kautz-picture5.eps}[Champ de hauteurs]\includegraphics[%
width=0.30\columnwidth,
height=3cm,
keepaspectratio]{eps/kautz-picture4.eps}[Découpe du volume de déplacement]\includegraphics[%
width=0.30\columnwidth,
height=3cm,
keepaspectratio]{eps/kautz-picture6.eps}

Le rendu s'effectue en dessinant toutes les tranches, leurs pixels n'étants affichés que si la hauteur dans la carte de déplacement est supérieure à la hauteur de la tranche à cet endroit. Plusieurs orientations des tranches sont créées afin de s'adapter au point de vue (tranches orthogonales au volume de déplacement, ou alignées par rapport à la direction de vision). La composante alpha des couleurs est utilisée pour stocker la hauteur et le stencil buffer1.20 pour superposer les couches.

La méthode fonctionne en temps réel (entre 20 et 30 FPS sur une GeForce2) mais génère beaucoup de géométrie : 64 tranches pour une orientation de volume de déplacement (et il peut y avoir jusqu'à 6 orientations superposées) afin d'avoir une bonne qualité visuelle. De plus, cette méthode est très gourmande en fillrate, en espace mémoire et génère beaucoup de recouvrement (pixels dessinés plusieurs fois).

Déplacement de surface par déformation d'images

Dans [SP99], Schaufler effectue l'affichage d'objets complexes en déformant plusieurs images de profondeurs issues du modèle avec, l'algorithme de déformation 3D de McMillan (section 1.4.3.2).

La figure 1.14 (a), montre les plans de projection des images de profondeurs de références utilisées pour afficher le modèle. Le figure (b) montre le résultat de l'affichage de ces images déformées, avec en bas à gauche, l'image contenue dans le volume de vision marron. Le problème principal est le positionnement de ces plans car ils doivent recouvrir le modèle de façon à ce qu'isoléments ils capturent uniquement un champ de hauteurs, c'est à dire qu'un rayon optique issu du centre de projection d'un volume de vision ne doit pas intersecter plus d'une fois la surface du modèle.

Figure 1.14: Déplacement de surface selon Schaufler ([SP99])
[Plans des images de référence]\includegraphics[%
width=0.23\columnwidth,
height=5cm,
keepaspectratio]{eps/schaufler-2.eps}[Reconstruction par déformation 3D]\includegraphics[%
width=0.24\columnwidth,
height=5cm,
keepaspectratio]{eps/schaufler-1.eps}[Le modèle original]\includegraphics[%
width=0.23\columnwidth,
height=5cm,
keepaspectratio]{eps/schaufler-3.eps}[Le modèle reconstruit]\includegraphics[%
width=0.23\columnwidth,
height=5cm,
keepaspectratio]{eps/schaufler-4.eps}

Les performances sont bonnes : pour le dragon, avec une résolution de 512x512 pixels pour les images de référence, le temps de rendu est de 2 secondes sur un processeur cadencé à 250 MHz, c'est à dire très ancien. Néanmoins, tout l'algorithme est effectué par le processeur central ce qui est très couteux. De plus, le positionnement des plans de référence doit être fait à la main et conditionne la qualité du résultat. Comme le montre la figure 1.14 (d), des effets de ''ruban de caoutchouc'' (rubber-sheet) sont inévitables.

Placage de texture en relief

La technique de placage de texture en relief a été présentée par Oliveira et al. [OBM00]. Elle permet d'effectuer du displacement mapping en utilisant le placage de texture conventionnel sur un modèle simplifié de l'objet a afficher. Pour cela, la carte d'élévation est tout d'abord utilisée afin de déformer l'image en fonction de la direction d'observation. Cette image déformée est ensuite plaquée de façon conventionnelle sur le modèle simplifié. La déformation est basée sur les équations de déformation 3D (3D Warping) de McMillan (cf. section 1.4.3.2) modifiées de façon à se qu'elles puissent s'appliquer à une carte d'élévation plutôt qu'une carte de profondeurs. Finalement, l'opération de placage de texture en relief s'opère en deux phases (cf. figure 1.15).

Figure 1.15: Placage de texture en relief ([OBM00])
\includegraphics[%
width=0.60\columnwidth,
keepaspectratio]{eps/ea-rtm.eps}

Durant la première phase de pré-déformation (pre-warping), la texture est déformée selon les équations modifiées de McMillan. Cette phase est effectuée par le CPU et malgré qu'une méthode permettant de tirer parti des cartes graphiques ait été présentée [MF02], correspond à la partie la plus lente de l'algorithme. La seconde passe de consistant qu'à plaquer la texture est très rapide. La méthode peut être appliquée à une boîte englobant la totalité de la scène.

Parallax Mapping

Dans [TKT01], Kaneko et al. introduisent le parallax mapping. Le principe est de changer les coordonnées de textures de chaque pixel affiché, en fonction de la hauteur stockée dans la carte de hauteurs et de l'angle d'observation, de façon à refléter les effets de parallaxe produits par le relief plaqué. On obtient ainsi le mouvement apparent du relief quand le point de vue change. Leur technique est très rapide (environ 80% de la vitesse du placage de texture conventionnel) et probante (figure 1.17 (b) page [*]) mais fausse, comme le montre la figure 1.16, car ils approximent la hauteur du relief en supposant qu'elle varie selon une courbe basée sur la hauteur du point de référence (A sur la figure).

Figure 1.16: Parallax Mapping
\includegraphics[%
width=0.60\columnwidth,
keepaspectratio]{eps/ea-parallax-mapping.eps}

Néanmoins, pour une applicaton ludique par exemple, l'erreur commise peut être ignorée car l'effet de mouvement du relief est saisissante. La rapidité de la méthode (un simple changement de coordonnées de texture implémenté à l'aide des fonctionnalités détournées du placage d'environnement des cartes graphiques) a assuré son succés.

Dans [Wel04], Welsh présente une amélioration de cette technique qui permet de prendre en compte, dans une certaine mesure, les effets d'occlusion. Le principe est de limiter le déplacement de la coordonnée de texture par une valeur arbitraire, basée sur ce que représente le relief. Par exemple, si le relief est un mur de brique, cette valeur sera basée sur la profondeur des interstices entre les briques, car ce sont eux qui génèrent de l'occlusion. Les résultats sont probants (figure 1.17 (c) page [*]), mais très liés à la nature du relief (qui doit être le plus doux possible). Cette technique ne marche évidemment pas pour un relief quelconque, est géométriquement fausse, et nécessite de nombreux tests avant de trouver les valeurs donnant des résultats visuels probants, mais elle est rapide et simple à programmer, en particulier à l'aide des shaders.

Figure 1.17: Parallax mapping avec et sans décalage borné
[Placage de texture simple]\includegraphics[%
width=0.20\columnwidth,
keepaspectratio]{eps/ea-kaneko.eps}[Parallax Mapping]\includegraphics[%
width=0.20\columnwidth,
keepaspectratio]{eps/ea-kaneko1.eps}[Parallax mapping avec décalage borné ]\includegraphics[%
width=0.25\columnwidth,
keepaspectratio]{eps/ea-parallax-mapping-offset.eps}

Placage d'environnement

Bien que le placage d'environnement ne soit pas à proprement parler une technique de rendu en temps réel de scène complexe, il s'agit néanmoins d'une technique basée image permettant de faciliter la simulation d'éclairement complexe. Le placage d'environnement (Environment Mapping) a été introduit par Blinn [BN76]. Une carte de réflexion (une texture, cf. figure 1.18 page [*]) représentant la lumière arrivant de toutes les directions en un point est utilisée pour modéliser les réflexions spéculaires entre les objets d'une scène.

Figure 1.18: Placage d'environnement cubique
\includegraphics[%
width=0.70\columnwidth,
keepaspectratio]{eps/ea-environnement-mapping.eps}

La carte de réflexion est associée à une sphère, un cylindre ou un cube englobant centré sur l'objet dont on souhaite simuler l'éclairement. Par rapport au placage de texture standard, l'application de l'environnement à l'objet se fait non plus en utilisant la paramétrisation de l'objet (coordonnées de texture $ (u,v)$), mais en utilisant la normale à la surface (cartes de réflexion diffuse [MH84]), ou le rayon réfléchi issu de la caméra (cartes de réflexions spéculaires [BN76]). De nombreux travaux récents emploient le placage d'environnement pour permettre l'intégration d'objets virtuels dans un environnement réel : les objets virtuels sont éclairés par la lumière réelle de la scène capturée dans des photographies. Finalement, l'environnement mapping est une fonctionnalité intégrée dans toutes les cartes graphiques, étant donné qu'il s'agit d'un placage de texture. Le travail effectué par la carte graphique est simplement de calculer les coordonnées texture par sommet.


Placage de texture dépendant du point de vue

Le placage de texture dépendant du point de vue (''View Dependent Texture Mapping'') est une technique qui permet de modifier la couleur des pixels d'une texture de façon à ce qu'elle s'adapte à la position de la caméra. Le principe général est de pré-acquérir un certain nombre d'images de référence de la surface d'un modèle géométrique complexe selon différents angles d'observation, puis de plaquer et de mélanger ces images sur une version simplifiée du modèle de façon à obtenir un ensemble continu de textures intermédiaires de la surface, quelque soit la direction d'observation.

L'ensemble des techniques que nous décrivons fusionnent ces images en fonction de la proximité du point de vue virtuel avec les points de vue de référence. La fusion en elle même est très simple, il s'agit d'une combinaison linéaire des couleurs des texels des images de référence effectuée comme suit (figure 1.19 (a) page [*]) :

Soient :

[$ C(x,y)$]la couleur $ (R,V,B)$ du texel de coordonnées $ (x,y)$ dans la texture à obtenir.

00.00.0000
[ $ C_{i}(x,y)$]la couleur du texel de même coordonnées dans la texture de référence n^&cir#circ;$ i$.
00.00.0000
[ $ w_{i}(x,y)$]un coefficient de pondération inversement proportionnel à la distance entre le texel $ (x,y)$ du point de vue virtuel et le point de vue de référence $ i$.
00.00.0000
[$ n$]le nombre de points de vues choisis.
On a :

$\displaystyle C(x,y)=\frac{{\displaystyle \sum_{i=1}^{n}}w_{i}(x,y).C_{i}(x,y)}{{\displaystyle \sum_{i=1}^{n}}w_{i}(x,y)}$

Figure 1.19: Mélange d'images
[Principe général]\includegraphics[%
width=0.50\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-VDTM.eps}[Selon Debevec ]\includegraphics[%
width=0.40\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-VDTM-debevec.eps}

Debevec et al.

Debevec et al. ont été les premiers à utiliser de telles textures dynamiques. Dans [DTM96], la texture à plaquer sur le modèle simplifié est construite comme suit. Chaque pixel $ p$ de la texture à générer reçoit la couleur $ C_{i}(p_{i})$ du pixel $ p_{i}$ de l'image de référence n^&cir#circ;$ i$ considérée comme la mieux adaptée au rendu de ce pixel. Comme le montre la figure 1.19 (b) page [*], l'image la mieux adaptée au pixel $ p$ de la texture $ I$ à construire est l'image $ I_{1}$ car l'angle $ \theta_{1}$ formé par le rayon issu du centre optique du point de vue $ 1$ avec le rayon issu du centre optique de point de vue virtuel est inférieur à l'angle $ \theta_{2}$ formé avec le deuxième point de vue. Le pixel $ p$ de l'image $ I$ a afficher est donc coloré avec la couleur de $ p_{1}$.

Etant donné qu'avec cette technique des pixels voisins de $ p$ peuvent être colorés avec des pixels issus de différents points de vue, des discontinuités apparaissent, dégradant l'image. Pour traiter ce problème, le pixel $ p$ n'est plus coloré avec un pixel issu d'un seul point de vue, mais en mélangeant tous les point de vue avec une fonction de pondération $ w_{\theta ,i}$ évaluée pour chaque pixel $ p$ et chaque point de vue de référence. Cette fonction est inversement proportionnelle à l'angle $ \theta_{i}$ formé par les rayons issus des centres optiques de chaque point de vue de référence et du point de vue virtuel (cf. figure 1.20(a)).

Figure 1.20: Pondérations utilisées dans [DTM96]
[Pondération $ w_{\theta ,i}$]\includegraphics[%
width=0.45\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-VDTM-debevec-ponderation1.eps} [Pondération $ w_{\gamma ,i}$]\includegraphics[%
width=0.45\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-VDTM-debevec-ponderation2.eps}

Une autre discontinuité apparaît également à la frontière entre une région texturée à partir d'une seule image de référence et une région texturée à partir de plusieurs images de référence. Une seconde fonction de pondération, $ w_{\gamma ,i}$ indépendante du point de vue, vient se combiner à la première. Cette pondération tend vers zéro sur les bordures de chaque image de référence et permet ainsi d'adoucir les transitions (figure 1.20(b)).

Bien entendu, ces calculs effectués par pixel sont lourds en ne peuvent s'effectuer en temps réel. Dans [DYB98], les pondérations sont rammenées à l'échelle de la façe entière sans baisse notable de la qualité visuelle : lors du rendu pour chaque face sont déterminés les points de vue à fusionner (les points de vue où cette face est visible) et la pondération $ w_{\theta ,i}$ n'est calculée qu'une seule fois, au barycentre de la face. Ainsi, le mélange s'effectue en temps réel. Néanmoins les problèmes principaux restent : les effets de flou, et de ghosting1.21 bien qu'atténués, ne font illusion que si la surface sur laquelle est utilisée cette méthode est relativement éloignée de l'observateur. Cette méthode a été utilisée dans le film Matrix ( 1999-2004 Warner Bros.) pour créer le décor de fond de certaines scènes impossibles à filmer ''en réel''. Etant donné que le mélange des couleurs ne tient pas compte de l'éclairement, les photographies de référence du décor devaient être prises durant un temps nuageux de façon à ce qu'aucun reflets spéculaires ne soit présents sur les photos.

Pulli et al.

Dans [PCD+97], le placage de texture dépendant du point de vue est utilisé pour effectuer le rendu en temps réel de maillages issus de la triangulation d'images se superposant partiellement, obtenues à l'aide de scanners optiques. Le schéma de pondération est légèrement différent de celui utilisé par Debevec. Ils utilisent trois pondérations différentes, soit : $ w_{i}=w_{\theta,i}.w_{\gamma,i}.w_{\psi,i}$ .

Figure 1.21: Schémas de pondération de Pulli et al.
[Pondération basée sur les coordonneés barycentriques du point de vue virtuel dans le triangle la sphère intersectant la direction de la caméra]\includegraphics[%
width=0.45\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-pulli-a.eps}[Pondération basée l'orientation des faces du maillage par rapport au point de vue de référence]\includegraphics[%
width=0.45\columnwidth,
height=5cm,
keepaspectratio]{eps/ea-pulli-b.eps}

[ $ w_{\theta ,i}$]est une pondération dépendante du point de vue basée sur trois points de vue, les trois plus proches du point de vue virtuel. La pondération ne s'effectue pas par pixel, mais est évaluée une seule fois et appliquée à tous les pixels. Etant donné que cette méthode ne fonctionne bien que si les points de vue de référence sont positionnés sur un plan autour de l'objet (l'angle $ \theta_{i}$ s'évalue facilement) et ne peut pas s'appliquer à des points de vue répartis à des hauteurs différentes, Pulli et al. répartissent les points de vue de référence sur une sphère unité centrée sur la scène et la maillent avec une triangulation de Delaunay (figure 1.21(a)). Le point de vue virtuel est alors positionné sur cette sphère et les coordonnées barycentriques de son axe optique intersectant une maille déterminent alors directement $ w_{\theta,1}$ , $ w_{\theta,2}$ et $ w_{\theta,3}$ .

00.00.0000
[ $ w_{\gamma ,i}$]est une pondération indépendante du point de vue qui, comme chez Debevec, permet d'atténuer les discontinuités aux frontières du maillage (figure 1.22(c)).
00.00.0000
[ $ w_{\psi,i}$]est également indépendante du point de vue et mesure l'adéquation d'une image de référence à une face. Les meilleurs points de vue de référence étant ceux qui ont leur orientation la plus proche de la normale à la face. C'est à dire les images pour lesquelles les déformations de perspective de la texture sont les plus faibles. (figure 1.21(b) et 1.22(b)).
Figure 1.22: View-Based Rendering.
[Image de référence]\includegraphics[%
width=0.23\columnwidth,
keepaspectratio]{eps/ea-pulli-resultat-1.eps}[Pondération $ \psi _i$]\includegraphics[%
width=0.23\columnwidth,
keepaspectratio]{eps/ea-pulli-resultat-2.eps}[Pondération $ \gamma _i$]\includegraphics[%
width=0.23\columnwidth,
keepaspectratio]{eps/ea-pulli-resultat-3.eps}[Image reconstruite]\includegraphics[%
width=0.23\columnwidth,
keepaspectratio]{eps/ea-pulli-resultat-4.eps}

Pighin et al.

Dans [PHL+98], le placage de texture dépendant du point de vue est basé sur le mélange de seulement deux points de vue de référence appartenant à un même plan. Il s'agit de photographies d'un visage effectué par un système d'acquisition tournant autour du sujet. Le shéma de pondération est basé sur trois termes : $ w_{i}=F^{i}.P^{i}.V^{i}$.

[$ F^{i}$]est une carte de visibilité calculée pour chaque texture $ I_{i}$, indépendante du point de vue. Ce terme est un masque qui indique les zones de l'image de référence qui appartiennent au modèle (valeur=1) des zones extérieures (le fond, valeur=0). Un léger dégradé est calculé pour adoucir la transition à la frontière.

00.00.0000
[$ P^{i}$]correspond à la pondération $ w_{\gamma,1}$ de Pulli.
00.00.0000
[$ V^{i}$]correspond à la pondération $ w_{\theta ,i}$ de Pulli, modifiée de façon à ce qu'une seule texture soit sélectionnée quand le point de vue de référence et le point de vue virtuel correspondent.

Porquet Damien 2005-03-02