Accueil Floss Manuals francophone

Puredata

Mixer des types de contenus 

Cette section aborde différentes approches pour réaliser des mélanges de contenus : mixage ou superposition de vidéos ou d'images fixes, interactions combinées son <> image.

GemMix.png 

Extrait d'un patch de mixage vidéo

Mixer des vidéos

Il existe plusieurs façons de mélanger des vidéos (ou des images fixes) en opérant une combinaison de pixels selon différents modes. Considérons ici que l'on tente de mélanger deux sources devant être de taille identique. Il est possible d'utiliser l'objet [pix_resize] mais qui est fort gourmand en ressources. Cette remarque est valable pour tout ce sous-chapitre à propos du mixage. Certains de ces objets nécessitent de travailler dans l'espace colorimétrique RGBA (rouge, vert, bleu, transparence), il faudra alors intercaler l'objet [pix_rgba] sous une source qui ne serait pas dans ce mode. N'hésitez pas à consulter l'aide de chaque objet pour plus d'informations (bouton droit sur l'objet > Help).

[pix_mix] : le mélange par opacité

L'objet [pix_mix] accepte deux sources en entrée et permet de les mélanger comme une console de mix vidéo analogique en jouant sur l'opacité de l'une et l'autre des sources. À noter que ces sources doivent être de taille identique.

[pix_add] : le mélange par addition

Comme son nom l'indique, l'objet [pix_add] additionne la valeur de couleur de chaque pixel des deux sources. Par exemple, si l'on additionne une image colorée avec une image dont le fond est noir, ce fond noir n'apparaîtra pas du tout dans le mélange (le noir a une valeur de couleur en RGB de 0 0 0). Ainsi, un pixel gris moyen (0.5 0.5 0.5) avec un autre pixel gris clair (0.8 0.8 0.8) donneront un pixel blanc (1 1 1) puisque la valeur d'une couleur ne peut dépasser 1.

[pix_diff] : le mélange par différence

L'objet [pix_diff] réalise la différence des couleurs de chaque pixel des deux sources en soustrayant la valeur de l'un avec celle de l'autre.

[pix_multiply] : le mélange par multiplication

L'objet [pix_multiply] réalise la multiplication des couleurs de chaque pixel des deux sources.

[pix_chroma_key] : le mélange par élimination d'une plage de couleur

On indique à l'objet [pix_chromakey] une couleur de référence (prenons par exemple le vert pur) ainsi qu'une tolérance. Celui-ci retire alors de la seconde source la couleur en question et les couleurs « voisines » pour les remplacer par une zone transparente. L'usage typique à imaginer est la substitution de l'arrière-plan d'une vidéo tournée sur fond vert dans lequel on va pouvoir incruster une autre source (par exemple, « Superman » filmé en studio et que l'on place ensuite dans un ciel filmé en avion).

[pix_mask] : le mélange par soustraction des pixels noirs

L'objet [pix_mask] va transformer les pixels noirs de la deuxième source en pixels transparents.

[pix_composite] : le mélange par la couche Alpha

L'objet [pix_composite] mélange les deux sources vidéos ensemble en se basant sur la valeur de la couche Alpha de la première source.

Superposer des vidéos et des objets géométriques

On a déjà vu dans les chapitres précédents comment afficher dans GEM des vidéos, un signal issu d'une webcam ou encore des objets géométriques OpenGL (carré, rectangle, cylindre, etc.). On a également évoqué, dans la partie dédiée à l'affichage, que si l'on ouvre avec la même instance de Pure Data plusieurs patches contenant des objets GEM, ces objets se retrouvent tous « empilés » dans la même fenêtre, le dernier objet affiché apparaissant au-dessus des autres. Cet ordre de rendu prend alors toute son importance, et nous détaillerons son utilisation dans le prochain point de ce chapitre.

La superposition offre notamment la possibilité de mixer deux vidéos en les plaçant chacune sur des textures rectangles singulières, l'une par-dessus l'autre. L'effet de mixage entre les deux vidéos est obtenu en jouant sur la transparence de la vidéo qui est positionnée au dessus de l'autre. Pour faire apparaître la vidéo « du dessous », il suffira de baisser l'opacité de la vidéo « du dessus », tel qu'indiqué dans le chapitre « Manipuler de la vidéo ».

Il faut également définir quelle vidéo est en dessous et quelle vidéo est au dessus.

Le_bon_ordre_de_rendu.png

Patch issu des tutoriels de Raphaël Isdant http://raphael.isdant.free.fr/puredata.htm

L'ordre de rendu

L'objet [gemhead] accepte un argument pour déterminer à quel moment il recevra la commande de rendu (ou d'affichage). La valeur de l'argument de [gemhead] par défaut est 50. Nous pourrions également changer la valeur de l'argument de manière spécifique, par un message précédé de set, par exemple : [set 55<

Plus faible est la valeur de l'argument, plus tôt le [gemhead] recevra la commande d'affichage. Plus la valeur est proche de zéro, plus tôt sera réalisé l'affichage.

GEM affichera les objets géométriques (ou de texte), en prenant pour règle que le premier affiché sera recouvert par le suivant, qui sera recouvert à son tour par le suivant, etc.

Voir 14.RenderOrder.pd dans /usr/lib/pd/doc/examples/Gem/02.advanced/

render_order.png

(A) [gemhead 1] créé en premier

(B) [gemhead 10] recouvre le précédent [gemhead]

(C) [gemhead 50] valeur par défaut, recouvrira les précédents.

Render_Order2_02.png

Le schéma ci-dessus présente le principe d'affichage progressif couche par couche du rendu, l'ordre de rendu des champs dépendant de valeurs positives et négatives. Le premier rectangle visible à l'avant-plan correspond au dernier à être calculé.

Les valeurs d'ordre d'affichage peuvent également être négatives. Les valeurs négatives des [gemhead] seront affichées après toutes les valeurs positives. Les primitives (carré, cercles, etc.) raccordées aux [gemhead] négatifs ne sont pas concernées par les changements de vue affectant la caméra (avec le message [view<). En revanche, elles seront concernées par un changement de perspective (avec le message [perspec<).

Remarques :

  • La valeur -3, par exemple, sera affichée avant la valeur -10.
  • Les [gemhead] avec des valeurs négatives ne seront pas affectés par les changements de point de vue (perspective).
  • Toutes les valeurs négatives seront affichées APRÈS toutes les valeurs positives, en partant de la plus grande valeur négative (-1) vers la plus petite valeur négative, par exemple -1000.
On peut utiliser ce procédé pour réaliser des sous-titres, des masques, des avant-plans divers sur une scène dont on contrôle le point de vue.

Faire interagir le son et l'image

Nous allons à présent rapidement évoquer une des nombreuses possibilités d'interaction son/image tout en abordant l'éclairage de la scène 3D de GEM (objet [world_light]).  À partir de l'envoi d'une impulsion périodique, le patch ci-dessous va provoquer une interaction à la fois sur le son et l'image en synchronisant la lecture d'un échantillon sonore et la rotation d'un objet de forme carrée.

contenu_mix_3.png

Fonctionnement

  1. Choisissez et chargez les fichiers sonores par l'intermédiaire des deux bang dans la partie « Charger les fichiers sonores »
  2. Créer la fenêtre GEM et afficher le rendu en envoyant les messages à partir de la zone « Affichage visuel »
  3. Déclenchez les métronomes de la partie « Agir sur le son et l'image ». Attention, n'oubliez pas d'activer la sortie sonore générale de Pure Data (cocher "Compute Audio" dans l'interface principale de Pd).
  4. Agissez sur les contrôles de la partie visuelle. Le message [1 0 0< va envoyer une valeur de couleur (rouge) à l'objet [color]. Le message [draw line< va demander à l'objet [square] de ne dessiner que les contours de la forme géométrique du carré.

Remarques

  • La partie sonore et la partie visuelle vont recevoir simultanément le même type d'information, c'est-à-dire une simple impulsion, ce qui induira une relation implicite entre le son et l'image.
  • L'objet [world_light] va permettre un nouvel éclairage de la scène. Pour cela, il vous faudra d'abord activer le message [lighting 1<, qui enverra à l'objet [gemwin] l'ordre de calculer l'éclairage spécifique de la scène 3D. Vous pourrez contrôler l'orientation de l'éclairage grâce à l'objet [rotateXYZ]. Pour plus d'informations sur les propriétés de l'objet [world_light], veuillez consulter son patch d'aide.