vers l'index général de l'aide

vers les librairies d'isosurfaces

isosurfaces : multifractales à crêtes

("ridged multifractals")

objectif

Générer une fractale en 3D, somme de bruits fractals à fréquences successives, dont la dimension fractale varie avec l'amplitude (!!). Très approprié pour faire des reliefs montagneux, ou des surfaces d'eau, grâce aux reliefs "pincés" que l'on obtient.

compatibilité

MegaPOV 0.5

syntaxe

function {"ridgedmf", <H, Lacunarity, Octaves, Offset, Gain>}

H est le négatif de l'exposant des fréquences de bruit de base utilisées dans la construction de cette fonction (l'amplitude f de chaque fréquence est pondérée par le facteur f-H). Dans les paysages, et la plupart des formes naturelles, l'amplitude des contributions des hautes fréquences est habituellement moindre que celle des basses fréquences. Lorsque H est égal à 1, la fractalisation est relativement douce ("1/f noise"). Lorsque H approche de 0, la contribution des hautes fréquences devient aussi importante que celle des basses fréquences (comme pour du bruit blanc*).

* un bruit blanc, c'est du bruit qui contient toutes les fréquences de manière homogène, comme du souffle de bande magnétique.

Lacunarity est le multiplicateur utilisé pour passer d'une "octave" à l'autre dans le processus de fractalisation. Ce paramètre affecte la taille des "trous" de fréquence dans le motif. Donnez-lui une valeur supérieure à 1.

Octaves est le nombre de fréquences différentes ajoutées à la fractale. La fréquence de chaque octave est celle de la précedente multipliée par Lacunarity, ce qui veut dire qu'utiliser un grand nombre d'octaves amène rapidement des fréquences très élevées (en principe, les fréquences très élevées ont un faible apport, et ne font que grever les temps de calculs).

Offset règle la manière dont la dimension fractale de la fractale change d'altitude en altitude (c'est pour ça que ça s'appelle une "multifractale"). Les hautes fréquences à faible altitude sont plus atténuées qu'aux altitudes élevées, ce qui donne des altitudes basses plus adoucies que les altitudes élevées. Lorsque offset augmente, la dimension fractale devient plus homogène quand l'altitude augmente. Essayez de commencer avec une valeur d'environ 1.

Gain pondère les contributions successives des résultats fractals accumulés, afin que les plis se dressent pour former des crêtes.

tentative d'explication plus claire

Je crois que la meilleure comparaison possible consiste à imaginer cette fonction comme une onde sonore. Une onde sonore complexe (comme de la musique, par exemple) peut toujours se décomposer en une somme d'ondes sonores dont la fréquence est fixe, et dont l'amplitude varie. Chacune de ces ondes sonores, ajoutée aux autres, modifie le "mouvement" de l'onde globale, et contribue, pour une plus ou moins grande part, à l'ensemble. Si en assemblant les différentes ondes on peut faire varier leur amplitude, leur répartition, etc..., le son final en sera nettement affecté.

La multifractale est également une somme d'ondes (mais au lieu d'être sinusoïdales, elles ont une forme de bruit fractal, formé de manière similaire au relief vu dans la page sur les fractales), et les paramètres permettent de régler la répartition et les caractéristiques de ces ondes superposées.

Le nombre de ces "ondes" fractales combinées est déterminé par Octaves, le multiplicateur de la fréquence (quantité de variation par unité d'espace) des ondes successives est déterminé par Lacunarity, et H détermine le rapport (l'importance relative) entre les fréquences basses et les fréquences élevées.

exemple

//paramètres de rigedmf : H, lacunary, octaves, offset, gain
#declare Fun1=function {"ridgedmf", <.8, 2, 5, 1, 1.2>}
#declare FunP=function {x*0+y*1+z*0} //fonction d'un plan horizontal

isosurface { 
  function {FunP - Fun1/6} //la fractale est "soustraite du plan",
                           //pour faire apparaître les crêtes,
                           //sinon, ça ressemble à de la chantilly !
  threshold 0
  contained_by { box {<-1,-1,-1>,<1,1,1>} }
  accuracy .01
  method 2
  eval
  pigment {Wheat} 
}

Rédacteur: Fabien Mosen