Sous-sections

Reconstruction du relief et de la couleur de la surface

Pour effectuer le rendu complet, nous devons maintenant calculer la couleur des pixels, et corriger l'erreur que nous avons commise en approximant la variation de profondeur des points. Ceci est effectué en extrayant ces informations des images de référence de la scène complexe de base.

Acquisition des points de vue de référence

Un petit nombre d'images de référence de la scène complexe est pris durant la phase de précalculs. Ces points de vue de référence stockent d'une part les couleurs de la scène, mais également la profondeur des points (le tampon de profondeur) ainsi que les normales de la surface, soit trois textures :

  1. Les couleurs sont obtenues en affichant le modèle sans gestion de l'éclairement, de façon brute.
  2. Les normales sont obtenues de la même façon que la méthode exposée en section 2.2.4.2, c'est à dire par substitution des couleurs des sommets du maillage par leur normales, et affichage du modèle.
  3. La profondeur des points correspond au tampon de profondeur de l'image.
Ainsi, un point de vue de référence est constitué des informations suivantes :

\begin{displaymath}\begin{cases}
\textrm{une texture de couleurs} & \textrm{RGB ...
...{la matrice de transformation inverse} & \textrm{''}\end{cases}\end{displaymath}

Les points de vue sont positionnés par l'utilisateur, de façon à couvrir le plus possible la surface de la scène. Ils ne sont pas obligatoirement positionnés sur la trajectoire. Le but idéal serait de disposer d'une méthode automatique de placement de point de vue permettant d'obtenir un recouvrement maximal, mais le placement à la main n'est pas très contraignant et en pratique, quelques points de vue suffisent à couvrir la scène de façon satisfaisante.


Interpolation des points de vue de référence

L'interpolation s'effectue au niveau du pixel, avec le concours de la carte graphique. Etant donnée la profondeur du point calculée avec la segmentation précédemment décrite, l'algorithme permettant d'extraire le meilleur pixel parmi les pixels des points de vue de référence se déroule comme suit.

Figure 4.3: Principe de la reconstruction de la surface.
[Interpolation de deux points de vue.]\includegraphics[%
width=0.50\columnwidth,
keepaspectratio]{eps/eguk-scene-reconstr.eps}[Disparité de profondeur.]\includegraphics[%
width=0.50\columnwidth,
keepaspectratio]{eps/tbp-lissage.eps}

Etant donné un point $ O(u,v)$ à l'écran, de profondeur segmentée $ p_{O}$, nous le transformons dans le repère de la scène, ce qui donne le point 3D $ P$ (figure 4.3(a)).

Ce point est projeté sur le plan de projection des points de vue de référence. Nous obtenons donc un ensemble de points 2D sur les caméras de référence ($ O_{1}$ et $ O_{2}$ sur la figure). Chacun de ces points correspond, par rétroprojection, à un point 3D dans l'espace de la scène ($ P_{1}$ et $ P_{2}$). Parmi ces points 3D, le meilleur est celui qui est le plus proche de $ P$. Dans l'exemple, le point de vue 1 est le meilleur point de vue pour le pixel $ O$ : la distance entre $ P_{1}$ et $ P$ est inférieure à la distance entre $ P_{2}$ et P. Nous attribuons donc au pixel $ O$ les attributs stockés dans les textures du point de vue $ 1$, aux coordonnée 2D de $ O_{1}$ : couleur, normale et profondeur.

En pratique, à cause des limitations en taille des shaders, nous n'effectuons les comparaisons de cette façon qu'avec au maximum trois des plus proches points de vue par rapport à la caméra virtuelle (sur la trajectoire).

Porquet Damien 2005-03-02