Application iOS contemplative de peinture de nuages volumétriques au-dessus d'un paysage. L'utilisateur choisit un paysage dans une galerie curée, peint des silhouettes de nuages dans un canvas 2D simple, et un moteur de rendu volumétrique Metal les transforme en nuages 3D plausibles — éclairés par la position réelle du soleil et de la lune à l'endroit et à l'heure choisis.
Aether — du grec αἰθήρ, le ciel lumineux, cinquième élément.
Expérience visée : contemplative, lente, satisfaisante. Pas d'éditeur 3D — une poignée de gestes et de sliders.
- Peinture de nuages : silhouettes peintes au doigt, déposées par direction du ciel dans des calques d'altitude (cumulus, altocumulus, cirrus) — des coquilles sphériques concentriques raymarchées (Perlin-Worley, Beer-Lambert, Henyey-Greenstein, multi-scattering). Pinceau réglable (rayon / adoucissement), visibilité et opacité par calque, annuler / rétablir.
- Ciel physique : fond atmosphérique (Rayleigh + Mie) qui suit le soleil ; soleil, lune phasée et étoiles (Bright Star Catalog) dessinés dans le ciel, occlus par les nuages.
- Lumière réelle : curseur d'heure → l'astro recalcule soleil et lune en direct (aube chaude → midi blanc → crépuscule → nuit lunaire). Météo statique par paysage qui informe l'état initial du nuage.
- Mer raymarchée sous l'horizon sur certains paysages, avec reflet de ciel, glint solaire et clair de lune.
- Regard libre : les nuages vivent à leur place dans le monde — pivoter la vue (1 doigt) et zoomer (pincement) les orbite sans les effacer, et peindre dans une nouvelle direction ajoute un nuage là où on regarde. Ciel et éclairage suivent.
- Enregistrer un ciel : sauvegarder l'état complet (paysage, nuages, instant,
regard) dans un fichier
.aetherautonome, rouvrir plus tard à l'identique.
Quatre paysages procéduraux, chacun avec son lieu, son heure et sa météo : Crépuscule (Paris), Aube (Kyoto), Heure bleue (Reykjavik), Plein midi (Sydney).
- Xcode 16+ (iOS 17+)
- XcodeGen —
brew install xcodegen
Le projet Xcode est généré depuis project.yml (source de vérité) ;
Aether.xcodeproj n'est pas versionné. Ajouter un fichier = créer le fichier,
puis régénérer.
# Générer le projet (après tout ajout/déplacement de fichier)
xcodegen generate
open Aether.xcodeproj
# Compiler en ligne de commande
xcodebuild build -project Aether.xcodeproj -scheme Aether \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' -derivedDataPath build/dd
# Tests métier (astro, météo→nuage, caméra, phases de lune, étoiles…)
xcodebuild test -project Aether.xcodeproj -scheme Aether \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' -derivedDataPath build/ddLe rendu Metal n'étant pas testable unitairement, chaque étape se vérifie par capture d'écran sur simulateur (iPhone 17 Pro de référence).
Swift 6 · SwiftUI · MetalKit (raymarching MSL) · SwiftAA (positions soleil/lune) · CoreLocation · Swift Concurrency · SwiftPM. Pipeline de rendu complet (étapes 1→9), pas de dépendance réseau.
Vision, architecture en couches, pipeline de rendu, conventions et état
d'avancement : CLAUDE.md. Pipeline de rendu détaillé :
docs/PIPELINE.md. Persistance d'un ciel (.aether) :
docs/PERSISTENCE.md. Références algorithmiques (papers
- code) :
BIBLIO.md.