init:
S'exécute une fois par pixel. Définis ici la valeur d'orbite initiale et les éventuelles variables auxiliaires.
Apprends le sous-ensemble FRM testé de FractalPark, comprends comment la source devient un shader GPU, et construis trois formules fonctionnelles à partir des mêmes exemples utilisés par l'éditeur.
FRM est un moyen compact et textuel de décrire une fractale itérative. Une formule nomme son état de départ, le calcul répété pour chaque orbite et la condition qui décide si l'itération continue.
Le format est issu de l'écosystème Fractint, où les fichiers de formules permettaient d'échanger des expériences sans reconstruire le programme de rendu. FractalPark transmet cette idée d'écriture dans un flux de travail navigateur, tout en documentant son propre sous-ensemble testé au lieu de revendiquer une compatibilité complète.
Pour les origines et l'histoire du projet au sens large, voir le site du projet Fractint.
FractalPark tokenise, analyse, valide et compile un sous-ensemble FRM délibéré. Le tableau sépare les constructions qui fonctionnent directement, celles qui ont une sémantique FractalPark documentée et celles que le flux de travail actuel ne peut pas préserver.
| Niveau | Signification | Périmètre vérifié |
|---|---|---|
| Pris en charge | Couvert par les tests du compilateur et utilisable sans qualification sémantique. |
|
| Adapté | Accepté avec une différence sémantique documentée ou en tant qu'extension FractalPark. |
|
| Non pris en charge | Non préservé par le compilateur actuel ou le flux de travail de fichiers ; rejeté plutôt que réécrit silencieusement. |
|
Il s'agit d'une base de compatibilité testée, et non d'une revendication de compatibilité totale avec Fractint. Lorsque le compilateur change, cette matrice et ses tests doivent changer ensemble.
Ces décomptes de capacités proviennent du manifeste versionné : 588 entrées cibles comprennent 579 validations strict-v2 et 9 dérogations documentées ; 117 entrées distinctes sont exclues pour des raisons stables.
Paramètres : p1, p2, p3, p4, p5 · Emplacements de fonction : fn1, fn2, fn3, fn4
Manifeste de capacités v1 · Sémantique stricte v2
Une formule FRM FractalPark comporte une déclaration nommée et trois sections explicites. Ensemble, elles définissent la transition d'état pour chaque pixel.
S'exécute une fois par pixel. Définis ici la valeur d'orbite initiale et les éventuelles variables auxiliaires.
S'exécute une fois par itération. Mets à jour z et tout état nécessaire à la prochaine itération.
Renvoie la condition pour continuer l'orbite. Lorsqu'elle devient fausse, le point s'est échappé.
Les noms de sections sont structurels, pas des commentaires : en omettre un ou l'écorcher produit un diagnostic.
Le langage reste volontairement restreint : les expressions décrivent l'arithmétique complexe, les instructions mettent à jour l'état de l'orbite et le flux de contrôle choisit parmi les mises à jour.
FractalPark ne colle pas le texte FRM dans un shader. Il fait passer la source par un compilateur par étapes afin que la syntaxe, le sens, le code généré et les diagnostics restent liés.
Le texte exact provenant de l'éditeur, d'un collage ou d'un fichier local est l'entrée faisant autorité.
Le lexer reconnaît les noms, les nombres, les opérateurs, les marqueurs de section, les commentaires et les directives tout en conservant les emplacements source.
L'analyseur construit un arbre de formule structuré et signale les déclarations, expressions et blocs de flux de contrôle mal formés.
Le validateur vérifie les noms, les types, les sections et la sémantique prise en charge avant qu'une formule canonique soit créée.
La génération de code émet des fonctions de shader et enregistre les correspondances du GLSL généré vers la source FRM.
Une compilation réussie devient le même contrat de plugin de formule utilisé par le moteur de rendu et le système d'assemblage de shaders.
Le contrat de compilateur partagé maintient l'Explorateur, l'éditeur autonome, les formules personnalisées enregistrées, les exemples et les tests sur un seul chemin d'implémentation.
Ces exemples progressent de la plus petite formule quadratique aux paramètres et à la rétroaction avec état. Chaque bloc de source est tiré directement du registre d'exemples partagé et compilé pendant les tests.
Leçon 1
La plus petite formule à temps d'échappement, idéale pour apprendre d'abord la structure init / boucle / sortie.
Objectif : la déclaration et la structure init / loop / bailout. Ne modifie l'exposant ou le seuil d'échappement qu'une fois cette version compilée.
StarterBrot {
init:
z = 0
loop:
z = z^2 + c
bailout:
|z| < 4
}Leçon 2
Montre les emplacements de paramètres p1 / p2 et la différence entre cabs et |z|.
Objectif : les emplacements de paramètres p1 et p2, un littéral complexe et cabs(z) comme fonction de magnitude explicite.
ParameterDrift {
init:
z = 0
loop:
z = z^2 + c + p1 * 0.15 + p2 * (0.05, -0.02)
bailout:
cabs(z) < 8
}Leçon 3
Utilise zPrev comme mémoire de rétroaction et se marie bien avec la colorisation orbitEcho pour les enveloppes d'orbite.
Objectif : zPrev comme état d'orbite précédent. La rétroaction ajoute de la mémoire sans introduire une seconde variable d'état gérée manuellement.
OrbitEcho {
init:
z = pixel
loop:
z = sqr(z) + zPrev * (0.30, -0.12) + pixel * (0.85, 0.0)
bailout:
|z| < 48
}L’Éditeur FRM ouvre ces mêmes exemples vérifiés à la compilation grâce à un ID stable. Le code source de la formule reste uniquement dans l’onglet actuel jusqu’à ce que tu l’enregistres dans ta bibliothèque de formules cloud, et n’est jamais intégré à l’URL.
La compilation s'arrête au premier stade non sûr et signale des messages orientés source. Une construction rejetée n'est jamais réécrite en quelque chose qui lui ressemble simplement.
Les caractères inattendus et les identifiants non pris en charge sont signalés avec leur ligne et leur colonne.
Les sections, expressions ou blocs de flux de contrôle mal formés sont diagnostiqués avant la validation sémantique.
Les variables inconnues, les affectations invalides, les incompatibilités de types et la sémantique non prise en charge empêchent la génération de code.
Le GLSL généré conserve des correspondances qui peuvent ramener un échec de compilation du shader à l'emplacement FRM d'origine.
Lorsque tu corriges une erreur, commence par le premier message signalé : les diagnostics suivants peuvent être les conséquences du même jeton manquant ou de la même expression invalide.
Une formule que tu écris est privée jusqu'à ce que tu choisisses autrement. Il existe trois façons de la faire circuler — chacune explicite, aucune silencieuse.
Privé par défaut
Les formules vivent dans ta bibliothèque cloud, visibles uniquement par toi. Les œuvres que tu enregistres contiennent une copie de la source de la formule dans le brouillon, afin qu'elles s'ouvrent toujours telles que tu les as laissées.
Télécharger le fichier .frm
Ta formule est du texte brut. Télécharge-la depuis Mes formules à tout moment et conserve ta propre copie — aucune demande d'export, aucune attente.
Publier une œuvre, partager la source
Publier une œuvre qui utilise ta formule rend la source de la formule publique sous licence MIT : chacun peut la lire, la copier et s'en inspirer. La page communautaire affiche le nom de la formule d'après ses métadonnées et propose la source en téléchargement. Cela ne peut pas être annulé pour cette publication.
Le texte intégral de la licence MIT se trouve sur opensource.org.
Ouvre l'Explorateur pour comparer le comportement des formules intégrées, la colorisation, les transformations, l'animation et les contrôles d'export avant d'écrire une formule personnalisée.
Ouvrir l'ExplorateurUtilise l’Éditeur FRM dédié pour compiler, prévisualiser, importer et télécharger des formules ; connecte-toi pour en enregistrer une dans ta bibliothèque de formules cloud avant de la transmettre à l’Explorateur.
Le contexte historique et les détails d'implémentation sont liés séparément afin que le guide puisse distinguer la lignée Fractint du contrat de compilateur actuel de FractalPark.