|
Les couleurs des fractales |
|
Retour à la page de présentation
![]()
La coloration des images fractales est indispensable à leur visualisation. Elle est un élément capital de leur dimension artistique. Cette question a fortement évolué ces dernières années avec la généralisation des cartes graphiques permettant d'afficher un grand nombre de couleurs et grâce à l'imagination de divers auteurs de programmes générateurs de fractales. Un bref exposé figure dans la sci.fractals FAQ. Une partie non négligeable de ce qui suit est inspiré d'un large échange de points de vue sur ce thème qui s'est déroulé au sein de la «fractal art discussion list».
Cette page contient de nombreux liens vers divers sites et vers la page (en anglais) où j'ai rassemblé les articles publiés dans cette liste de discussion.
![]()
On peut représenter un nombre complexe par un point dans un plan où les coordonnées x et y correspondent aux parties réelle et imaginaire du nombre (voir également ici). Dans les fractales produites par l'itération de polynômes complexes on introduit chacun des points de la portion du plan affichée à l'écran dans une fonction et on va suivre l'évolution de la valeur de la fonction au cours des itérations successives. Chaque valeur peut être représentée par un nouveau point de coordonnées x1 y1, x2 y2... Les positions de ces point représentant les valeurs successives de la fonction dessinent une orbite. Pour certaines valeurs de la variable complexe (= pour certains points de départ du plan) l'orbite est bornée dans l'espace (elle ne dépasse pas certaines limites du plan) ; elle peut même aboutir à une trajectoire cyclique. Dans d'autres cas au contraire l'orbite s'échappe vers l'infini au bout d'un certain nombre d'itérations ; autrement dit la fonction diverge. Bien entendu il faudrait un nombre infini d'itérations pour être sûr du comportement d'un seul point lors d'un calcul réel et on ne pourrait jamais dessiner de fractales. Tout l'intérêt d'une bonne connaissance des mathématiques est de pouvoir détecter (pour la plupart des points) au bout d'un nombre d'itérations raisonnable si la fonction va diverger ou non.
Si on veut représenter le résultat d'un calcul portant sur un point il y a deux solutions. L'une consiste à utiliser un troisième axe de coordonnées et on obtient alors un relief fractal. L'autre, plus courante, consiste à utiliser une échelle de couleurs pour représenter cette valeur. Le nombre de couleurs nécessaires pour afficher de manière adéquate le résultat peut être très variable. Pour reprendre l'exemple classique des ensembles de Julia ou de Mandelbrot, le résultat le plus simple à représenter est la réponse à la question :le point appartient-il à l'ensemble ? Si oui on lui affecte une couleur, sinon on lui en affecte une autre. Il suffit alors de 2 couleurs (noir et blanc par exemple) et ceci était parfaitement compatible avec les limites des anciens ordinateurs.
Mais on s'est vite rendu compte que les calculs permettant de répondre à cette question simple fournissaient d'autres informations intéressantes. L'une des plus classiques est la réponse à la question suivante : au bout de combien d'itérations va-t-on s'apercevoir que le point n'appartient pas à l'ensemble, c'est-à-dire que l'orbite tend à « s'échapper » vers l'infini ? On aboutit alors à la méthode de coloration la plus classique, connue sous l'appellation anglaise "escape time method". À la rigueur, on peut se contenter là encore du noir et du blanc (l'un pour les valeurs paires, l'autre pour les valeurs impaires) pour avoir une idée de la répartition des valeurs, mais les résultats sont plus esthétiques avec un affichage polychrome : après les 16 couleurs du mode VGA des PC, c'est le mode 256 couleurs qui s'est imposé et a été popularisé en particulier par le célèbre programme Fractint. On observe que les points se répartissent en auréoles "concentriques" autour de la zone représentant l'ensemble lui-même. Les auréoles sont de plus en plus serrées lorsqu'on se rapproche de l'ensemble. Avant d'aller plus loin, remarquons que ce qui est affiché ici n'est pas la valeur prise par la fonction lors de la dernière itération, contrairement à ce que pouvait laisser penser l'explication (nécessaire) ci-dessus relative aux orbites, mais le nombre d'itérations nécessaires pour voir que l'orbite s'échappe.
La technique de coloration classique consiste à construire une palette de couleurs successives et à affecter la couleur n° 1 aux points pour lequel la divergence est constatée à la première itération, la couleur 2 aux points où elle est constatée à la deuxième etc. La beauté des images repose sur le choix des couleurs de cette palette. Une leçon magistrale sur la construction de palettes de couleurs artistiques est fournie par Linda Alison pour Fractint, mais on peut s'en inspirer pour d'autres programmes reposant sur l'utilisation de palettes.
La limitation à 256 couleurs (236 pour les programmes fonctionnant sous Windows, car les système réserve 20 couleurs pour son propre affichage) constitue-t-elle une limitation ? La réponse est à la fois non et oui. Non, car si la valeur à représenter dépasse 256, on recommence avec la couleur 1 (autrement dit les couleurs de la palette sont appliquées modulo 256). Oui, car cela ne permet généralement pas d'avoir une transition suffisamment progressive entre couleurs adjacentes. Or s'il est souhaitable dans beaucoup d'images fractales d'avoir des limites nettes entre certaines plages de couleurs différentes (par exemple une plage de rouges et une plage de verts), il est également indispensable d'avoir une transition graduée, par exemple entre le vert le plus clair et le vert le plus foncé d'une plage.
On aboutit alors à deux questions souvent confondues, mais en fait distinctes : comment supprimer les discontinuités indésirables dans une palette de couleurs ; comment utiliser au mieux les possibilités d'affichage des couleurs des cartes graphiques actuelles ?
Remarquons en effet que si on limite le nombre de plages de couleurs à 2, 3 ou 4 dans une palette de 256 couleurs, il est souvent possible d'obtenir une transition assez progressive à l'intérieur d'une plage pour que les discontinuités soient, dans l'ensemble, peu visibles où même invisibles (voir certaines images des pages 10 à 12 de l'album et ce texte). Mais il est évident que l'utilisation d'un nombre de couleurs supérieur à 256 va faciliter les choses.
Ceci conduit aux programmes de fractales récents qui permettent d'utiliser les possibilités d'affichage « true color » des cartes graphiques actuelles. Il faut signaler d'emblée que l'expression « 16 millions de couleurs » conduit à des contresens parfois importants. Tout d'abord il ne peut pas y avoir dans une image plus de couleurs que de pixels, soit 307 200 en 640x480, ou 480 000 en 800x600. Mais ceci n'est pas le plus important comme on va le voir.
Bien que meilleure, l'expressions « affichage 24 bits » masque aussi un problème, car il vaudrait mieux dire « affichage 8x3 bits ». En effet dans ce mode un octet est affecté à chacune des couleurs de base rouge, vert et bleu. Ceci signifie qu'il y a bien 16 777 216 combinaisons différentes (2563), mais cette technique n'autorise pas à faire n'importe quoi. Par exemple supposons que nous fassions évoluer une plage de la palette du rouge pur au noir : nous ne pourrons avoir que 256 couleurs différentes puisque l'évolution ne pourra se faire que par valeurs entières entre 255 (rouge pur) et 0 (noir). De même si nous voulons avoir une palette qui va du blanc au noir en passant par toutes les nuances de gris, nous sommes là encore limités à 256 valeurs. La situation sera plus complexe (donc le nombre de couleurs pourra être plus grand) si nous créons une transition entre deux couleurs différentes, et non entre deux valeurs de luminosité de la même couleur. Mais toutes les transitions possibles ne sont pas obligatoirement esthétiques car certaines produisent des couleurs intermédiaires ternes et « sales ».
Enfin il ne suffit pas d'avoir un programme gérant les couleurs sur 24 bits pour avoir des transitions de couleur progressives : il faut aussi que l'algorithme de calcul de la fractale fournisse des valeurs adaptées. Dans le cas de la méthode classique « escape time » il est évident qu'on ne peut pas avoir un nombre de couleurs supérieur au nombre d'itérations maximum qu'on a fixé pour le calcul. Or pour des raisons de durée de calcul on se limite souvent à une ou quelques centaines d'itérations. Par sa nature même cet algorithme fournit des auréoles de couleurs discontinues. Heureusement le nombre d'itérations nécessaires pour détecter la divergence n'est pas le seul résultat utilisable pour fixer la couleur d'un point. Tout algorithme fournissant des valeurs fractionnaires évoluant progressivement est un bon candidat pour une représentation "true color".
Linas Vepstas a inventé un algorithme intéressant permettant d'obtenir une variation progressive des couleurs avec une modification de la méthode « escape time ». Fondamentalement le principe consiste à calculer non seulement le nombre d'itérations nécessaires pour détecter la divergence, mais surtout à quelle distance de la limite séparant 2 itérations successives se trouve le point (voir un exposé bref ici et une information plus détaillée sur le site de Linas Vepstas).
D'autres méthodes connues depuis plus longtemps sont également utilisables. Par exemple on peut prendre la valeur de l'angle que fait l'orbite avec l'axe des x au moment où la divergence est détectée ou encore utiliser les potentiels calculés par la formule log |z|/2itérations, (lire "log|z|/2^iterations" si votre navigateur n'accepte pas les exposants) à condition d'utiliser une valeur très élevée pour tester la divergence.
De façon plus générale nous avons vu précédemment que la méthode de coloration classique utilise le nombre d'itérations et non la valeur de la fonction lorsqu'on détecte que l'orbite va « s'échapper ». Mais cette valeur de la fonction, ou toute autre valeur calculée en dérivant peut être utilisée pour affecter une couleur : par exemple on peut prendre la partie réelle, la partie imaginaire, ou n'importe quelle combinaison des deux. On peut combiner ces valeurs avec celles des points précédents de l'orbite, ou avec le nombre d'itérations... Si vous n'êtes pas trop effrayés par l'abstraction, Rich Thomson a développé un formalisme intéressant pour résumer un certain nombre méthodes de coloration.
Remarquons que dans ce qui précède j'ai raisonné uniquement sur la couleur à attribuer aux points se trouvant en dehors de l'ensemble. Tous les points de l'ensemble sont représentés avec la même couleur (le bleu dans la palette standard de Fractint, mais c'est une simple affaire de convention). Or les points qui appartiennent à l'ensemble ne sont pas tous équivalents car le résultat de l'itération de la fonction décrit une orbite bornée certes, mais différente pour chacun d'eux. Il est possible de récupérer ces informations numériques pour affecter à ces points une couleur propre et observer des structures colorées à l'intérieur de la plage représentant l'ensemble lui-même.
Et maintenant, comment les couleurs sont-elles générées ? Les palettes de 256 couleurs sont généralement créées « à la main ». Toutefois pour ménager des transitions régulières à l'intérieur d'une plage de couleurs il suffit de fixer la couleur de départ et la couleur d'arrivée. L'éditeur de palette contenu dans le programme de fractales permet de créer automatiquement le gradient s'étendant entre ces deux limites. Fractint possède un très bon éditeur de palette, ainsi que les programmes de Terry W. Gintz.
Les programmes « true color » peuvent partir d'une palette de ce type et interpoler les valeurs intermédiaires. On garde la souplesse du choix des couleurs grâce à la construction d'une palette ayant un nombre limité de couleurs et on obtient une image contenant des dizaines (centaines) de milliers de couleurs. Les programmes de Stephen Ferguson utilisent une autre approche : l'utilisateur ne construit pas la palette en choisissant lui-même les couleurs, mais en réglant quelques paramètres qui font varier indépendamment et de manière algorithmique chacune des trois couleurs (R, V et B) selon une fonction (en dent de scie dans les anciens programmes, sinusoïdale dans les plus récents). Les couleurs sont plus difficiles à maîtriser qu'avec une palette mais on obtient des effets très originaux qui sont un des facteurs expliquant l'intérêt actuel porté par beaucoup de créateurs de fractales à ces programmes.
Mais, que ce soit avec les programmes basés sur des palettes classiques ou des palettes algorithmiques (comme ceux de Stephen Ferguson) le principe est toujours le même : on calcule un index pour chaque point et on lui affecte la couleur dont le numéro correspond à l'index. En d'autres termes une palette est une liste de couleurs à une dimension.
Or, en raison de la technique d'affichage des couleurs à l'écran, basée sur 3 couleurs fondamentales (rouge, vert, bleu), il est théoriquement possible de créer des couleurs dans un espace à 3 dimensions. On peut demander à un algorithme fractal de calculer séparément les valeurs (de 0 à 255) pour chacune des composantes R, V et B de la couleur. On a alors une colorisation purement algorithmique de l'image qui ne repose sur aucune palette de couleur. Quelques auteurs de programmes ont utilisé cette idée pour colorer les fractales, soit de façon exclusive, soit pour nuancer les couleurs obtenues à partir d'une palette classique. Les réflexions le plus avancées dans cette voie sont certainement celles de Earl L. Hinrichs. Celui-ci suggère par exemple de considérer que l'image fractale est « éclairée » par trois sources indépendantes de lumière (R, V, B) dont la position dans le plan et l'intensité peuvent être réglées par l'utilisateur du programme. Connaissant l'imagination de cet auteur, il n'est pas impossible d'ailleurs que ses réflexions aient déjà dépassé ce stade. Toujours est-il que ses images ne peuvent généralement être comparées à aucune autre. Malheureusement Earl L. Hinrichs n'a jamais développé un programme suffisamment stable pour être diffusé, mais a exposé ses idées à diverses occasions, ce qui peut permettre à d'autres programmeurs de s'en inspirer.
Une dernière précision : j'ai raisonné jusqu'à présent en supposant que le critère utilisé pour colorer le point était, d'une manière ou d'une autre, déterminé seulement par la détection de la divergence de la fonction. Mais certains spécialistes des images fractales on imaginé des méthodes bien plus subtiles. Paul Carlson a joué un rôle déterminant en mettant au point des algorithmes de « capture d'orbites » (orbits trap). Phil Pickard y a aussi beaucoup contribué en apportant ses propres algorithmes et en créant puis diffusant son programme Fractal Orbits. Celui-ci a été le premier à permettre à des non-programmeurs de créer des images en utilisant ces techniques. Plus récemment Paul Carlson a adapté ces algorithmes à Fractint et Ultra Fractal. Le principe consiste à tester, par exemple, si l'orbite du point tombe dans un cercle, un anneau, un carré... et à colorer le point en fonction de la distance entre ce point et le bord ou le centre de cette figure. Les images obtenues montrent des structures fractales en sphères, anneaux, cylindres, cônes, ayant un aspect « solide » très caractéristique. Pour obtenir de bons résultats il faut utiliser des palettes de couleurs ayant des caractéristiques précises. Ces techniques sont maintenant incorporées dans plusieurs générateurs de fractales.
En fait la répartition des couleurs est indissociable des méthodes de tracé : la même fonction peut donner des images plates et sans intérêt, ou révéler au contraire des structures qui auraient été totalement invisibles avec l'algorithme standard « escape time » ou avec une palette de couleurs utilisant un gradient continu. C'est spectaculaire avec les algorithmes de capture d'orbite car le nombre des structures visibles (donc la complexité de l'image) dépend entièrement du nombre de plages existant dans la palette, mais c'est également vrai pour toutes les images fractales. Une page de Damien M. Jones expose la manière de créer pour Fractint des formules utilisant des méthodes de coloration non conventionnelles. Elles font appel à quelques connaissances mathématiques mais présentent l'intérêt de montrer la liaison étroite existant entre les formes et les couleurs dans les fractales.
![]()
Retour à la page de présentation
Modifié le : 02/10/03