VVVV is a visual and data stream oriented, real-time programming language that was developed around the year 2000 by the VVVV-group (Joreg, Max Wolf, Sebastian Gregor, Sebastian Oschatz). Their aim is to make the development of prototypes, artworks, … easily possible for people without programming skills.
The basic idea of VVVV is that you have small units (called „nodes“) that solve simple problems. The user can connect these nodes with lines (called „links“) to solve more complex problems.
Additionally VVVV runs in real-time. So every change in the program gets visible immediately.
At the first start the user interface of vvvv can be very confusing. All the usual menus and toolbars that you find in common IDEs are missing. Everything you see is just a grey empty window (called „patch“). But that is what makes the user interface of VVVV: A very puristic and simple design.
To use VVVV efficiently a keyboard and a mouse with three buttons is indispensable. Even to open the menu you need the third button of the mouse.
In the table below you find the most common shortcuts according to the user interface which facilitate the work with VVVV extensively.
Shortcut | Function |
---|---|
Middle mouse button | Open menu |
CTRL + S | Save patch |
CTRL + W | Close window |
ALT + F4 | Close VVVV |
Nodes are the smallest units with basic functions. They get information over their input pins, process it and dump the result out over their output pin. Regarding to the most common textual programming languages they could be compared with functions/methods. If you continue this comparison the input pins would be the parameters and the output pin the return value. The only difference would be that nodes in VVVV can have multiple output pins. VVVV provides a lot of different nodes and therefore a lot of different functions.
Note: Nearly every patch in VVVV has a help patch that demonstrates its function. To open it just select the node with a left click on it it and press „F1“ afterwards.
The node browser is a list of all available nodes in VVVV. To open the node browser just perform a double left click into the patch on a empty place. With a right click into the search field the user has the ability to switch between the three following different modes.
In this mode the nodes are ordered alphabetically by name and listed together with their category in brackets.
In this mode a list of all categories is presented to the user. If the user clicks on a category all the nodes of it are listed below. This mode is very useful to browse easily through all nodes of one category.
The creation of a node is very simple. Just follow these steps:
IOBoxes are special nodes. They represent the various primitive datatypes like Value, String, Enumeration, and so on.
Herr Inspektor is a very helpful tool to change all the settings of a node at one place. It is opened with the shortcut CTRL + I. Herr Inspektor always shows the information and settings according to the actually selected node with the option „Attach to Selection“
as an exception. If you selecte multiple nodes, Herr Inspektor only shows the options / informations that all selected nodes have in common.
Herr Inspektor is divided into three category groups from top to bottom:
The box in front of each input respectively ouptup pin indicates the following:
Box | Impact |
---|---|
White Box | Pin is deactivated |
Light gray box | Pin is activated but hidden |
Dark gray box | Pin is activated and visible |
The color of the box can be changed by a simple left click on it.
Shortcut | Function |
---|---|
CTRL + I | Open Herr Inspektor |
SHIFT + CTRL + I | Open multiple instances of Herr Inspektor |
Links are an essential component of VVVV. With them values can be passed from one node to another.
„VVVV is a data stream oriented programming language. The evaluation always starts at the top with the first node and stops at the bottom of the patch with the last node.“ 1)
You can download the patch from the image here: Dataflow Example
Spreads can be compared with arrays in a text-based programming language. They consist of multiple elements like numbers or string, which in this domain are called slices. Because spreads are supported by nearly all nodes in vvvv, they are very important and powerful.
Spread generators automatically generates a spread, which values obey a specific rule. In the case of the linear spread this rule would be, that there is the same distance between two successive slices. The most important spread generators are:
You can download the patch of the image here: Spreads Example
The user can either simply save a patch with choosing the option „Save“ in the menu or save it with a new name or at an other place with the option „Save as“. The first save of a patch is always a „Save as“-action.
With every save-action a backup file of the last revision is saved to the same folder as .xml-file. To open this file in VVVV the file extension has to be changed to „.4vp“.
The „Save as“ action always shows (after choosing the file path) the following window with various options:
ItemReload Now (Recommended)
Reloads the patch and checks all links to subpatches of external files. You should use this option, if you save your patch to an other folder to get sure, that all these links are refreshed.
ItemSave It (I know what I am doing)
Use this option, if you save the patch to the same place or if you do not have any links to subpatches or external links in it.
ItemSave All
Saves the patch and all subpatches in it.
Shortcut | Function |
---|---|
CTRL + S | Save |
SHIFT + CTRL + S | Save As… |
The Renderer is the output window of VVVV. There are multiple types of rederers available. The most common one is the Renderer (EX9). In contrast to other programming languages the renderer has a different coordinate system. The center (0,0) is in the middle of the window and not in the top left corner. Based on the center a common XY-coordinate system is used; so for example (1,1) is found the top right corner of the window.
Shortcut | Function |
---|---|
ALT + 1 | Open renderer in extra window |
ALT + 2 | Integrate renderer into patch |
ALT + 3 | Integrate renderer into patch and hide it |
ALT + ENTER | Fullscreen renderer |
You can download the patch from the image here: Renderer Example
VVVV provides different simple geometries that can be displayed in the Renderer. The most important ones are the Quad (DX9), the Grid (DX9) and the Segment (DX9). Whereas the Quad always consists of a fixed number of polygons the Grid has not a fixed number of them. The same holds for the Segment which approximates a circle if the number of polygons gets big.
You can download the patch from the image here: Geometry (2D) Example
The node Transform (Transform 2d) enables various transformations on geometries. It is possible to translate them, scale them, rotate them or even change their center. The change of the center is very usefull if you want to animate something e. g. rotate a geometry with a distance from one around the center of the renderer.
Another important node is „AspectRatio (Transform)“. Connected as shown in the example below it prevents the content of the renderer from deformation when changing its size.
You can download the patch from the image here: Transformation Example
Layering in VVVV is usually done with the node „Group (EX9)“. The input pins of this node define the ordering of multiple geometries in z-direction. The geometry linked to the first pin of the group node is painted first in the renderer, the geometry linked to the second one as a second and therefore painted over the first one and so on.
You can download the patch from the image from here: Layer Example
The important node for doing animations in VVVV is the LFO (Animation) which counts permanently from zero to one in a definable periode. To get an animation this node is often linked with the Transform node. Due to the fact that the LFO starts abrupt counting from zero after reaching the one you get a very ugly jump in the animation. To avoid this the „WaveShaper (Value)“ can be used as shown in the example below.
You can download the patch from the image here: Animation Example
VVVV provides various filters to add an effect to animations e.g the „Oscilator (Animation) or the „Damper (Animation)“. The example patch from the VVVV library shown in the image below provides a nice overview over the filters.
You can download the patch from the image here: Filter Example
In VVVV various ways exist to represent color. As show in the example below you can use e.g. the HSV or the RGB color model with the node „HSV (Color Join)“ respectively „RGB (Color Join)“
You can download the patch from the image here: Color Example
Multiple options exist to map a texture on a geometry in VVVV: E.g. an image from a file („FileTexture (EX9.Texture)„), a website („HTMLTexture (EX9.Texture URL)„) or even the content of another renderer („SVGTexture (EX9.Texture)“) and so on.
You can download the patch from the image here: Texture Example
Note: „HTMLTexture (EX9.Texture URL)“ is only available in the 32-bit version of VVVV-addon-pack and not in the 64-bit version till now!
To change the presentation of text the node „Text (EX9)“ is used. It provides various settings like font, font size, alignment etc.
You can download the patch from the image here: Typography Example
You can download the finished patch here: Fancy Text
You can download the finished patch here: Fancy Boxes
This article is mainly based on chapter two of the below listed book „Prototyping Interfaces“. Additional information were gathered from the other listed sources.
Except the following two images self generated screenshots were used: