Fuites: causes et solutions

Pour Arabeske, une fuite est l'application de plusieurs textures à une même surface fermée. Elle peut résulter d'une erreur d'inattention, lorsqu'une surface précisément définie reçoit plusieurs textures, mais dans la plupart des cas c'est la délimitation du contour à texturer qui est en cause. Souvent, un motif qui semble fermé est en fait ouvert, sans que cela soit visible à l'oeil nu.

Pour aider à détecter les fuites dans les motifs, Arabeske indique par défaut, le cas échéant, une paire de textures remplissant la même surface, ainsi que les deux lignes les plus proches non sécantes. Cette aide peut être précieuse, mais elle est relativement coûteuse en temps de calcul (c'est la partie 7/10 de l'algorithme de texturage), c'est pourquoi elle peut être désactivée au niveau des préférences utilisateur.

Deux façons assez classiques d'introduire des fuites sont l'usage de coordonnées rectangulaires dans les groupes p3* ou p6*, et une gestion maladroite des angles dans des motifs entrelacés.

Coordonnées rectangulaires

Prenons un exemple simple : un banal triangle, inscrit dans un cercle de rayon 300. En coordonnées polaires, c'est évident : un motif de groupe p3, un noeud primaire de rayon 300, et un lien polaire de ce noeud vers lui-même, de l'angle 0 à l'angle 120°. Une petite texture, un passage en mode final, et voilà :

Maintenant, essayons avec des coordonnées polaires. On créé un nouveau motif p3, et un lien en coordonnées rectangulaires. On sort la calculatrice et on refait les calculs qu'Arabeske avait fait automatiquement en polaire. Les coordonnées de départ sont (300, 0) : pas de problème. Les coordonnées d'arrivée sont (300*cos(120°), 300*sin(120°)), soit (-150, 259.807). Facile, on arrondit à (-150, 260), c'est d'ailleurs ce qui se passe avec une édition manuelle et une grille réglée sur un pas de 10 unités. Un passage en mode final et, oh surprise, Arabeske signale une fuite : la peinture a débordé et inonde maintenant le fond de l'image.

Que s'est-il passé ? La gestion interne des liens dans Arabeske se fait en virgule flottante, avec des calculs de coordonnées très précis. En coordonnées polaires, les coordonnées réelles des points sont calculés de façon bien plus précise que le millième d'unité permis par l'interface utilisateur en coordonnées rectangulaires. Résultat : le code de recherche d'intersections détecte l'écart de 0.183 unités et considère que les deux lignes ne se rencontrent pas. On peut cependant tricher et ajuster les valeurs pour avoir une petite intersection : remplacer 260 par 259 résout la fuite. Cela dit, vu en mode entrelacé, ce n'est guère brillant :

La seule véritable solution propre pour travailler dans les groupes p3* et p6* est donc d'employer des coordonnées polaires.

Les liens rectangulaires sont en revanche sans danger dans deux cas : soit dans les groupes p4*, où les rotations n'introduisent pas d'erreurs d'arrondi, soit lorsque les segments sont « franchement » sécants, sur plus d'un millième d'unité, et que l'on n'a pas besoin d'entrelacs.

Entrelacement d'angles aigus

Imaginons qu'au cours de vos nombreuses pérégrinations internationales, vous ayez noté quelque part dans vos carnets de voyage le motif suivant :

Motif carrelage Wacom

De retour chez vous, vous vous ruez sur Arabeske, et au bout d'environ 15 à 20 secondes, vous avez créé ce motif, constitué de deux liens rectangulaires et cinq textures :

Objets motif carrelage
 
Brouillon motif carrelage

Le passage en mode « final » fonctionne très bien, mais en mode « entrelacé », c'est beaucoup moins réussi :

Motif carrelage final Motif carrelage entrelacé

Le mode entrelacé ne fonctionne correctement que si deux lignes se croisent à la fois, et pas plus. Ici, il y en a trois, et Arabeske n'a pas de boule de cristal pour l'aider à déterminer les chemins à suivre. Dont acte : de toutes façons le carré intérieur déborde, alors rétrécissons-le pour le ramener dans le droit chemin. Et nous voilà avec une fuite.

Comment éviter ce genre de problème ? La question n'est pas simple : soit on fait un carré intérieur trop petit, et le motif fuit, soit on le fait plus grand, et on se retrouve avec un angle saillant franchement indésirable. A vrai dire la solution n'est pas simple non plus, et ce n'est pas pour rien que vous ne verrez jamais votre motif dans une arabesque « manuelle ».

Pour que vos contours soient fermés, il faut que les carrés intérieur et extérieur se touchent. Pour que votre angle soit « propre », il faudrait qu'ils soient éloignés... ou que les angles soient bien coupés. C'est ici qu'il faut chercher la solution. En ouvrant le bord du carré extérieur, et en faisant se croiser les bords du carré intérieur, on aboutit au motif suivant :

Motif carrelage corrigé