• Aucun résultat trouvé

7.2 Puissances de calcul lors d’un traitement tuile

7.2.3 Parcours d’une tuile

7.2.3.1 Le processus « Pixel »

La notion d’atome telle que nous l’avons introduite est li´ee aux objets constitu´es de triangles. N´eanmoins, nous pouvons ´etendre ce concept aux objets de type vid´eo pour lesquels seul le processus « Pixel » intervient. D`es lors, deux nouveaux arguments viennent renforcer le choix du balayage int´egral de la tuile lors du processus « Pixel ». Il s’agit de l’uniformisation et de l’indiff´erenciation des traitements, d´ecorr´el´ees du contenu de l’atome. La tuile est balay´ee de mani`ere traditionnelle comme un balayage d’´ecran : ligne `a ligne de haut en bas et pour chaque ligne, pixel `a pixel de gauche `a droite. Afin de pouvoir g´en´erer les informations de texture pour chaque pixel, il convient de calculer les intersections de chaque ligne de la tuile avec les N triangles de l’atome. La fr´equence avec laquelle un nouveau calcul d’intersection doit ˆetre effectu´e est donn´ee par l’expression (7.17). Cette expression relie le nombre de triangles par atome, la taille de la tuile et la fr´equence « Pixel ».

fInt =

N LT.

fPix (7.17)

La figure 7.7 repr´esente ce calcul d’intersection faisant intervenir les trois cˆot´es d’un triangle. La comparaison des abscisses des points d’intersection d´efinit l’int´erieur du triangle. Ce calcul permet de mettre `a jour une table d’index des triangles recouvrant

L2 L1 R

Fig. 7.7 – Calcul d’intersection d’un triangle et d’une ligne de tuile. Un pixel d’abscisse xi est int´erieur au triangle si et seulement si xi ≥ max(L1, L2) et xi ≤ R. Les points L1

et L2 (resp. R) correspondent aux intersections des deux cˆot´es gauches (resp. droit) de ce triangle avec la ligne.

triangle (parmi N) le recouvrant. La figure 7.8 indique, dans le cas d’un atome com- pos´e de huit triangles impactant une tuile, la valeur de cette table d’index `a la fin des diff´erents calculs d’intersections. Les traitements des pixels de la ligne sont ensuite ef-

1 2 3 4 5 6 7 8 8 7 6 6 6 6 5 5 NC NC

Fig. 7.8 – Table d’index des intersections triangle-ligne de tuile. La valeur particuli`ere NC indique un pixel « Non-Couvert ».

fectu´es grˆace au parcours de cette table d’index. Chaque triangle d´efinissant une transfor- mation g´eom´etrique, cette table identifie par cons´equent quelle transformation appliquer pour chaque pixel. Cependant, les ruptures de contexte qui peuvent intervenir, c.-`a-d. les changements de valeur dans la table d’index pendant le parcours d’une ligne, n´ecessitent des op´erations de sauvegarde et de chargement de donn´ees. Suivant le choix des modes de calcul des transform´ees g´eom´etriques, ces op´erations peuvent ˆetre relativement lourdes. La figure7.9 pr´esente diverses alternatives pour g´erer ces changements de contexte.

Pour chaque nouveau contexte Sauvegarder le contexte courant Charger le nouveau contexte Calcul incr´emental des pixels

du segment en cours

Pour chaque nouveau contexte Calcul absolu de ce contexte Calcul incr´emental des pixels

du segment en cours

Calcul absolu pour chaque pixel quelque soit le contexte

Fig. 7.9 – Calculs possibles lors du processus « Ligne ».

La premi`ere alternative conserve les techniques incr´ementales traditionnellement employ´ees lors d’un parcours triangle `a triangle : elles ne sont cependant plus les mieux adapt´ees en raison du nombre de donn´ees interm´ediaires `a sauvegarder et `a acc´eder. La deuxi`eme alternative ´evite la gestion de ces donn´ees interm´ediaires par un calcul absolu lors d’un changement de contexte. D`es lors que nous mettons en place un calcul direct, la pr´esence de ces op´erateurs mat´eriels conduit naturellement `a syst´ematiser ces calculs directs pour tous les pixels : il s’agit de la derni`ere alternative. Le calcul incr´emental a pour objectif principal la r´eduction de la complexit´e des op´erateurs, c.-`a-d. le rempla- cement d’une multiplication par une addition. Dans notre cas, o`u les traitements sont

li´es `a un contexte de la taille d’une tuile, la dynamique des donn´ees trait´ees (4 bits pour une tuile 16 × 16) permet de justifier le choix d’un calcul absolu : les op´erateurs sont compacts, il n’y a pas de contexte `a sauvegarder.

Nous organisons donc le rendu d’une tuile en d´ecoupant le processus « Pixel » d´efini dans notre mod`ele en deux processus interfac´es par cette table d’index : un premier processus « Ligne » suivi du processus « Balayage » effectuant le balayage des pixels proprement dit. Cette organisation du rendu d’une tuile permet de masquer le temps de traitement sp´ecifique d’un triangle dans le temps complet du traitement d’une tuile : le temps de traitement d’un triangle n’est plus conditionn´e par la surface qu’il recouvre mais par le nombre de tuiles recouvertes.

Le processus « Ligne »

Le processus « Ligne » d´etermine l’intersection d’un triangle et d’une ligne cou- rante. Pour cela, le parcours d´etermine l’intersection de chaque cˆot´e du triangle avec la ligne courante et, par comparaison des diff´erentes abscisses de ces intersections, d´elimite le segment correspondant `a l’intersection.

En raison de l’orientation ligne du traitement, nous exprimons logiquement l’abs- cisse d’un point en fonction de son ordonn´ee. Connaissant un point de r´ef´erence (xref, yref),

l’´equation (7.18) d´etermine l’abscisse d’un point d’ordonn´ee y connue. x = xref+

dx

dy(y − yref) (7.18)

Le segment, intersection entre la ligne et le triangle, est d´etermin´e par les abscisses de ses extr´emit´es. Une des extr´emit´es du segment est d´etermin´ee de mani`ere directe par l’intersection du cˆot´e de plus grande excursion verticale avec la ligne courante. Il s’agit du cˆot´e gauche et donc du point L dans le cas de la figure 7.10 (il s’agissait du cˆot´e droit figure 7.7). La seconde extr´emit´e est obtenue en choisissant judicieusement entre les intersections des deux autres cˆot´es : il s’agit de R1 dans le mˆeme exemple.

R2

L R1

Fig. 7.10 – Calcul d’intersection d’un triangle et d’une ligne de tuile (2). Un pixel d’abscisse xi est int´erieur au triangle si et seulement si xi ≥ L et xi ≤ min(R1, R2). Le

point L (resp. R1 et R2) correspond `a l’intersection du cˆot´e gauche (resp. droits) de ce triangle avec la ligne.

aux abscisses de chaque pixel de la ligne de tuile de mani`ere `a remplir la table d’index. Le tableau7.5 r´esume les op´erations arithm´etiques n´ecessaires pour le processus « Ligne » lors du traitement d’une seule ligne.

x Intersection

Additions 4N (1 + 2LT.) N

Multiplications 3N 0

Divisions 0 0

Tab.7.5 – Op´erations arithm´etiques pour le traitement d’une ligne : processus « Ligne ». Le calcul (y − yref) est commun pour chaque cˆot´e ; les comparaisons sont assimil´ees `a des

additions.

Le processus « Balayage »

Apr`es la d´etermination de la table d’index des triangles recouvrant une ligne de la tuile, le processus « Balayage » se charge de calculer les coordonn´ees dans l’espace texture du pixel courant. Nous assimilons la transformation g´eom´etrique entre les espaces ´ecran et texture `a une transformation affine d´efinie par six constantes ∂u∂x, ∂v∂x, uref, ∂u∂y,

∂v

∂y et vref. Les coordonn´ees (uref, vref) correspondent aux coordonn´ees de texture d’un

point de r´ef´erence (xref, yref). Connaissant ce point de r´ef´erence, la d´etermination des

coordonn´ees de texture d’un point quelconque est rappel´ee par l’´equation (7.19). (

u = ∂u∂x(x − xref) + ∂v∂x(y − yref) + uref

v = ∂u∂y(x − xref) + ∂v∂y(y − yref) + vref

(7.19)

Le tableau 7.6 donne le nombre des op´erations arithm´etiques n´ecessaires pour le processus « Balayage » pour le traitement d’une seule ligne.

(u, v)

Additions 6LT.

Multiplications 4LT.

Divisions 0

Tab. 7.6 – Op´erations arithm´etiques pour le traitement d’une ligne : processus « Balayage ».