• Aucun résultat trouvé

4 Algorithme de construction

4.1 D ´etection des nœuds

Avant de pr´esenter la construction proprement dite, nous ´evoquons bri`evement la question de la visibilit´e locale. Tout comme cela a ´et´e propos´e dans d’autres travaux (e.g. [GM90]), pour chaque arˆete adjacente `a deux faces d’un poly`edre, l’intersection des deux demi-espaces n´egatifs des polygones est invisible localement depuis l’arˆete. Quand nous calculons les interactions d’une arˆete e, nous n’avons donc pas besoin de consid´erer tout autre arˆete e0 qui est “derri`ere” les polygones adjacents `a e. Cela permet d’´eliminer un grand nombre d’´ev´enements potentiels.

Le principe g´en´eral de la d´etection des nœuds consiste tout d’abord `a trouver une droite poignardante extrˆeme potentielle engendr´ee par un ensemble de g´en´erateurs (c’est-`a-dire une droite qui passe par tous les g´en´erateurs). On teste ensuite si un objet se trouve entre les g´en´erateurs, auquel cas la droite est annul´ee `a cause de l’occultation. C’est la diff´erence entre la visibilit´e selon les droites et selon les segments telle que nous l’avons discut´ee dans le chapitre pr´ec´edent.

Nœuds triviaux

Les nœuds les plus simples `a traiter sont les VV , Fvv et Fe. Nous effectuons simplement une boucle sur les g´en´erateurs potentiels (sommets, arˆetes et faces). Les droites correspondantes sont ensuite intersect´ees avec la sc`ene en utilisant un simple lancer de rayon, afin de d´eterminer si un objet cause une occultation entre les g´en´erateurs. Si c’est le cas, la droite extrˆeme est annul´ee, sinon un nouveau nœud est cr´e´e. Le lancer de rayon donne de plus les polygones aux extr´emit´es de la droite poignardante extrˆeme, et donc la place des arcs adjacents dans le tableau `a double entr´ee.

Nœuds VEE et EEEE

Consid´erons deux arˆetes de la sc`ene eiet ej. Toutes les droites qui passent par ces deux segments sont `a l’int´erieur d’un t´etra`edre ´etendu (ou double coin) repr´esent´e figure 3.9(b), d´efini par quatre plans. Chacun de ces plans est d´efini par une des arˆetes et un sommet de l’autre arˆete.

Pour d´eterminer les sommets de la sc`ene qui peuvent ´eventuellement engendrer une droite poignardante extrˆeme V EE ou EV E, nous ne devons consid´erer que les sommets contenus dans ce t´etra`edre ´etendu. Si un sommet de la sc`ene est `a l’int´erieur du t´etra`edre ´etendu, il y a alors une droite extrˆeme V EE ou EV E potentielle.

Consid´erons ensuite une troisi`eme arˆete ek. Si ekcoupe l’un des plans du t´etra`edre, un nœud V EE ou EV E potentiel est d´etect´e : si l’arˆete ekintersecte le plan d´efini par l’arˆete eiet le sommet v de ej, alors une droite potentielle veiekou eivekest cr´e´ee (figure 3.9(b)).

Nous appelons le calcul des intersection de ekavec le t´etrah`edre ´etendu sa restriction. Il ne peut y avoir au plus que 3 segments `a l’int´erieur du double coin dans la restriction d’une arˆete, car il ne peut y avoir au plus que 4 intersections avec le double coin. De plus, les calculs des limites de la restriction d’une arˆete nous donnent

´egalement les droites V EE ou EV E potentielles engendr´ees par ek, l’une des arˆetes eiou ejet un sommet de l’autre arˆete.

La restriction d’une arˆete ekcorrespond ´egalement `a la restriction de l’ensemble de droites critiques eiejek par rapport `a celui g´en´er´e par les droites enti`eres supports de ei, ejet ek.

e

j

FIG. 3.9:(a) (b) ´Enum´eration des V EE et restriction des EEE. (c) Calcul des E4 : il s’agit de trouver la droite passant par ejekelqui passe aussi par elekei.

Int´eressons-nous maintenant au calcul des nœuds E4. L’intersection de ekavec le double coin a restreint ek. Pour obtenir une droite passant par ei, ejet ek, nous ne devons consid´erer que les segments de ek `a l’int´erieur du double coin. Ce processus de restriction est ´egalement appliqu´e `a une quatri`eme arˆete el, qui est ensuite

´egalement restreinte par le double coin de ei et ek, puis par celui de ej et ek. Ces restrictions successives

´eliminent un grand nombre de candidats.

Une fois que la restriction est effectu´ee, nous avons deux ensembles critiques EEE : celui engendr´e par el, eiet ej, et celui engendr´e par el, eiet ek. Une simple recherche dichotomique est ensuite utilis´ee pour trouver (s’il existe) le point sur elpar lequel passe une droite extrˆeme de type E4 eiejekel. Cette dichotomie est faite sur un point P de el, en cherchant le z´ero de l’angle form´e par les deux droites Liet Lj d´efinies par l’intersection du plan(P;ei)avec ejet avec ek(figure 3.9(c)).

Un algorithme plus robuste tel que celui pr´esent´e par Teller et Hohmeyer [TH91] pourrait ˆetre utilis´e. Ce-pendant, notre algorithme simple a sembl´e donner des r´esultats satisfaisants en pratique. C’est le cas principa-lement parce que nous ne cherchons pas des droites qui passent par des droites infinies, mais par des segments restreints au pr´ealable. L’algorithme d’´enum´eration des V EE et des E4 est d´ecrit figure 4.1.

Acc ´el ´eration `a l’aide d’une subdivision de l’espace

Nous avons d´evelopp´e une m´ethode d’acc´el´eration pour ´eviter l’´enum´eration de tous les triplets d’arˆetes.

Pour chaque paire d’arˆetes, nous rejetons la plupart des troisi`emes arˆetes potentielles rapidement grˆace `a une grille r´eguli`ere. Au lieu de tester si chaque cellule de la grille est `a l’int´erieur du t´etra`edre ´etendu, nous utilisons sa projection sur les trois plans align´es aux axes. Nous projetons le t´etra`edre ´etendu (ce qui donne une forme de sablier) sur chacun des trois plans. Pour calculer cette projection, nous calculons en fait le sablier en 2D

enumeration des VEE et des E4 potentielles

f

foreach edge eifrom 1 to n

foreach edge ejfrom i+1 to n locally visible foreach edge ekfrom j+1 to n locally visible

compute the EEE restrictions eiejek foreach edge ekfrom j+1 to n locally visible

foreach segment of its restrictions

foreach edge elfrom k+1 to n locally visible foreach segment of its restrictions

foreach of the edge endpoints sep

if sepis inside the double wedge propose a VEE

restrict the edge

g

(a) (b)

FIG. 3.10: ´Enum´eration des E4 et des V EE potentielles.

`a l’aide des boˆıtes englobantes des deux arˆetes eiet ej. Le sablier 2D est d´efini par les droites s´eparatrices et supports des projections des boˆıtes englobantes. Ces sabliers 2D sont discr´etis´es `a la r´esolution de la grille de mani`ere prudente (tout pixel qui contient un point du sablier est marqu´e valide).

Nous calculons ensuite l’intersection arˆete ek-t´etra`edre ´etendu (la restriction) uniquement pour les arˆetes qui se trouvent dans des cellules de la grille dont les trois projections sont `a l’int´erieur des sabliers. Ce processus est r´esum´e figure 3.11).

ei ej ei

ej

(a) (b)

FIG. 3.11: Acc´el´eration `a l’aide d’une grille r´eguli`ere et de sabliers. (a) Deux arˆetes et le t´etra`edre ´etendu correspondant. (b) Nous utilisons la projection selon les trois axes de la grille r´eguli`ere. La projection des boˆıtes englobantes des arˆetes est utilis´ee pour calculer la forme du sablier. Les cellules valides sont celles qui se projettent sur les pixels (en gris) des sabliers sur chacun des trois plans.

Nœuds non triviaux engendr ´es par des faces

Pour calculer les nœuds non-triviaux engendr´es par des faces (FvE, FF et FEE), nous commenc¸ons par calculer l’intersection du plan support de chaque face f1 avec toutes les arˆetes de la sc`ene. Pour toute arˆete qui coupe ce plan, nous essayons de cr´eer un nœud FvE (figure B.3). C’est-`a-dire que nous effectuons le test d’occultation (y a-t-il un objet entre la face et l’arˆete ?), et si aucune occultation n’est d´etect´ee, nous cr´eons effectivement le nœud.

Pour chaque paire d’arˆetes intersectant le plan de la face, nous regardons si une droite extrˆeme FEE po-tentielle existe. Pour ceci, nous d´eterminons si la droite joignant les deux intersections passe par la face f1. Si c’est le cas, la droite FEE potentielle est ensuite pass´ee au test d’occultation.

Pour finir, nous v´erifions si des nœuds FF potentiels existent. Cela se produit si les faces adjacentes `a une arˆete qui intersecte le plan engendrent une droite FF (face f2dans la figure 3.12 (b)). La construction des droites extrˆemes FEE et FF est d´ecrite figure 3.12.

Detection des noeuds lies aux facesf foreach face f1of the scene

foreach edge e of the scene

compute the intersection of the edge e with the plane of f1 foreach intersection Pi

create a FvE

foreach intersection Pj

if (PiPj) intersects f1 create FEE

foreach of the 2 faces f2adjacent to the edge of Pi find Pjthe intersection of a second edge of f2with f1

FIG. 3.12: D´etection des nœuds li´es aux faces.

4.2 Cr ´eation des arcs

Creation d’un noeud du squelette de visibilite

f

foreach adjacent arc n compute t

foreach arc a with same extremities et same generators if a!tstart<t<a!tend

La cr´eation des arcs du squelette de visibilit´e est effectu´ee simultan´ement `a la d´etection des nœuds. Lors-qu’un nouveau nœud est ins´er´e, nous traitons tous les arcs a adjacents grˆace au catalogue pr´esent´e section 2.3.

Si l’arc a d´ej`a ´et´e cr´e´e (lors de la cr´eation d’un nœud pr´ec´edent) nous le relions simplement au nouveau nœud, sinon nous le cr´eons et le relions au nœud (il a donc son autre extr´emit´e provisoirement pendante, dans l’attente de l’insertion d’un autre nœud).

Pour cela, pour chacun de ces arcs a, nous calculons le param`etre t (cf. section 3.1) qui correspond au nouveau nœud, puis nous faisons comme expliqu´e en figure 4.2. Nous acc´edons aux arcs a0du squelette de visibilit´e qui ont les mˆemes extr´emit´es que a (et donc qui se trouvent dans la mˆeme case du tableau ou dans le mˆeme arbre de recherche) et qui ont les mˆemes g´en´erateurs (sommets, faces, arˆetes). Si la valeur de t indique que que le nouveau nœud est contenu dans a0, c’est que a avait d´ej`a ´et´e cr´e´e et est ´egal `a a0. Nous devons ensuite d´eterminer si le nœud est un nœud de d´ebut ou de fin pour cet arc (en fonction de la param´etrisation choisie).

Cela sera expliqu´e plus en d´etails dans le paragraphe suivant. Si cette position est d´ej`a occup´ee, nous coupons l’arc en deux, sinon nous attachons le nœud `a l’extr´emit´e correspondante de l’arc.

Nous avons vu ci-dessus que pour chaque arc adjacent `a un nœud, nous devons savoir s’il s’agit d’un nœud de d´ebut (start) ou de fin (end) par rapport `a la param´etrisation de l’arc. C’est-`a-dire que l’on veut savoir si le nœud bloque l’arc dans le sens des t croissants ou d´ecroissants. Dans certains cas, cette op´eration est triviale.

Par exemple pour un nœud v1v2et l’un des ses arcs adjacents v1e, il suffit de d´eterminer si v2est le sommet de d´ebut ou de fin de e (rappelons que les arˆetes sont arbitrairement orient´ees et que la param´etrisation t est bas´ee sur un rep`ere li´e aux arˆetes). Dans d’autres cas, cette d´etermination peut ˆetre plus ardue, en particulier pour les nœuds E4. Nous avons renvoy´e la description des crit`eres pour ces configurations dans la table 2 de l’annexe B.

e maintenant deux nœuds extr´emit´es. (c) Insertion du nœuds ve3e. L’arc ve est coup´e en deux. (d) Insertion du nœuds ve4e, les deux arcs ve ont leurs deux v´eritables nœuds-extr´emit´es.

Dans la figure 3.14, nous illustrons par un exemple notre algorithme de construction. Au d´ebut, un nœud trivial vveest cr´e´e. Le second nœud d´etect´e est v f e, qui est adjacent `a vveet v f e. Le troisi`eme nœud est vee3. Quand ce nœud est ins´er´e, nous r´ealisons que le nœud de d´ebut de ve existe d´ej`a, nous coupons donc ve en deux. L’arc ve issu de la subdivision qui est connect´e `a vvea un nœud extr´emit´e ind´efini. La derni`ere insertion que nous montrons est celle de ve2e qui remplit ce vide.

4.3 Traitement des configurations d ´eg ´en ´er ´ees

La g´eom´etrie algorithmique fait souvent l’hypoth`ese que les sc`enes sont en configuration g´en´erique. Mal-heureusement, en synth`ese d’images, les sc`enes sont la plupart du temps hautement d´eg´en´er´ees : de nombreux points sont align´es, des segments et des faces sont parall`eles, coplanaires, et les objets se touchent les uns les autres.

Cela engendre des ´ev´enement visuels d´eg´en´er´es ; par exemple des droites poignardantes extrˆemes VVV pas-sant par trois sommets, ou des E5 qui passent par cinq arˆetes (ces ´ev´enement d´eg´en´er´es interviennent ´egalement dans le traitement des sc`enes dynamiques discut´e en section 7).

Ces configurations d´eg´en´er´ees sont la cause de la double d´efinition de certaines surfaces critiques, et surtout d’instabilit´es num´eriques pour les tests d’occultation pour les droites extrˆemes potentielles. Une droite extrˆeme peut ˆetre supprim´ee de mani`ere al´eatoire, ce qui peut entraˆıner des incoh´erences dans le voisinage du nœud correspondant dans le graphe. Une politique coh´erente doit donc ˆetre d´efinie pour d´ecider d’inclure ou non de tels nœuds et leurs arcs adjacents.

Tout d’abord, nous devons d´etecter ces probl`emes. Quand un test d’occultation est effectu´e sur une droite extrˆeme potentielle, nous v´erifions aussi la pr´esence d’objets rasants (en particulier des arˆetes colin´eaires `a la droite ou des faces qui lui sont coplanaires). Cela n´ecessite une simple modification du test de d’appartenance

`a un polygone pour le lancer de rayon (une tol´eranceεest donn´ee). Nous pouvons ainsi d´etecter l’intersection avec une arˆete ou un sommet silhouette.

Nous devons ensuite traiter la droite extrˆeme qui a ´et´e d´eclar´ee d´eg´en´er´ee. Une premi`ere possibilit´e serait de cr´eer explicitement un catalogue de configurations d´eg´en´er´ees et des adjacences appropri´ees. Mais `a cause du trop grand nombre de cas diff´erents, cette approche devient vite impossible `a impl´ementer. Nous avons choisi de toujours consid´erer la situation proche non d´eg´en´er´ee la plus simple, c’est-`a-dire celle pour laquelle on cr´ee

le plus petit nombre d’´ev´enements visuels. Par exemple, si quatre arˆetes E1, E2, E3et E4sont parall`eles et dans cet ordre, nous consid´erons que E3cache E2, etc. Les configurations `a traiter sont donc plus simples et utilisent le catalogue d’adjacences standard du squelette de visibilit´e. Les probl`emes de pr´ecision num´erique sont g´er´es avec desεcoh´erents.

Nous ne pr´etendons cependant pas que les probl`emes de robustesse et de pr´ecision num´erique ont ainsi rec¸u une solution d´efinitive, g´en´erale et fiable, ainsi que nous en discuterons `a la fin de ce chapitre. Notre impl´ementation a cependant permis le calcul du squelette de visibilit´e pour des sc`enes contenant des d´eg´en´e-rescences typiques en synth`ese d’images.