Sous-sections

Rendu

Le rendu en temps réel s'effectue donc en deux passes : la première (section 4.2.2.2), effectuée par le processeur central, consiste à reconstruire le tampon de profondeur approché de la scène réelle à la position courante de la caméra. La seconde passe (section 4.2.3.2), effectuée intégralement par la carte graphique, consiste à plaquer sur ce relief approché les couleurs de la scène de base ainsi qu'à corriger la profondeur segmentée avec les informations sur le relief original stockées dans les images de référence.

La reconstruction du tampon de profondeur n'intervient que quand la position de la caméra a changé, dans le cas contraire, nous ne recalculons que l'éclairement.

Affichage

Etant donnés le tampon de profondeur reconstruit pour le point de vue virtuel et les points de vue de référence, le rendu s'effectue en affichant un rectangle occupant tout l'écran, et dont les coordonnées de texture des sommets sont $ (0,0)$ pour le coin haut/gauche et $ (1,1)$ pour le coin bas droit. Cette paramétrisation nous permet de localiser un pixel dessiné à l'écran au sein du pixel shader. Les données transmises au pixel shader sont la texture de profondeurs reconstruite et les textures des points de vue de référence (profondeurs, couleurs, normales). Par exemple, avec 3 points de vue de référence, il faudrait transmettre 10 textures. En codant la profondeur (une seule composante) dans la composante alpha de la texture de couleurs, nous abaissons ce nombre à 7. Les matrices de transformation des points de vue de référence et de la caméra doivent également être transmis, ainsi que les matrices inverses correspondantes.

Disparités de profondeur

Durant nos expérimentations, nous avons noté des artéfacts visuels se produisant sur les bordures de l'objet (figure 4.4(a)). La figure 4.3(b) détaille le problème : quand $ P$ est projeté sur le point de vue de référence, sa rétroprojection dans l'espace de la scène donne le point $ P_{2}$ au lieu de $ P_{1}$ à cause de la discrétisation du plan de projection de la caméra de référence. Cette discrétisation correspond à la définition de la texture, mais l'artefact subsiste quelle que soit la finesse de la définition.

Pour résoudre ce problème, la profondeur du point à rétroprojeter n'est plus issue uniquement d'une seule profondeur, mais de l'interpolation bilinéaire des profondeurs des texels adjacents. L'image corrigée est exposée en figure 4.4(b).

Figure 4.4: Disparités de profondeur.
[Artféfacts dûs à la disparité de profondeur entre deux pixels d'une bordure.]\includegraphics[%
width=0.45\columnwidth,
keepaspectratio]{eps/eguk-disp0.eps}[Avec interpolation bilinéaire des profondeurs.]\includegraphics[%
width=0.45\columnwidth,
keepaspectratio]{eps/eguk-disp1.eps}

Algorithme multi-passes

A cause de la limitation de la taille des shaders, nous ne pouvons pas utiliser un nombre quelconque de points de vue à interpoler en une seule fois. En pratique, nous avons développé deux méthodes :

  1. La première est utilisée si la scène est bien couverte avec trois points de vue. L'algorithme est directement celui décrit précédemment.
  2. La seconde est utilisée si il est nécessaire d'utiliser plus de trois points de vue. Le rendu s'effectue en plusieurs passes, une par point de vue de référence.
Dans le second cas, une passe consiste à calculer la distance entre le point $ P$ et le point rétroprojeté issu du point de vue de référence (voir figure 4.3(a)) et à retourner cette distance dans le tampon de profondeur de la carte graphique, en même temps que la couleur calculée. Cette opération est effectuée pour chaque point de vue, c'est à dire que nous affichons autant de fois le polygone occupant tout l'écran qu'il y a de points de vue. La fonction de comparaison du tampon de profondeur est choisie de façon à n'autoriser l'affichage que des points de ''profondeur''4.1 inférieure à la profondeur stockée précédemment. Ainsi la couleur restante est celle associée au point de vue donnant la plus petite distance $ (P,P_{i})$, ce qui est le but recherché.
Figure 4.5: Origine des points utilisés pour reconstruitre les pixels de l'image.
\includegraphics[%
width=0.33\columnwidth,
keepaspectratio]{eps/eguk-s1.eps}\includegraphics[%
width=0.33\columnwidth,
keepaspectratio]{eps/eguk-s2.eps}\includegraphics[%
width=0.33\columnwidth,
keepaspectratio]{eps/eguk-s3.eps}

En pratique, à cause de la précision limitée du tampon de profondeur de la carte graphique, nous n'utilisons pas directement la distance calculée en 3D. A la place, nous reprojetons les points $ P$ et $ P_{i}$ et calculons leur distance en 2D, sur le plan de la caméra de référence.

La figure 4.5 montre la scène reconstruite à différentes positions du déplacement de la caméra. Dans cette image, nous avons utilisé 3 points de vue de référence, mis en évidence avec 3 couleurs différentes : points rouges pour le premier, verts et bleus pour le second et le troisième. Ainsi, on peut visualiser le point de vue qui a servi à calculer un pixel de l'image.

Porquet Damien 2005-03-02