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ältlich
  • App
  • iPhone / iPad
  • Swift
  • SwiftUI
  • Metal
Im App Store laden

Was Sie tun können

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.