IRO UTSUSHI
Eine App, die Sie nie bittet, einem Gefühl einen Namen zu geben. Lassen Sie Farbe auf Wasser fallen, rühren Sie mit dem Finger, und die Bewegung Ihrer Hand bleibt zurück – als ein einziges Bild.
Im App Store erhältlichWas Sie tun können
- Farbe fallen lassen und rühren … Lassen Sie bis zu fünf Farben aus einer Palette von sechs auf das Wasser fallen und rühren Sie sie mit dem Finger zu einem einzigen Bild. Die beiden Paletten „ruhige Farben“ und „kräftige Farben“ lassen sich auch nach dem Auftragen der Farbe noch wechseln.
- Keine Worte, keine Kategorien … Es gibt keine Liste von Stimmungen zum Auswählen und kein Etikett, das man nachträglich anbringt. Zurück bleibt nur die Spur der Farbe und der Fingerbewegung.
- Bis zu 60 Sekunden pro Aufnahme … Das nahende Ende wird durch Wellen, ein Leuchten und einen Klang angekündigt. Nie durch eine Vibration, die Sie antreibt.
- Vier Maße der Bewegung … Geschwindigkeit (der Median der Momentangeschwindigkeit), Ausdehnung (mittlerer Abstand vom Schwerpunkt), Veränderung (wie oft Sie die Richtung wechseln, plus die Streuung der Geschwindigkeit) und Dynamik. Sie sind auf dem Ergebnisbildschirm standardmäßig ausgeblendet: Eine App, die sich weigert zu kategorisieren, sollte nicht mit einer Punktzahl beginnen.
- Später abspielen … Das Wasser wird aus der gespeicherten Berührungsfolge rekonstruiert und mit 1× oder 2× abgespielt, mit Vor- und Zurückspulen. Der Weg Ihres Fingers und die berührten Punkte können über das Wasser gelegt werden.
- Exportieren und teilen … Export als MP4 mit 30 fps und Ton oder als PNG. Der Verlauf wird durch Wischen nach oben und unten durchgeblättert, und mehrere Aufnahmen können auf einmal gelöscht werden.
- Der Klang entsteht in der App … Die berührte Stelle wird zu einem Ton einer pentatonischen Tonleiter; die Geschwindigkeit der Bewegung wird zu Lautstärke und zur Helligkeit der Obertöne. Es gibt fünf Klangfarben: sanfte Tasten, Kalimba, Harfe, Streicherfläche und Glasharmonika.
- Barrierefreiheit und zehn Sprachen … Vor allem für Menschen mit Sehbehinderung konzipiert, mit Unterstützung für Dynamic Type, VoiceOver, „Kontrast erhöhen“, „Transparenz reduzieren“ und „Bewegung reduzieren“. Verfügbar auf Japanisch, Englisch, Spanisch, Französisch, Koreanisch, traditionellem Chinesisch, brasilianischem Portugiesisch, Deutsch, Italienisch und Vietnamesisch.
Wie sie gebaut ist
| App | Swift + SwiftUI, geschrieben als Swift-Playgrounds-App-Package, ganz ohne Abhängigkeit von externen Paketen. |
|---|---|
| Wasser | Eine in Metal geschriebene Fluidsimulation. Geschwindigkeitsfeld, Druckprojektion, Advektion, Wirbelverstärkung und Pigmentmischung laufen alle auf der GPU. |
| Pigment | Als Lagrange-Partikel gehalten und nach dem Beer–Lambert-Gesetz subtraktiv überlagert. Da es sich um Partikel handelt, verwischen sie mit der Zeit nicht durch Diffusion. |
| Optik | Brechung und Glanzlichter aus Normalen, die analytisch aus dem Höhenfeld des Wassers gewonnen werden, dazu ein körniges Rauschen und ein Dithering gegen Banding. |
| Eingabe | Aus den rohen UIKit-Ereignissen entnommen, wobei alle zusammengefassten (coalesced) Berührungen eines Frames an das Fluid weitergegeben werden. Bis zu fünf gleichzeitige Berührungen werden pro Finger als eigenständige Striche aufgezeichnet, abgespielt und gemessen. |
| Speicherung | Die Verlaufsliste hält in JSON nur leichte Informationen; das Bild ist ein einzelnes PNG; die Berührungsfolge ist ein mit LZFSE komprimiertes Binärformat fester Breite, jeweils in einem eigenen Verzeichnis pro Aufnahme. |
| Wiedergabe und Export | Das Wasser wird rekonstruiert, indem die Simulation ab den gespeicherten Schritten neu läuft. Das MP4 ist keine Bildschirmaufnahme: Die Einzelbilder werden aus diesen Schritten neu zusammengesetzt und mit 30 fps geschrieben. |
| Klang | Innerhalb der App synthetisiert, in einer pentatonischen Tonleiter mit bis zu 16 Stimmen. Keine Audiodateien. |
| Selbsttests | Da die Umgebung XCTest nicht unterstützt, läuft stattdessen beim Debug-Start eine eigens geschriebene Prüfung (SelfChecks.swift). |
| Verschlüsselung | Keine; die Export-Compliance-Antwort liegt der App bei. |
Was daran technisch interessant ist
Die Spur wirbelt weiter, nachdem der Finger vorbei ist
Die Advektion trägt eine MacCormack-Korrektur, die die feinen Wirbel bewahrt, die eine einfache semi-Lagrange-Advektion auslöschen würde. Der Finger drückt das Wasser nicht: Er lässt entlang der Zugrichtung ein Paar gegenläufig rotierender Wirbel fallen, sodass das Wasser noch eine Weile weiterwirbelt, nachdem der Finger vorbeigezogen ist. Alle Dämpfungs- und Nachführkoeffizienten sind pro Sekunde ausgedrückt, sodass sich die Bewegung auf einem 60 Hz-Gerät genauso verhält wie auf einem 120 Hz-Gerät.
Die sichtbare Welle von der wirkenden Welle trennen
Die sichtbare Stärke einer Welle und ihre Wirkung auf das Pigment sind getrennte Parameter. Und eine Welle verschiebt direkt die Position des Pigments, nicht seine Geschwindigkeit. Die Pigmentgeschwindigkeit wird jeden Frame zur Geschwindigkeit des Wassers zurückgezogen – mit einer Zeitkonstante von rund 0,36 Sekunden in dichten Bereichen –, und eine Welle lebt kürzer als das. Die Messung zeigte, dass das Hinzufügen von Geschwindigkeit das Pigment kaum bewegte. Das Feintuning der Optik und das Feintuning des Gefühls stören sich seither nicht mehr gegenseitig.
Die Entscheidung, Pigment nicht zueinander hinziehen zu lassen
Früher gab es eine Kohäsionskraft, die Pigment zusammenzog, doch der einzige Ruhezustand war ein runder Klecks: Mit der Zeit füllte sich das Wasser mit undurchsichtigen Kreisen, die sich nie wieder auflösten. Der dunkle Rand der Aquarellfarbe wird jetzt reproduziert, ohne auch nur ein Pigment zu bewegen. Das Dichtefeld bleibt, wie es ist, und der Rand wird daraus als Schattierung auf dem Pfad der Wasseroberfläche gezeichnet, sodass nichts am Bild erstarrt.
Dieselbe Aufnahme ergibt immer dasselbe Bild
Die Simulation ist auf 60 Schritte pro Sekunde festgelegt, und jede Aufnahme speichert die tatsächlichen Schrittnummern, bei denen UIKit-Eingaben verarbeitet wurden, die Anzahl der Vorlaufschritte sowie eine Nebendatei mit Float32-Zeitstempeln und UInt16-Koordinaten.
Die Wiedergabe vertraut diesen gespeicherten Schritten mehr als der Systemzeit. Die Geschwindigkeit wird anhand von UITouch.timestamp gemessen, da sich Bewegungen innerhalb desselben Frames mit der Systemzeit nicht unterscheiden lassen.
Vorhergesagte Berührungen dienen nur der Geschwindigkeitsschätzung; sie beeinflussen nie, wo das Pigment landet.
Darüber hinaus leitet die SimulationEngineRegistry jede gespeicherte simulationVersion explizit an die dazu passende Engine weiter.
Version 6 ist bis auf ihre Konstanten, ihre Uhr und ihre Tintenübertragungsrate eingefroren, und eine unbekannte künftige Version wird nie stillschweigend an die neueste Simulation weitergereicht.
Der Gedanke dahinter: Das Bild einer alten Aufnahme soll durch ein App-Update nicht zu etwas anderem umgebaut werden.
Die Punktzahl nicht zuerst zeigen
Die vier Maße werden nicht an einer Obergrenze gekappt, sondern folgen einer Kurve, die sich asymptotisch 100 annähert, sodass eine einzelne schnelle Bewegung keine Höchstpunktzahl ergibt. Trotzdem sind sie auf dem Ergebnisbildschirm standardmäßig ausgeblendet. Wenn eine App, die sich weigert, Gefühle in Worte einzusortieren, zuerst Zahlen zeigt, werden diese Zahlen einfach zum neuen Etikett.
Datenschutz und Kontakt
IRO UTSUSHI speichert Ihre Aufnahmen ausschließlich auf Ihrem Gerät. Es gibt keine Kontoregistrierung, keine Werbung, keine Nutzungsanalyse und keine Funktionen, die Nutzer verfolgen. Details finden Sie in der Datenschutzerklärung von IRO UTSUSHI.
Für Feedback und Fehlerberichte erreichen Sie uns auch über die Kontaktseite von Sizu dev.