IRO UTSUSHI

Une application qui ne vous demande jamais de mettre un nom sur ce que vous ressentez. Faites tomber de la couleur sur l’eau, remuez-la du doigt : le mouvement de votre main reste là, devenu une image.

Disponible sur l’App Store
  • Application
  • iPhone / iPad
  • Swift
  • SwiftUI
  • Metal
Télécharger sur l’App Store

Ce que l’on peut faire

Comment c’est fait

Application Swift + SwiftUI, écrite comme un App Package Swift Playgrounds, sans aucune dépendance à un paquet externe.
Eau Une simulation de fluide écrite en Metal. Champ de vitesses, projection de pression, advection, renforcement de vorticité et mélange des pigments sont tous calculés sur le GPU.
Pigments Conservés sous forme de particules lagrangiennes et superposés par mélange soustractif suivant la loi de Beer–Lambert. Étant des particules, ils ne se brouillent pas par diffusion avec le temps.
Rendu Réfraction et spéculaires obtenues à partir de normales calculées analytiquement depuis le champ de hauteur de l’eau, avec un bruit granuleux et un tramage qui évite les bandes.
Saisie Prise sur les événements bruts d’UIKit, en transmettant au fluide toutes les touches regroupées (coalesced) d’une même image. Jusqu’à cinq touches simultanées sont enregistrées, rejouées et mesurées comme des tracés indépendants, un par doigt.
Enregistrement La liste de l’historique ne garde en JSON que des informations légères ; l’image est un unique PNG ; la séquence de touches est un binaire à largeur fixe compressé en LZFSE, dans un dossier propre à chaque enregistrement.
Relecture et export L’eau est reconstruite en relançant la simulation depuis les pas enregistrés. Le MP4 n’est pas une capture d’écran : les images sont recomposées à partir de ces pas et écrites à 30 fps.
Son Synthétisé dans l’application, sur une gamme pentatonique et jusqu’à 16 voix. Aucun fichier audio.
Autocontrôles L’environnement ne pouvant pas héberger XCTest, une série de vérifications maison (SelfChecks.swift) s’exécute au lancement en mode debug.
Chiffrement Aucun ; la réponse d’export compliance est fournie avec l’application.

Ce qu’il y a d’intéressant dedans

Le sillage continue de s’enrouler après le passage du doigt

L’advection est corrigée par la méthode MacCormack, qui préserve les fins tourbillons qu’une advection semi-lagrangienne simple efface. Le doigt ne pousse pas l’eau : il dépose une paire de tourbillons contrarotatifs le long de la direction du glissement, si bien que l’eau continue de s’enrouler un moment après son passage. Tous les coefficients d’amortissement et de suivi sont exprimés par seconde : le mouvement est donc identique sur un appareil à 60 Hz et sur un appareil à 120 Hz.

Séparer l’onde que l’on voit de l’onde qui déplace

L’intensité visible d’une onde et son action sur les pigments sont deux paramètres distincts. Et l’onde déplace directement la position des pigments, pas leur vitesse. La vitesse des pigments est ramenée à chaque image vers celle de l’eau — avec une constante de temps d’environ 0,36 seconde dans les zones denses — et une onde vit moins longtemps que cela : les mesures ont montré qu’ajouter de la vitesse ne déplaçait presque rien. Régler l’apparence et régler la sensation ne se détruisent plus mutuellement.

Choisir que les pigments ne s’attirent pas entre eux

Une force de cohésion rassemblait autrefois les pigments, mais le seul état d’équilibre possible était un amas rond : avec le temps, l’eau se remplissait de cercles opaques qui ne se défaisaient plus jamais. Le bord sombre de l’aquarelle est désormais reproduit sans déplacer le moindre pigment. Le champ de densité reste tel quel et le bord en est tiré, comme un ombrage sur le tracé de la surface de l’eau : rien de l’image ne se fige.

Un même enregistrement redonne toujours la même image

La simulation est fixée à 60 pas par seconde, et chaque enregistrement conserve les numéros de pas réels auxquels la saisie UIKit a été consommée, le nombre de pas d’élan et un fichier annexe d’horodatages Float32 avec des coordonnées UInt16. La relecture se fie à ces pas enregistrés plutôt qu’à l’horloge murale. La vitesse est mesurée d’après UITouch.timestamp, car les mouvements survenus dans une même image ne s’en distinguent pas. Les touches prédites ne servent qu’à estimer la vitesse ; elles n’influencent jamais l’endroit où les pigments se posent.

Par-dessus cela, SimulationEngineRegistry achemine explicitement chaque simulationVersion enregistrée vers le moteur qui lui correspond. La version 6 est gelée jusqu’à ses constantes, son horloge et son taux de transfert d’encre, et une version future inconnue n’est jamais dirigée en silence vers la simulation la plus récente. Il s’agit d’éviter qu’une mise à jour ne reconstruise l’image d’un ancien enregistrement en autre chose.

Ne pas montrer la note en premier

Les quatre mesures ne sont pas rabotées à un plafond : elles suivent une courbe qui tend vers 100 sans l’atteindre, si bien qu’un seul geste rapide ne donne pas le maximum. Et malgré cela, elles sont masquées par défaut sur l’écran de résultat. Si une application qui refuse de ranger les émotions dans des mots commence par des chiffres, ces chiffres deviennent tout simplement la nouvelle étiquette.

Confidentialité et contact

IRO UTSUSHI conserve vos enregistrements uniquement sur votre appareil. Aucune création de compte, aucune publicité, aucune mesure d’audience, aucune fonction de suivi des utilisateurs. Pour le détail, voir la politique de confidentialité d’IRO UTSUSHI.

Pour vos remarques et vos signalements de bugs, vous pouvez aussi passer par la page de contact de Sizu dev.