Sous-sections


Acquisition d'une texture directionnelle

La différence principale avec la méthode précédente est que nous ne nous basons plus sur un lancer de rayon pour précalculer l'hémisphère des directions en chaque texel. A la place, nous projetons le nuage de points issu du modèle complexe sur chaque plan de la boîte.

Tout d'abord, nous devons transformer le maillage de l'objet de base en un nuage dense de points.

Décomposition en surfels du modèle complexe

Ce nuage de points est obtenu à partir du maillage de triangles du modèle complexe. L'algorithme consiste à subdiviser récursivement chaque triangle comme suit.

Étant donné un triangle $ t$, nous le subdivisons en 4 en scindant ses arêtes en deux, comme le montre la figure 3.10. Ensuite, nous appliquons la subdivision aux sous-triangles créés. Le critère d'arrêt est le suivant : nous ne subdivisons pas les triangles constitués d'une arête plus petite qu'une distance fixée. Cette technique n'est pas optimale dans le cas de triangles très étirés, car la subdivision se termine en fonction de la plus petite de ses arêtes. Néanmoins, dans le cas où le maillage est constitué de triangles ''raisonnablement'' proportionnés, la méthode fonctionne bien.

Figure 3.10: Création du nuage de points par subdivision récursive des triangles du maillage complexe.
\includegraphics[%
width=0.90\columnwidth,
keepaspectratio]{eps/tdpv-subdivision.eps}

L'ensemble de points que nous obtenons avec cet algorithme est défini par tous les sommets des triangles subdivisés (figure 3.10(d)). Chaque point est défini par ses coordonnées 3D dans le repère de la scène ainsi que par sa couleur et sa normale. Ces données sont interpolées lors de la subdivision à partir des sommets du maillage de base.

La figure 3.11 montre le résultat de cet algorithme appliqué à deux modèles géométriques.

Figure 3.11: Résultat de notre méthode de discrétisation appliquée à un tore à surface perturbée avec une carte d'élévation (par déplacement de surface) et à un maillage représentant un noeud torique.
\includegraphics[%
width=1.0\columnwidth,
height=5cm,
keepaspectratio]{eps/tdpv-tore-points.eps}\includegraphics[%
width=1.0\columnwidth,
height=5cm,
keepaspectratio]{eps/tdpv-torus.eps}

Une fois ce nuage de points créé, nous calculons les textures directionnelles appliquées à la boîte englobante.

Calcul de la texture

Comme pour la méthode précédente, une texture directionnelle stocke en chaque texel les points du modèle complexe s'y projetant pour toutes les directions d'un hémisphère. La différence est que nous n'effectuons pas de lancer de rayons pour obtenir ces points.

Pour chaque direction $ d$ de l'hémisphère d'une face $ f_{i}$ de la boîte, l'algorithme permettant d'obtenir une texture directionnelle est le suivant (figure 3.12) :

Pour chaque direction $ d$ de l'hémisphère :

  1. Créer un tampon de profondeurs $ T$ à deux dimensions, de résolution égale à la définition de la texture, positionné sur $ f_{i}$, stockant en chaque élément $ T(u,v)$ la profondeur $ z$ et un l'indice $ k$ d'un point dans le nuage.
  2. Projeter orthographiquement tous les points du nuage sur $ f_{i}$ en ne gardant en chaque $ T(u,v)$ que le point le plus proche parmi ceux qui s'y projetent.
  3. Stocker l'indice $ k$ pour la direction $ d$ de l'hémisphère de chaque texel $ (u,v)$.
Figure 3.12: Calcul d'une texture directionnelle
\includegraphics[%
width=0.70\columnwidth,
keepaspectratio]{eps/tdpv-creation.eps}

Nous obtenons finalement une texture stockant en chaque élément un tableau d'indices de points (un point par direction).


Hémisphère des directions

Par rapport à la méthode précédente, nous avons amélioré la répartition des directions. La problématique de la discrétisation de l'hémisphère est que la répartition doit :

  1. permettre une localisation d'un vecteur quelconque très rapidement,
  2. distribuer le mieux possible un nombre fixé de directions de façon à couvrir uniformément la surface de la scène.
Concernant le premier point, la décomposition en secteurs des coordonnées sphériques d'une direction donne les meilleurs résultats en termes de rapidité de temps de calcul. En particulier la localisation d'une direction ne dépend pas du nombre de directions dicrétisées. Nous avons donc gardé cette décomposition.

Concernant la distribution des directions, la discrétisation régulière des directions en coordonnées sphériques donne de mauvais résultats en termes de recouvrement de la scène : comme le montre la figure 3.13, les angles rasants donnent des points trés éloignés d'une direction à l'autre, ce qui se traduit, lors du rendu, par de fortes discontinuités entre deux directions voisines.

Figure 3.13: Variation de l'échantillonnage de la surface de la scène, avec des rayons issus de l'hémisphère des directions d'un texel de la boîte englobante.
\includegraphics[%
width=0.80\columnwidth,
keepaspectratio]{eps/tdpv-echant-surface.eps}

Pour améliorer cette répartition, nous avons augmenté le nombre de directions sur les angles rasants. C'est à dire qu'au lieu de subdiviser régulièrement l'angle d'élévation $ \varphi$, nous utilisons des intervalles se réduisant petit à petit selon une courbe en racine carrée (cf. figure 3.14). Cette fonction nous permet techniquement de conserver des calculs de localisation très rapides.

Figure 3.14: Répartition adaptée des directions sur l'hémisphère. La répartition de l'angle d'élévation est basée sur une portion de la fonction racine carrée et permet d'augmenter le nombre de directions aux angles rasants.
\includegraphics[%
width=1.0\columnwidth,
height=6cm,
keepaspectratio]{eps/tdpv-sqrt-bw.eps}\includegraphics[%
width=1.0\columnwidth,
height=6cm,
keepaspectratio]{eps/tdpv-regulier-adapte.eps}

Porquet Damien 2005-03-02