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.
Extrait d'un patch de mixage vidéo
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).
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.
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.
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.
L'objet [pix_multiply] réalise la multiplication des couleurs de chaque pixel des deux sources.
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).
L'objet [pix_mask] va transformer les pixels noirs de la deuxième source en pixels transparents.
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.
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.
Patch issu des tutoriels de Raphaël Isdant http://raphael.isdant.free.fr/puredata.htm
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/
(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.
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 :
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.
Fonctionnement
Remarques
Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.
Vous devriez rafraîchir la page.