petit tutoriel vidéo
Schwartzpeter et VVVV via Art-Net

Il s'agit ici d'un court tutoriel, montrant comment piloter via Art-Net(le protocole lumière en éthernet), le fabuleux logiciel vvvv.
J'espère que ce tutoriel sera suffisament clair, concis, et accessible à tous.

Il vise l'aquisition des compétences suivantes:
    -pouvoir afficher une image dans vvvv ( image fixe, fichier vidéo, webcam)
    -pouvoir la manipuler ( transformation et fade)
    -pouvoir la piloter depuis schwartzpeter en mode art-net   

christoph.




Qu'est ce que VVVV ?
site vvvv / pages traduites en français
VVVV est un logiciel multiforme qui permet de faire de la programmation graphique:
on crée un patch, composé d'éléments graphiques ( des boites) que l'on relie ensemble, fonction de ses besoins.
Par ces interconnexions de boites, on crée son application sur mesure.
La puissance de VVVV est phénoménale: il gère le RS232, le DMX sur certains protocoles, mais aussi la 3D, les pixel shader, le son, les plug-ins vst, la réaction sonore en live, le tracking caméra ( si si si), on peut fabriquer sa propre console de VJ, etc etc...

VVVV est en libre téléchargement. Mais à partir du moment où vous vous en servez pour des besoins commerciaux ( projets payés,  ou s'appuyant sur lui) pensez à aquérir ou faire acquérir une license. Rien ne change entre l'aquisition d'une licence et le programme en téléchargement, c'est juste une question de moralité.
VVVV est un programme éthique, généreux, et ce qui se fait de mieux en terme de travail visuel.  Il est commis par une équipe de programmeurs travaillant dans l'évènementiel et qui l'ont développé pour leurs besoins.
Vous trouverez sur le vvvvorum énormément d'aide ( en anglais) d'Allemagne, du Japon, des Pays Bas, d'Italie, de Chine, et j'en passe. Skype est souvent utilisé et vous pourrez trouver peut être un peu d'aide en francais aussi ( utiliser le shoutbox du vvvvorum).

VVVV s'appuye sur DirectX 9.0c et vous devrez l'installer, même si vous êtes en DX10.

Pré-requis:
-avoir soit 1 machine suffisament costaud pour que VVVV et Schwartzpeter puisse cohabiter lancés ensemble.
dans ce cas, ne jamais lancer un patch avec un FullScreen avant schwartzpeter .
-ou avoir deux machines en réseau, reliées entre elles.
-avoir installé correctement vvvv.
-avoir ses drivers de carte vidéo réellement installés.




Découvrir les bases VVVV

VVVV est une boite à outils possédant de multiples outils de différentes familles, pouvant ou non être reliés.
Tout dépend de la famille d'objet et du type de données à faire passer d'une boite à l'autre.
Ces deux paramètres sont essentiels à comprendre pour pouvoir découvrir sereinement vvvv.

Au lancement de vvvv, un patch de démo s'ouvre.
La navigation dans vvvv se fait par le click du bouton du milieu de la souris

Clicker bouton milieu pour fermer ( close) ce patch par défaut et demander à afficher Root.

       

Ok. Maintenant nous sommes devant une feuille vierge.
Nous savons que le click milieu permet d'appeler les menus et de sauver charger des patchs.
( on peut empêcher cet affichage de patch automatique en effacant le contenu de "arguments.txt" dans le dossier vvvv.


Création d'une fenêtre et d'une surface de projection:

Nous allons commencer par créer une fenêtre de projection ( Renderer ) en format DX9 ( direct X 9) pour pouvoir exploiter films, images, 3D.
DX9 est une famille d'objets.

Clickez dans votre patch vierge et commencez à taper Renderer.
La complétion de code vous amène directement différents objets sélectionnables:
choisissez le Renderer de famille (EX9)
   
 
en clickant ainsi un  objet est créé. C'est une boite Renderer et sa sortie est activé ( la fenêtre Direct X Renderer)
C'est cette fenêtre qui sera mise sur la sortie du deuxième écran de votre bureau étendu, à laquelle vous reliez votre vidéo projecteur.


Nous avons besoin de placer dans cet espace 3d une feuille, notre surface de projection:
il s'agit donc de créer un objet QUAD (DX9): clicker dans la feuille et taper Quad.

Puis une fois la boite apparue, relier sa sortie Dx9 à l'entrée Dx9 du Renderer en clickant sur les pins de sortie du Quad et en reclickant dans le pin d'entrée du Renderer.



Nous découvrons qu'en survolants les petites pins de chaque boite, nous trouvons des informations qui s'affichent: le type d'entrée ou de sortie, et le type de données ( si nécessaire par ex EX9).

On peut donc déjà voir que l'interface souris de VVVV est très spéciale:
-relier, bouger des nodes (nos boites) , les agrandir ou pas se fait par un click gauche
-appeler les menus par click milieu
-modifier des valeur par un click droit



Si on survole les pins du Quad, on découvre que ce dernier a des entrées
Render State / Transform / Texture / Sampler State / Texture transform / Texture Coord Mapping / Color et ( pas visible mais accessible) Enabled

Dans cette présentation, nous allons surtout nous concentrer sur les manipulations possibles avec Transform / Texture et Color.

Modification de ce plan de projection:

Il faut d'abord créer un objet Transform ( 2d).
Et le relier au Pin Transform . On notera qu'en saisissant le point Output de transform différents Pins apparaissent en plus gros. C'est là où ce type de données peut être branché.


En survolant les pins d'entrée de transform(2D) on découvre un certain nombre d'éléments :
Transform In permet de rebrancher dedans un autre controleur de transformation, Translate X et Y ( déplacer en X et Y), Scale X et Y ( le grossissement de l'objet en X et Y), Rotate ( la rotation) et le Centre X Y de cette dernière.

Pour manipuler des données de Pins dans VVVV on peut:
-soit clicker gauche sur le Pin , et en restant appuyé, monter ou descendre la souris pour varier la valeur choisie ( faite l'essai sur Translate ou rotate).
-soit créer une boite de valeur qui permettra de controller de manière plus visuelle ce Pin.

Création d'une boite de valeur, et essai des différents types de comportement de celle-ci:

Créer une IO box ( Value Advanced) ou double clikez droit directement.
    ce qui nous donne ceci:

Ce qui suit est TRES important et vous donne un  certain nombre de clés de compréhension de vvvv:

Cette IO box peut réagir de plusieurs manières:

-soit comme valeur "sans fin" ( Endless)
 .on clicke droit à la souris et on change la valeur en montant ou descendant la valeur
 .ou alors on crée un slider ( fader / potentiomètre) avec une valeur minima et une valeur maxima
-soit elle envoie 2 valeurs prédéfinies sous forme de bouton poussoir:
 .va et vient ( Toggle)
 .ou en impulsion ( Bang)

Ce paramétrage s'exerce en faisant appel à l'inspektor.
L'inspektor permet d'éditer les paramètres internes d'un node ( nos petites boites).
Il est essentiel pour l'édition des valeurs.

Pour appeler l'inspketor, taper Control-I.
Une fenêtre apparait, celle de l'inspecteur.
Sélectionnez notre IO (value advanced).



Nous allons d'abord créer un potentiomètre:
Actionner Show Slider.
Une barre apparait dans la boite IO sélectionnée, que vous êtes en train d'éditer.
A la souris, passer au dessus du bord bas de la boite. quand les flèches apparaissent, clickez gauche et étirez.
Editer Minimum et Maximum en valeurs 0 et 2 respectivement avec l'inspektor .

Connectez la sortie Y ( notre slider est bougé sur l'axe Y) à scale X et à scale Y de notre boite de transformation.

En manipulant par un click droit le curseur de notre slider nous grossissons donc notre quad.

Répétez l'opération pour créer un contrôle pour les X, un pour les Y , et un pour le rotate.

Via l'inspektor, on peut éditer le nom apparaissant de la boite (Descriptive Name).

Si vous avez beaucoup de monde en fenêtre ouvertes, vous pouvez réintégrer la visualisation de votre Renderer dans le patch en clickant dessus
et en faisant Alt-2.
Attention Alt-3 cache l'objet. Alt-1 le remet en position classique.



Créer un bouton:

Ok. Nous avons décider de faire changer sur deux presets définis la taille du quad.
Pour ce nous avons repéré les deux valeurs qui nous interressent pour les size X / Y:
0.25 et 1.9

Pour ce clicker sur le slider "size" et regarder dans l'inspektor.
Sélectionner en slider behaviour le mode Toggle.
Editer les valeurs minima et maxima comme désiré ( click droit).



Sur le patch, redimensionner la boite size pour qu'elle soit carrée et nous montre ce qu'il faut désormais appeler un bouton On/off



La même chose est possible en impulsion ( mode Bang et pas Toggle).

Appliquer une texture:

Une texture peut être appliquée sur le quad.
Une image, une vidéo, une caméra vidéo.

Pour ce, deux approches diverses, toujours sur des objets de type EX9.
Soit l'on passe par le node FileTexture ( image fixe), soit on aura besoin d'un objet VideoTexture ( pour les flux: film lu ou flux caméra).
ci dessous les boites à créer dans ces 3 cas de figure

Appliquer une image en texture:                                    Appliquer une vidéo en texture:                        Appliquer une caméra vidéo en texture
(cliker le pin d entrée pour aller chercher l'image)     ( video texture VM9 + filestream qui est le
                                                                                        lecteur de flux audio / midi ou video)

           
Toujours , toujours, avec des boites que vous ne connaissez pas, explorer les Pins d'entrée et sortie.
Vous pouvez y voir qui et quoi y connecter, quel mode choisir, quel hardware ( ma web cam ou ma cam dv ?) , etc etc...


Faire un sélecteur de sources:

Créer un node Switch ( Node Input)
Les objets de famille Node Input permettent de manipuler non pas des valeurs mais des flux abstraits ( vidéo, image, etc).
Le switch va nous permettre de commuter d'une source de texture à l'autre.

Avec l'inspektor nous allons décider que le switch reçoit 3 entrées ( input). On branche sur chacune de nos entrées les 3 sources.



Désormais, il nous faut juste rentrer en Input du switch la valeur à laisser passer ( 0 - 1 - 2).
On peut le faire de plusieurs manières, avec un slider s'exprimant de minimu 0 à maximum 2.
Ou alors avec un Counter(Animation) auquel on affecte deux boutons Bangs pour les fonctions + et moins ( valeur minimale 0, max 1)
Au Counter(Animation) on affectera une valeur maximale de 2.
Une petite IObox ( value advanced) permet de visualiser le numéro de switch demandé, ici l'entrée 1 ( cad 0).

.

Il y a plusieurs manière de faire un sélecteur de sources. Pour ce tutoriel , j ai préféré utiliser switch, qui n'est pas très rapide sur de la vidéo, mais qui a le mérite de ne pas rendre se tutoriel TROP complexe....

Faire un Fade de notre QUAD:

En explorant les Pins de notre Quad, on a pu remarquer un pin Color...
Voilà voilà voilà...

Nous allons controller les propriétés du quad...
Le plus drôle est de créer un node HSV(Color Join) ou encore un node RGB(Color Join), ou HSL.. au choix...

Créer un nouveau slider ( ou dupliquez un slider sélectionné par un CTRL-D).
Affectez lui une valeur mini de  0, maxi de 1.
La plus part des valeurs manipulées dans vvvv s'expriment dans cette plage là ( 0 à 1).

Connectez ce slider au pin d'entrée Value.

Pour comprendre ce qui se passe, crééz une boite IObox (Color) et connectez la à la sortie du node HSV.



Bon, on peut encore faire joujou...
Là je ne décris plus rien, à vous d'essayer:




Ok. Maintenant la partie pilotage depuis schwartzpeter:


Nous allons créer dans notre patch un récepteur Art-Net.
Créer le node DMX (Network ArtNet Receiver).

Ce récepteur recoit un tableau de 512 canaux, dont nous allons vouloir récolter et affecter les données.
Pour ce on utilise le node GetSlice(Spread) qui va aller récupérer la valeur du circuit que nous désirons.
Cette valeur arrive dans vvvv en 0 à 1. Il est possible de devoir la réétalonner, qu'elle s'exprime sur une plus grande ou plus petite plage.
Nous verrons plus loin cette histoire.
Faites déjà cet ajout à votre patch:

Dmx(Network Artnet Receiver)
GetSlice(Spread)

Relier la sortie Dmx à Get Slice. Créer une boite IO box (Value Advanced)  permettant de dire quel circuit récupérer dans le spread de 512 circuits.
Mettre une petite boite en monitoring, de même type ( IOBox value Advanced).

Config Schwartzpeter:
Dans user/artnet_config.txt paramétrer Art-Net en 2.255.255.
Normalement vous devriez ainsi réussir à émettre de partout, quelque soit l'adresse de votre machine.
Il est possible de devoir désactiver son wifi ( conflits d'adresse).
Lancer config_my_dmx_card et choisir Art-Net.
lancer le matoux.



On remarquera que le circuit 12 manipulé est reçu comme circuit 11 dans VVVV. Pourquoi ?
Parceque la première adresse du train dmx , le circuit 1, est en fait la position 0 dans le tableau de 512 circuits.


Faire en sorte d'avoir les mêmes numéros dans schwartzpeter et vvvv:
Il suffit juste de rajouter une petite soustraction de 1 à la valeur que nous rentrons:
en utilisant le node - (value)

On peut naturellement brancher autant de Get Slice que l'on veut au même récepteur Art-Net.

Voilà !

Ci-dessous quelques captures de patchs en cours d'élaboration, comprenant des sous patchs, pour un cabaret amateur.
Et oui, on est obligé de créer des sous patchs, que l'on ouvrira dans son patch principal ( Open In patch) de façon à pouvoir avoir un plan de travail pas trop brouillon et clair...

Pour info il est important d'archiver régulièrement ses patchs sous forme de capture d'écran ( CTRL-1).

Enfin,  quelques derniers conseils:
-la touche F1 permet d'appeler l'exemple d'aide d'un node sélectionné.
-le node Map ( Value) permet de réétalloner les valeur de 0 à 1 en ce que vous voulez:
                                                                                     de -1 à 1, ou de 0 à 100, que sais je...
-l'espace de positionnement est relatif à la fenêtre de projection. Les coordonnées se basent par rapport au centre de celle ci ( X=0 Y=0).
le coté gauche sera en - quelquechose, le coté haut par rapport au centre en - quelquechose.



On pourra remarquer que dès que l'on nomme une boite dans un sous patch , celle-ci devient visible en entrée sortie...
L'entrée DMX est une IO Value Advanced
Idem pour les numéros de Channel

schwz-artnet est un sous patch permettant de recevoir le flux dmx in et de faire la soustraction du numéro de circuit.
La sortie DX9 des sous patch est un IO box Node Output.