• Aucun résultat trouvé

Approche déterministe : déplacement par points d’intérêts

CHAPITRE 4 : ACCÉLÉRATION DU RENDU DES TUILES VISIBLES

4.1.1 Approche déterministe : déplacement par points d’intérêts

4.1.1.1 Descripteur de visibilité

Dans cette section, la visibilité et l’occultation d’une tuile sont évalués par estima- tion de la densité d’occultation. Afin de mesurer la densité d’occultation en tout point de la tuile, nous nous servons des matrices de visibilité, dont le calcul est expliqué en sec- tion 3.2.1.1. En utilisant ces matrices, nous lançons un rayon depuis le centre de chacun des gridels entrants (éléments de grille) vers le centre de chacun des gridels sortants. Chacun des voxels de position vi, où i est l’indice du voxel de la tuile, possède deux

compteurs : un compteur d’occultation cpt_occiet un compteur de visibilité cpt_visi. Le

rayon lancé incrémente soit le compteur d’occultation, soit le compteur de visibilité de chacun des voxels qu’il traverse, selon que la relation gridel entrant / gridel sortant est occultante ou visible. Cette opération est répétée pour chacun des couples gridel entrant / gridel sortant possibles.

cpt_occi=

gin ∈ G

gout ∈ G

non_visible(gin, gout) × intersect(vi, gin, gout) (4.1)

cpt_visi=

gin∈ G

gout ∈ G

visible(gin, gout) × intersect(vi, gin, gout) (4.2)

où G est l’ensemble des gridels de la tuile t, non_visible(g,g0) la fonction retournant 1

si le gridel g n’est pas visible depuis g0, 0 sinon, visible(g,g0)la fonction retournant 1 si

le gridel g est visible depuis g0, 0 sinon, et intersect(v

i, g, g0)la fonction retournant 1 si

le rayon reliant les centres de g et g0intersecte le voxel v

i, 0 sinon.

Pour finir, chacun des compteurs est normalisé pour obtenir un coefficient compris entre 0 et 1. Les coefficients d’occultation ¯wiet de visibilité wid’un voxel visont donnés

par les équations suivantes :

¯wi=

cpt_occi

cpt_occi+ cpt_visi

(4.3)

où i est l’indice du voxel dont le compteur est calculé.

Ainsi, la grille de voxels possède deux champs de densité 3D, complémentaires l’un de l’autre, permettant de déterminer, pour chacun des points de l’espace d’une tuile, son coefficient d’occultation, i.e., s’il laisse passer la visibilité au travers de la tuile. Un exemple de grille de densité de visibilité obtenue pour le voisinage de deux objets est montré à la figure 4.2(a). Dans notre exemple, les couches horizontales de champ de densité 3D ont été fusionnées (moyenne) afin de pouvoir calculer des déplacements d’objets sur une seule couche (en 2D).

4.1.1.2 Points d’intérêts

Une fois les champs de densité d’occultation et de visibilité calculés pour une tuile, il s’agit dès lors de maximiser l’occultation globale de cette tuile en déplaçant les objets qu’elle contient. Pour cela, plusieurs contraintes doivent être respectées : un objet ne doit pas être déplacé trop loin de son point d’origine afin de respecter le modèle initial de l’infographiste ; si un objet génère beaucoup d’occultation localement, il doit être d’autant plus difficile de le déplacer ; et un objet a tout intérêt à se déplacer vers une zone où la densité de visibilité est élevée afin de générer plus de blocage après déplacement.

Ainsi, la première contrainte implique l’utilisation d’un paramètre de distance maxi- male ρ par rapport à la position d’origine de l’objet. ρ peut être fixé par l’utilisateur et sera exprimé dans ce chapitre comme une fraction de la taille unitaire d’une tuile. Les deux autres contraintes suggèrent l’utilisation de points d’intérêts. Lorsqu’un objet doit être déplacé, nous utilisons la position courante du centre de sa boîte englobante pos0

ob j

pour obtenir la position vob j du voxel auquel elle appartient. Lors de la première passe

d’optimisation pos0

ob j est égale à la position d’origine posob j de l’objet. Ensuite, nous

calculons deux positions moyennes à partir de la position du centre du voxel central vob j

et des positions des centres des voxels voisins vj. Ces deux positions servent de points

d’intérêts : la première, posocc, est calculée en pondérant les positions vob jet vjpar cha-

115 0.65 0.6 0.5 0.3 0.5 0 0 0 0.05 0.1 0.05 0.1 0.15 0.1 0.1 0.1 0.2 0.05 0.05 0.7 0.6 0.55 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.7 0.6 0.6 0.6 0.5 0.5 0.6 0.6 0 0 0 0 (a)

{

(b)

Figure 4.2 – (a) Un exemple de densité de visibilité obtenu dans les voisinages de deux objets. Les voxels bleus représentent le voisinage du premier objet. Les voxels rouges représentent le voisinage du second objet. Les voxels mauves représentent le voisinage des deux objets. Les points rouge et jaune désignent respectivement les points d’intérêts d’occultation et de visibilité de ce voisinage. (b) Schéma de la méthode utilisée pour dé- placer un objet en fonction des points d’intérêts posvis, posoccet de la distance maximale

de déplacement ρ.

ces positions par chacun des coefficients de visibilité :

posocc= ¯wob j× vob j+ ∑j(¯wj× vj) ¯wob j+ ∑j ¯wj (4.5) posvis= wob j× vob j+ ∑j(wj× vj) wob j+ ∑jwj (4.6) Ici, chacun des poids ¯wjet wjest utilisé tel quel mais il est également possible d’utiliser un filtre gaussien appliqué au rayon de voisinage afin de donner un poids plus grand aux voxels centraux (ceux qui sont proches de la position courante pos0

ob j) et un poids

moindre aux voxels de périphérie. Lorsque le voisinage d’un voxel dépasse de la grille de voxels de la tuile, les valeurs de bordure sont répétées pour éviter que les positions moyennes posoccet posvisne soient trop attirées au centre de la tuile lorsque l’on choisit

un voisinage trop grand

posoccet posvisafin de trouver le point d’intérêt posint :

posint= α × posocc+ (1 − α) × posvis , 0 ≤ α ≤ 1 (4.7)

où α est un coefficient permettant de privilégier l’occultation courante (α = 1) ou de d’occuper les endroits les plus visibles (α = 0).

4.1.1.3 Déplacement

Cette position d’intérêt permet ensuite de déplacer l’objet plus ou moins loin d’un facteur γ dans la direction −−−−−−−−→pos0ob j posint où pos0ob j est la position courante de l’objet.

Pour nos tests, le facteur de déplacement γ est une valeur constante. Toutefois, ce facteur peut être calculé par une fonction qui dépend par exemple de l’aire de la surface 2D de la boîte englobante ou du nombre de polygones de l’objet à déplacer, ou toute autre fonction définie par l’utilisateur selon le résultat qu’il souhaite obtenir (fonction proportionnelle, d’ordre n, etc.). La nouvelle position temporaire de l’objet est ainsi obtenue :

pos00ob j,temp= pos0ob j+ γ ×−−−−−−−−→pos0ob j posint (4.8) où γ permet d’accentuer ou de diminuer l’amplitude des déplacements.

Lorsque la nouvelle position pos00

ob j,temp est obtenue, il faut limiter le déplacement

de l’objet par rapport à sa position d’origine. Pour cela nous utilisons le calcul suivant pour obtenir la position finale pos00

ob j de l’objet :

pos00ob j= posob j+min(ρ,k

−−−−−−−−−−−−→ posob j pos00ob j,tempk) k−−−−−−−−−−−−→posob j pos00ob j,tempk

×−−−−−−−−−−−−→posob j pos00ob j,temp (4.9)

L’intégralité de cette démarche est illustrée par la figure 4.2(b) et elle peut être réitérée plusieurs fois en recalculant les matrices de visibilité à chaque passe afin de pouvoir évaluer l’évolution de l’occultation au niveau global de la tuile.

Nous pouvons remarquer qu’un objet peut potentiellement se retrouver coincé dans une position. En effet, si la position courante pos0

au cercle C de centre posob j et de rayon ρ (pos0ob j ∈C ) lors d’un précédent dépla-

cement et qu’une nouvelle position pos00

ob j,temp calculée est située dans le demi-espace

extérieur et tangent au cercle de rayon ρ en pos0

ob j, le déplacement sera nul. Ce cas n’est

tout de même pas récurrent du fait que tous les objets d’une même tuile sont déplacés en même temps et l’occultation locale d’un objet potentiellement bloqué varie énormé- ment. Les positions posviset posoccvarient donc beaucoup et elles font également varier

pos00ob j,temp.

Documents relatifs