Introduction

Composition d'un module tapemovie

Un module tapemovie se compose de 3 abstractions à savoir :
ModuleName : c'est l'algorythme de traitement
ModuleName.edit : c'est l'interface de l'éditeur
ModuleNameedit : c'est la fenêtre qui contiendra les interfaces des différentes instances.
ex : le module de flou de movie est composé de
m_blur
m_blur.edit
m_bluredit
Cette séparation est très importante car elle permet de séparer l'interface de l'algorithme (moteur) et donc de pouvoir travail en réseau local ou distant et de séparer ainsi les différents processus que sont la visualisation des paramètres et le rendu temps réel.

L'algorithme (moteur)

C'est le cœur du module, c'est le processus lui-même.
Un module tapemovie comporte obligatoirement un makeswitch, et une initialisation. Ensuite, le module peut contenir des makeparam ou des makecontrol.

Makeswitch

C'est le switch on/off de l'algorithme. C'est un élément OBLIGATOIRE dans tout module tapemovie.
Il permet au système tapemovie de savoir quel module est allumé ou éteint, ce qui permet entre autres choses de pouvoir créer une mémoire de l'état de tous les modules allumés.
Il comporte plusieurs arguments :
  1. 1 : le nom de la variable : #1/sw
  2. 2 : le nom du module auquel il est rataché : #1
  3. 3 : le nom du switchstate auquel il est rataché. Cela définit son appartenance au groupe tapemovie, tape ou movie pour la catpure d'état (système de mémoires) On peut donc choisir common_switchstate – tape_switchstate ou movie_switchstate.
  4. 4 : Valeur d'initialisation (par défaut : 0)

Makeparam

On utilise cet abstraction comme l'objet receive de Max. C'est à dire que c'est le point d'entrée pour contrôler un paramètre dans un algorithme.
Il permet au système central de tapemovie de stocker les différents attributs du paramètre, type, range, init value ainsi que sa valeur à n'importe quel moment.
Les différents arguments du makeparam sont :
  1. 1 : le nom du paramètre ex : #1/parametre1
  2. 2 : le nom du module auquel il appartient ex : #1
  3. 3 : le type du paramètre : t (toggle/booléen) i (integer/nombre entier) f (float/nombre flottant) s (symbol) l (liste) m (menu) b (bang)
  4. 4 : la valeur d'initialisation du paramètre . Attention, les paramètres de type liste n'acceptent que 3 arguments. La valeur par défaut de la liste est déclarée par le patcherarg @initlist suivi de la liste par défaut.
  5. 5 : la valeur minimum du paramètre
  6. 6 : la valeur maximum du paramètre
  7. 7 : le caractère « rampable » d'un paramètre, en d'autre terme le paramètre peut-il passer d'une valeur à une autre par une rampe
  8. 8 : la taille de grain pour le line si celui-ci est « rampable »

Makecontrol

On utilise le makecontrol pour un contrôleur, par exemple une valeur contrôlée par un algorithme lui-même contrôlé par des makeparam. Le makecontrol communique les valeurs au système central de tapemovie qui permettra ensuite de pouvoir choisir parmi les makecontrol une source pour les mappeurs afoin de contrôler les makeparam.
Les différents arguments du makecontrol sont :
  1. 1 : le nom du paramètre ex : #1/parametre1
  2. 2 : le nom du module auquel il appartient ex : #1
  3. 3 : le type du paramètre : t (toggle/booléen) i (integer/nombre entier) f (float/nombre flottant) s (symbol) l (liste) m (menu) b (bang)
  4. 4 : la valeur minimum du paramètre
  5. 5 : la valeur maximum du paramètre
  6. 6 : le groupe auquel appartient le module. Ex : /common

Initialisation

Chaque module doit comporter obligatoirement une initialisation. L'initialisation sert à rappeler la valeur d'initialisation donnée dans les makeswitch et les makeparam afin que le système soit dans un état connu .
L'initialisation est objet receive de max relié à un message qui va adresser chacun des paramètres.
EX : si mon module comporte 4 paramètres nommés respectivement #1/param1, #1/param2, #1/param3 et #1/param4; alors mon initialisation sera la suivante :

On peut remarquer la dernière ligne qui est la déclaration du module à l'environnement tapemovie. Cette dernière ligne est OBLIGATOIRE. Elle permet de donner l'existence du module.
Dans le cas ou le module contiendrait un ou des makecontrol, il sera alors nécessaire d'ajouter une seconde ligne qui sera control_register #1.

Exemple du module tm_random

L'éditeur

L'éditeur de l'algorithme est l'interface graphique qui permet d'accéder aux différents paramètres de l'algorithme.
Il est composé d'un background qui regroupe l'accès à plusieurs fonctions du module :
  1. 1/sw - #1/init - ainsi que l'accès au preset temporaire (boutons s r et o) (plus d'informations sur les presets temporaires dans le chapitre Les presets temporaires (temp-store))
Ce background est instancié dans le patch via un bpatcher.
Ensuite, nous plaçons les différents objets graphiques qui vont nous permettre de contrôler les différents paramètres que nous avons crées à l'aide des makeparam.
Chaque objet doit comporter un « scripting name » qui permettra d'utiliser l'objet pvar dans le but d'avoir un patch toujours clair et lisible.
Pour plus d'information sur l'objet pvar, lire la documentation relative à l'objet dans la documentation de Max.
Chaque pvar sera ensuite relié à un variedit, qui permet de donner les valeurs minimum et maximum pour l'objet et également donner un retour d'information venant du moteur.

Variedit

L'abstraction a deux arguments obligatoires :
  1. 1 : le nom du paramètre ex : #1/parametre1
  2. 2 : le nom du module auquel il appartient ex : #1

Exemple du module tm_random.edit


La fenêtre des éditeurs

Les différentes instances des éditeurs de chaque modules sont regroupées dans une fenêtre que l'on peut peller à partir du menu windows de tapemovie, tape ou movie suivant leur catégorie. On peut également affecter un raccourci clavier à chacune des fenêtres pour les appeler.
On se sert pour cela de l'abstraction tm_editorbuilder


Cas particulier de modules

Les modules movie (vidéo)

Attention : Les matrices Jitter et les textures Open GL ont des coordonnées de textures inversées dans l'axe des Y.
Le rectangle rouge contenant le message de build fini ne contient pas un simple délai comme les modules tape et tapemovie mais une abstraction nommée m_effetloadbangdel qui permet de faire varier le délai avant l'envoi du message de build terminé.

Les modules de movie sont des modules traitant du signal vidéo. Ce sont des cas particulier car en plus des abstractions utilisées pour créer un module tapemovie de base, ils nécessitent d'autres abstractions afin de gérer les entrées et sorties des autres modules vidéo. De plus, étant donné que l'on peut faire cohabiter plusieurs types de signaux vidéo dans movie (matrices Jitter-CPU et textures Open GL-GPU), il faut faire attention à ne pas se tromper dans l'ordre de matriçage. On peut faire rentrer une matrice Jitter ou une texture dans un module Open GL, mais nous avons fait le choix dans movie de bloquer la possibilité de pouvoir
Le terme matriçage est quelque peu trompeur car il ne s'agit pas d'une matrice générale qui regrouperait l'ensemble des modules vidéo. Concrètement, on choisit pour chaque module la source qui'l utilise. Cela se fait à l'aide du paramètre source.
Cela permet de pouvoir connecter les modules entre eux. Le système est réellement modulaire.
  1. 1/source
Ce paramètre est un paramètre obligatoire pour tout module movie qui possède une entrée de signal vidéo.
Il est commun aux modules de matrices Jitter aussi bien qu'aux modules Open GL.

Module vidéo en matrice Jitter

L'algorithme

L'abstraction nécessaire pour utiliser un objet à base de jit.matrix à l'intérieur de tapemovie est m_jeffect.

m_jeffect

Cette abstraction contient déjà le makeswitch ainsi que le makeparam #1/source.

Exemple du module m_brcosam


L'éditeur


Module vidéo Open GL

L'algorithme

L'abstraction nécessaire pour utiliser un objet jit.gl.slab à l'intérieur de tapemovie est m_slab.

m_slab

Cette abstraction contient déjà le makeswitch ainsi que le makeparam #1/source.

Exemple du module m_blur


L'éditeur

Pour les modules vidéo open GL qui possèdent une entrée, l'abstraction de mise est m_inputmenugpu qui prend un argument à savoir #1.
Cette abstraction permet de remplir automatiquement le menu donnant accès aux textures et matrices que l'on peut introduire dans le dit-module. En l'occurrence pour un module Open GL, on peut y introduire des matrices Jitter ou des textures.
Exemple du module m_blur.edit

Les modules tape (audio)

Tutoriel

Exemple d'un module avec le module brcosa en open GL
Déclaration d'un module
Explication des fichiers de configuration tm_modules t_modules et m_modules

mov, source jmatrix 0 1 m_movie 640 480 movie.1 "qt movie player";
cam, source jmatrix 0 1 m_grab 640 480 movie.1 "live video input";
pict, source jmatrix 0 1 m_pict 640 480 movie.1 "picture player";
noiz, source jmatrix 0 1 m_noise 320 240 movie.1 "noise generator";
net, source jmatrix 0 1 m_jnetrecv 640 480 movie.1 "network video input";
grid, output gl 1 0 m_grid movie.1 "gridshape module";
boids, output gl 1 0 m_boids movie.1 "boids generation";
nurbs, output gl 1 0 m_nurbs movie.1 "nurbs module";
plane, output gl 1 0 m_plane movie.1 "plane for video projection";
liner, output gl 1 0 m_liner movie.1 "lines moving with physics";
mdl, output gl 1 0 m_mdl movie.1 "display 3D models in .obj format";
mdlgrp, output gl 1 0 m_mdlgrp movie.1 "display 3D models groups";
mesh, output gl 1 0 m_mesh movie.1 "like a plane with crop/keystone - works with depthbuffer 1";
render, output gl 1 0 m_render movie.1 "render space";
jblur, effect jmatrix 1 1 m_blurm 640 480 "blur effect";
jbrcosa, effect jmatrix 1 1 m_brcosam "brightness contrast and saturation corrections";
jframediff, effect jmatrix 1 1 m_framediffm "absolute frame difference";
jrota, effect jmatrix 1 1 m_rotam "rotation correction";
jslide, effect jmatrix 1 1 m_slidem "slide effect";
jwake, effect jmatrix 1 1 m_wakem "wake effect";
brcosa, effect gl 1 1 m_brcosa movie.1 "brightness contrast and saturation corrections";
blur, effect gl 1 1 m_blur movie.1 "blur effect";
buf, effect gl 1 1 m_bufcrc movie.1 "dynamic video delay buffer";
chromakey, effect gl 2 1 m_chromakey movie.1 "chroma keyer";
composite, effect gl 2 1 m_composite movie.1 "compositing";
crop, effect gl 1 1 m_crop movie.1 "crop and zoom";
dilate, effect gl 1 1 m_dilate movie.1 "dilate effect";
emboss, effect gl 1 1 m_emboss movie.1 "emboss effect";
gaussian, effect gl 1 1 m_gaussian movie.1 "gaussian blur";
keystone, effect gl 1 1 m_keystone movie.1 "projection mapping";
lumadisplace, effect gl 1 1 m_lumadisplace movie.1 "lumadisplace effect";
mask, effect gl 1 1 m_mask movie.1 "make an alpha mask";
mix, effect gl 2 1 m_op movie.1 "binaries operators";
outline, effect gl 1 1 m_sobel movie.1 "outline maker";
radial, effect gl 1 1 m_radial movie.1 "distorsion radial";
rota, effect gl 1 1 m_rota movie.1 "rotation corrtrction";
sharpen, effect gl 1 1 m_sharpen movie.1 "sharpen effect";
thresh, effect gl 2 1 m_threshold movie.1 "threshold maker";
wobble, effect gl 1 1 m_wobble movie.1 "wobble effect";

Les presets temporaires (temp-store)


Explication succinte du principe de temp store


Lignes directrices

Couleurs

Plusieurs couleurs sont utilisées dans les patchs tapemovie afin de permettre la lecture rapide d'un patch et d'en faciliter sa compréhension.
  • Send – receive – makeparam – variedit : Bleu
  • Patcher : Vert + taille 12 ou plus