Hand Painting
Eine interaktive Installation: Farbbälle mit der Hand greifen und auf eine digitale Leinwand werfen.
Eine Kamera erfasst die Hand der Besucherinnen und Besucher. Wer Daumen und Zeigefinger zusammenführt, greift einen Farbball; eine Wurfbewegung schleudert ihn auf die Leinwand, wo er als organischer Farbfleck aufplatzt. Über ein iPad lassen sich Farbe, Größe und Form der Flecken einstellen. So entsteht digitales „Action Painting“ – ohne Maus, Tastatur oder Vorkenntnisse.
- Kontext
- Kurs Interaktive Kunstausstellung, Estnische Kunstakademie Tallinn (Erasmus+) – ausgestellt an der EKA, Dezember 2025
- Rolle
- Einzelarbeit – Konzept, Interaktionsdesign, Programmierung
- Werkzeuge
- Python, MediaPipe, Unity 6 (C#), OSC, WebSocket, HTML/JavaScript
- Jahr
- 2025
Leitfrage
„Wie lässt sich digitales Malen so gestalten, dass es ohne Maus, Tastatur oder Vorkenntnisse funktioniert – nur mit natürlichen Handbewegungen?“
Vorgehen
Die Case Studies sind nach dem Double Diamond gegliedert: erst das Problem verstehen und schärfen, dann Lösungen entwickeln und umsetzen.
Discover
Verstehen
- Themenrecherche: Diskussionskultur, Polarisierung
- Referenzen: Pollock, Ai Weiwei, Refik Anadol, Maxim Zhestkov
Ein erstes Konzept zur Visualisierung von Polarisierung.
Define
Definieren
- Neuausrichtung des Konzepts
- Interaktionsprinzip: greifen und werfen
Vom Darstellen eines Problems zum offenen, spielerischen Gestalten.
Develop
Entwickeln
- Prozedurale Formen mit Perlin Noise
- Auswahl-System als Zwischenstufe
- Handtracking und Wurfphysik
Ein Malwerkzeug statt eines Auswahlmenüs.
Deliver
Umsetzen
- Python + MediaPipe → OSC → Unity
- iPad-Steuerung per WebSocket
- Iteration nach Rückmeldungen beim Ausprobieren
Eine lauffähige Installation, ausgestellt an der EKA.
Discover
Verstehen
Ausgangslage
Zuerst ging es um Polarisierung.
Die Recherche begann bei der Diskussionskultur im Netz: Manipulation, Echokammern und rhetorische Muster wie Whataboutism oder Strohmann-Argumente. Das erste Konzept wollte dieses „Gefühl, gegen eine Wand zu reden“ erfahrbar machen – mit Stühlen für Besucherinnen und Besucher, einem Roboter als Symbol für KI und Kugeln, die sich je nach Meinung neu gruppieren.
Als Referenzen dienten Künstler, die Abstraktes körperlich erfahrbar machen: Jackson Pollock mit dem Action Painting, Ai Weiwei, Refik Anadol mit datengetriebenen Installationen und Maxim Zhestkov mit generativen, organischen Formen.
Define
Definieren
Neuausrichtung
Vom Problem zum Werkzeug.
Im Prozess zeigte sich: Ein didaktisches Bild der Polarisierung war intellektuell schlüssig, aber wenig einladend. Die Arbeit wurde deshalb neu ausgerichtet – weg vom Darstellen eines Problems, hin zu einer offenen Erfahrung, die digitales Gestalten für alle zugänglich macht.
Das Interaktionsprinzip: Bewegungen, die jeder kennt – greifen, ausholen, werfen. Keine Menüs, kein Lernaufwand.
Develop
Entwickeln
Iterationen
Drei Stufen bis zum Malwerkzeug.
Prozedurale Formen
Organische Farbflecken mit mehrstufigem Perlin Noise – jeder Fleck ist einzigartig.
Auswahl-System
Besucherinnen und Besucher wählten vorgefertigte Elemente. Ergebnis: zu eingeschränkt für echten Ausdruck – verworfen.
Malen durch Werfen
Handtracking, Greifgeste und Wurfphysik machen jede Bewegung zum Pinselstrich.
Systemarchitektur
Vier Komponenten, zwei Protokolle.
Kamera + Python
MediaPipe erkennt 21 Punkte pro Hand, die Greifgeste über den Abstand von Daumen und Zeigefinger, die Wurfgeschwindigkeit aus der Handbewegung.
OSC
Die Tracking-Daten gehen per OSC über UDP an Unity.
Unity 6
Physik für Flug und Aufprall; der Fleck wird auf eine 2048 × 2048 Pixel große Leinwand gemalt.
iPad-Steuerung
Eine Web-Oberfläche sendet Farbe, Größe und Form per WebSocket an eine Python-Brücke, die sie in OSC übersetzt.
Code
Greifen und Werfen als Zustandsautomat.
void ProcessHand(bool isRightHand, float pinchDist, Vector3 indexPos,
ref PaintBall handBall, ref bool wasPinching,
Vector3[] velocities, ref int velocityIndex, ref Vector3 lastHandPos)
{
bool isPinching = pinchDist < grabThreshold;
// Fingerposition aus dem Kamerabild in den 3D-Raum übertragen
Vector3 viewportPos = new Vector3(indexPos.x / Screen.width, indexPos.y / Screen.height, 3.0f);
Vector3 handWorldPos = Camera.main.ViewportToWorldPoint(viewportPos);
// Geschwindigkeit der Hand über die letzten Frames mitschreiben
velocities[velocityIndex] = (handWorldPos - lastHandPos) / Time.deltaTime;
velocityIndex = (velocityIndex + 1) % velocitySmoothFrames;
lastHandPos = handWorldPos;
if (isPinching && !wasPinching) // Finger schließen → greifen
TryGrabWithHand(handWorldPos, ref handBall, isRightHand ? "Right" : "Left");
else if (!isPinching && wasPinching) // Finger öffnen → werfen
ReleaseHand(ref handBall, CalculateAverageVelocity(velocities) * throwForceMultiplier,
isRightHand ? "Right" : "Left");
else if (isPinching && handBall != null) // halten → Ball folgt der Hand
handBall.transform.position = handWorldPos;
wasPinching = isPinching;
}- MediaPipe liefert in Python die Position von Daumen und Zeigefinger; Unity bekommt sie per OSC. Ist der Abstand kleiner als ein Schwellwert, gilt die Hand als „greifend“.
- Die Logik ist ein kleiner Zustandsautomat: Der Wechsel von offen zu geschlossen greift einen Ball, der Wechsel zurück wirft ihn, dazwischen folgt der Ball der Hand.
- Die Wurfgeschwindigkeit ist der Durchschnitt der letzten Frames. Das glättet das Rauschen des Trackings – ein einzelner Frame würde Würfe zufällig wirken lassen.
Deliver
Umsetzen
Iteration
Was beim Ausprobieren auffiel – und wie es gelöst wurde.
Flecken am Rand
Rückmeldung: Flecken, die in der Ecke landen, erschienen in der Mitte. Lösung: Darstellung neu geschrieben, Flecken werden am Rand korrekt angeschnitten.
Größenbereich
Feine Details waren nicht möglich, große Gesten zu klein. Lösung: Spanne von 5 bis 2000 Pixel Radius.
Tracking bei schnellen Würfen
Die Hand ging bei schnellen Bewegungen verloren. Lösung: geglättete Geschwindigkeit, stabile 30 FPS, kontinuierliche Kollisionserkennung.
Performance
Schnelles Malen ruckelte. Lösung: Fleck-Texturen von 512 auf 128 Pixel reduziert.
Reflect
Reflexion
Reflexion
Testen mit anderen verändert alles.
Probleme, die allein am Rechner unwichtig wirkten, wurden entscheidend, sobald andere die Installation ausprobierten. Die Neuausrichtung zeigte außerdem, wie wichtig es ist, offen dafür zu bleiben, was eine Interaktion „sein will“ – das einfache Werfen war einladender als die ursprünglich geplante Botschaft.
Als nächste Schritte bieten sich Mehrspieler-Modus, Ton beim Aufprall und ein Ausdruck des Bildes als Andenken an.