# Vvvv

vvvv ist eine grafische Entwicklungsumgebung für „Creative Coding“, die von der vvvv-group (Joreg, Max Wolf, Sebastian Gregor, Sebastian Oschatz) entwickelt wird. vvvv dient der Erzeugung und Manipulation von Video-, Grafik- und Datenströmen in Echtzeit. vvvv wird von vielen Unternehmen weltweit zur Erstellung großer Medienumgebungen, zur Realisierung von Medienkunstprojekten und in der Lehre eingesetzt.

## Geschichte

1998 initiierte die Firma Meso Digital Media Systems Design, heute MESO Digital Interiors, die Entwicklung der Software vvvv, die ursprünglich als firmeninterne Anwendung gedacht war. Sie hatte ein schmaleres GUI mit dem man zur Laufzeit Parameter einstellen, aber keine neuen Elemente hinzufügen konnte.
Eines der ersten Projekte, in denen die Software zum Einsatz kam, war die gemeinsam von Meso und 3deluxe realisierte Installation Cyberhelvetia auf der Expo 2002 in der Schweiz. Hierzu wurde mit Hilfe von vvvv eine große Reihe von interaktiven Anwendungen entwickelt, welche auf Sprache, Bewegungen und das Wetter reagierten. Im Laufe der letzten Jahre wurden zahlreiche weitere Projekte mit Hilfe von vvvv realisiert, besonders erwähnenswert ist dabei die Umsetzung des kompletten Licht-, Video- und Raumkonzeptes des Frankfurter Cocoon Clubs und des Fußball-Globus.

## Versionen
### vvvv beta

Seit 2001 in der Entwicklung. vvvv beta ist nach wie vor im Einsatz, die aktive Weiterentwicklung konzentriert sich derzeit aber auch die Nachfolger-Version vvvv gamma.
Mit vvvv beta war es nicht möglich eigenständige Anwendungen zu generieren, zur Ausführung eines Programms wurde immer die vvvv beta Laufzeitumgebung benötigt.
Die Dateiendung der Projektdateien von vvvv beta ist „.v4p“. Projekte die in vvvv beta entwickelt wurden, können nicht in vvvv gamma geöffnet oder automatisch portiert werden.

### vvvv gamma

Im April 2020 wurde die Version vvvv gamma veröffentlicht. Sie wurde von Grund auf neu programmiert und bringt zahlreiche neue Funktionen und Änderungen gegenüber der Vorgängerversion vvvv beta mit. vvvv gamma wurde mit Hilfe von .NET entwickelt. Seine Sprache VL kombiniert Metaphern, die aus der Datenfluss-, funktionalen und objektorientierten Programmierung bekannt sind.
Zu den neuen Merkmalen gehört die Einbindung der Open-Source 3D-Game-Enginge Stride für fortgeschrittenes 3D-Rendering, Skia für 2D-Grafik, ein integrierter Help-Browser, eine Exportfunktion als ausführbare EXE-Dateien und die Unterstützung von .NET-NuGets. Zahlreiche .NET-NuGets sind bereits als für vvvv gamma beziehungsweise VL aufbereitete NuGets mit dem Präfix „VL.“ zur Verfügung.
Während mit vvvv beta es nicht möglich war eigenständige Anwendungen zu generieren, unterstützt vvvv gamma den Export von ausführbaren EXE-Programmdateien, und somit, dass eigenständige Programme entwickelt und veröffentlicht werden können.
Die Dateiendung der Projektdateien von vvvv gamma ist „.vl“.

## Funktionsweise

vvvv läuft grundsätzlich in Echtzeit, Änderungen am „Programmcode“ werden direkt ausgeführt. vvvv kann in die Kategorie der Datenstromorientierten Programmiersprachen eingeordnet werden.
Im Gegensatz zu herkömmlichen texturalen Programmiersprachen werden bei vvvv grafische Objekte, sog. „Nodes“, zur Entwicklung von Programmen genutzt. Einzelne Nodes verfügen über Ein- und Ausgabepins, welche sich mit der Maus über virtuelle Kabel miteinander verbinden lassen und so Daten untereinander austauschen können. Eingabepins sind oben angeordnet, Ausgabepins sind unten angeordnet.
Angelehnt an Programmiersprachen wie APL und J können über jede Verbindung Vektoren von Daten (sogenannte Spreads) übertragen werden, die von den Nodes parallel verarbeitet werden können.
Im Vergleich mit der klassischen Programmierung kann ein Node am ehesten mit einer Funktion verglichen werden – wobei die Eingabepins analog zu den Funktionsparametern und die Ausgabepins analog zur Funktionsrückgabe gesehen werden kann. Im Gegensatz zu Sprachen, die auf einer eindimensionalen Zeichenkette basieren, ist man jedoch nicht darauf angewiesen, dass ein unbenannter Rückgabewert in genau einer aufrufenden Funktion benutzt wird.

## Anwendungsgebiete

Aufgrund der modularen Programmstruktur und der Fähigkeiten zur Echtzeit-Grafik ist vvvv besonders für den Einsatz in multimedialen Umgebungen gedacht. Ein kurzer Auszug der Möglichkeiten im Folgenden:
* Entwicklung und Steuerung von Multimediainstallationen: Generierung und Analyse von Audio- und Videosignalen, Verarbeitung diverser Input- und Sensorsignale, Steuerung externer Systeme durch offene Standards (XML, HTTP, RS-232, TCP, UDP, OSC, DMX, MIDI) Entwicklung diverser VJ (Visual Jockey)-Anwendungen: Synchronisation von Audio-/Videoanwendungen und Nutzung diverser externer Steuerelemente wie z. B. Midi Controller
* Entwicklung von Prototypen: Kurze Entwicklungszyklen und schnelle Umsetzung von Ideen durch grafische Programmierung.
* Durch die Integration von HLSL Shadern auf DirectX-basis erlaubt vvvv eine sehr einfache Nutzung von hardwarebeschleunigter 3d Grafik.
* Projektionen: Dadurch lassen sich zahlreiche Situationen Anpassung der Bildausgabe an unterschiedlichste, nicht plane Projektionsoberflächen; Einsatz der Software zur Verteilung von Bildmaterial auf mehrere Projektoren

## Analogien

Von herkömmlichen nodebasierten Programmen ist vvvv am ehesten mit Max/MSP der Firma Cycling74 und dessen Open Source Pendant Pure Data vergleichbar. Beides sind jedoch Anwendungen, die ursprünglich eher zur Midi-Steuerung und Audioverarbeitung entwickelt wurden und erst nachträglich auf die Erzeugung von 3D-Echtzeitgrafik adaptiert wurden. Schwachstellen bestehen auch bei der gleichzeitigen Verarbeitung von Objekten. So arbeiten die Module in vvvv grundsätzlich mit sogenannten Spreads, was bedeutet, dass mehrere parallele Berechnungen in einem Arbeitsschritt stattfinden, was die Programmierung wesentlich erleichtert.
Mehr oder weniger verwandte Programme in Aufbau und Anwendungsmöglichkeiten sind TouchDesigner, cables, Troikatronix Isadora und VDMX.