Sous-sections

Structure des données

La structure de données représentant une texture directionnelle doit être choisie avec soin car nous avons deux contraintes : d'une part une texture directionnelle doit s'instancier très rapidement et d'autre part, elle doit occuper le moins d'espace mémoire possible.

Dans le premier cas, le point critique de l'instanciation est le calcul de localisation effectué en chaque texel lors du rendu (voir section 3.2.3). La structure, qui doit permettre des calculs rapides, est décrite en section 3.2.2.1.

Concernant la taille des données, nous décrivons en section 3.2.2.2 la méthode de quantifications des données que nous avons utilisée.


Discrétisation de l'hémisphère des directions

L'ensemble des directions utilisées pour le lancer de rayons est discrétisé régulièrement en coordonnées sphériques. Cette discrétisation donne un tableau de $ n$ vecteurs distribués sur l'hémisphère. Les vecteurs sont exprimés en coordonnées sphériques et répartis en $ n_{\varphi}$ tranches et $ n_{\theta}$ secteurs. Sur la figure 3.5, $ n_{\varphi}=3$ et $ n_{\theta}=3$ ; ce qui donne au total $ n_{\theta}*(n_{\varphi}-1)+1=7$ directions (la direction normale au texel n'est stockée qu'une seule fois). Il y a donc $ n_{\theta}$ azimuths, définis dans l'intervalle $ [0,...,2\pi[$ et $ n_{\varphi}$ angles polaires, définis dans l'intervalle $ [0,...,\frac{\pi}{2}[$. Cette décomposition permet de retrouver directement le secteur d'azimuth et d'angle polaire auquel appartient une direction quelconque donnée.3.1

Figure 3.5: Discrétisation de l'hémisphère des directions.
\includegraphics[%
width=0.49\columnwidth,
keepaspectratio]{eps/discretisation_hemisphere.eps}


Quantifications

Afin de limiter la taille de la structure, l'ensemble des couleurs et l'ensemble des normales obtenues lors du lancer de rayons sont quantifiés de façon à être indexés. C'est à dire que pour chaque texel, dans une direction donnée, on ne stocke qu'un index vers la table des couleurs quantifiées et un index vers la table des normales quantifiées, ce qui réduit ainsi la taille de la structure (figure 3.6).

Figure 3.6: Quantification des normales et des couleurs.
\includegraphics[%
width=1.0\columnwidth,
keepaspectratio]{eps/tbp-precalc4.eps}

Couleurs

L'ensemble $ E_{c}$ des couleurs à quantifier est obtenu lors du lancer de rayons. Cet ensemble de couleurs est réduit à $ j$ couleurs distinctes selon l'algorithme suivant :

Cet algorithme n'est pas optimal, et même très mauvais dans le cas général, néanmoins si la scène comporte peu de couleurs différentes, ce qui est le cas dans nos tests, cet algorithme appliqué à plus de 256 couleurs quantifiées (index sur 1 octet) suffit largement. De nombreuses méthodes, entre autres [Hec82,Cla96,Her96], permettent de réduire le nombre de couleurs en créant des palettes optimales.

Normales

L'ensemble des normales est quantifié selon une méthode très simple : l'ensemble des directions de la sphère unité est discrétisé comme précédemment mais sur une sphère au lieu d'un hémisphère, puis on recherche pour chacune des normales la direction quantifiée la plus proche.

Distance

La distance $ h$ (figure 3.4) entre le point de la surface et le point d'intersection est utilisée lors du calcul de l'éclairement. Cette valeur est exprimée par rapport à la taille de la plus grande diagonale de la boîte englobante, qui correspond à la valeur maximale possible. $ h$ est donc exprimée comme proportion de cette diagonale, et stockée sur un octet.

Finalement, nous obtenons pour chaque texel un tableau (d'orientations) de taille $ n$ stockant en chaque élément (figure 3.6) :

\begin{displaymath}
\begin{cases}
\textrm{l'indice de la plus proche couleur qua...
...rm{la distance de l'intersection} & \textrm{1 octet}\end{cases}\end{displaymath}

Par exemple, pour une texture de définition 128x128 et un hémisphère composé de 500 directions, la structure occupe 31 Mo en mémoire, soit 128 Mo pour la totalité de la boîte.

Porquet Damien 2005-03-02