» fr.Spreads et slices
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

fr.Spreads et slices

English | Mandarin | Russian | Italian

The original english version of this page is newer and may contain information this translation does not have! Click here to view the english version.

Spreads et Slices

vvvv peut manipuler un grand nombre d'objets simultanément, qu'il s'agisse de graphiques ou de données, avec peu d'effort de la part de l'utilisateur. Ce qui veut dire qu'il est aussi facile d'effectuer une opération sur une centaine de valeur que sur une seule, de la même manière qu'il est aussi facile de dessiner une nuée d'objets qu'un seul. Cette technique est appelée diffusion ou propagation. D'une certaine manière, la diffusion est similaire au concept de vecteurs, de faisceaux ("arrays") ou de listes dans d'autres langages de programmation.

A la base, n'importe quel pin ou connection peut contenir autant de valeurs que vous le souhaitez. En utilisant l'Inspektor vous ne verrez que la première de ces valeurs. Si le pin contient davantage de valeurs, vous remarquerez alors un nombre entre parenthèses appelé SliceCount:

Une valeur prise parmi une spread est appelée slice. The nombre de slices dans une spread correspond au fameux SliceCount. Toutes les données peuvent être interprétées comme spread - les valeurs normales ne sont qu'un cas particulier où la spread n'a qu'une slice.

vvvv a cette particularité que les nodes affichables peuvent eux aussi accueillir des spreads: si vous connectez une spread à un objet, il sera dessiné plusieurs fois, ce qui facilite grandement la programmation de systèmes de particules complexes.

Les nodes de spread

La diffusion devient particulièrement utile dans les applications graphiques lorsqu'elle se fait avec les nodes de spread. Ces nodes créent des spreads à partir de paramètres intuitifs, elles ont toujours un pin SpreadCount qui détermine le nombre de slices générées. Plus clairement, ces nodes transforment une valeur unique en une multitude d'autres valeurs, toutes différentes.

vvvv contient des nodes spread qui facilitent la programmation de comportements complexes dans un groupe d'objet:

Jetez un coup d'oeil à la catégorie Spread dans le catalogue des nodes, vous y trouverez une liste de toutes les nodes se rapportant aux spreads.

LinearSpread

La LinearSpread est l'une spread les plus courantes dans vvvv. Elle crée une spread de valeurs réparties de façon linéaire dans un écart donné. Le graphique suivant est tiré du patch d'aide de LinearSpread.

CircularSpread

La CircularSpread est elle aussi une spread basique. Elle répartie des valeurs x et y le long d'une forme circulaire ou ovale. Ceci vous permettra de créer des arrangements circulaires très facilement, puisque vous n'aurez pas à vous préoccuper des traditionnelles fonctions sinus et cosinus habituellement associées à ce genre d'opération.

TypoSpread

La TypoSpread est souvent très utile lorsque vous souhaitez créer des comportements plus complexes. Elle crée deux spreads avec des coordonnées issues des contours d'une lettre écrite dans une police donnée. Cette node a deux sorties, une pour les coordonnées x et une pour les coordonnées y. Vous pouvez l'utiliser pour des expériences avec des typographies, mais son utilité principale s'est révélée être le contrôle d'animations. Vous finirez peut-être par trouver une utilité à toutes vos vieilles collections de polices dingbats, en fin de compte...

BézierSpread

La BézierSpread est très utile pour répartir une série d'objets le long d'une courbe de Bézier. La forme de la courbe est spécifiée par la paire de coordonnées xy de début de courbe et la paire xy de fin de courbe.

RandomSpread

Cette node permet de créer un ensemble de valeur pseudo-aléatoires en fonction d'un écart et d'un centre. Par ailleurs, RandomSpread pourra générer un schéma de valeurs unique en fonction du facteur "Seed". Ces valeurs ne sont pas totalement aléatoire puisque chaque RandomSpread de votre patch, paramétrés de manière identique, renverront des valeurs identiques. Cela dit, le concept de facteur Seed est important dans la mesure où vous pourrez le retrouver dans plusieurs autres nodes.

GaussianSpread

GaussianSpread crée un ensemble de coordonnées selon une distribution gaussienne. En apparence ce type de spread est semblable à RandomSpread, en réalité la différence entre ces deux types de spread tient au mode de distribution.

I

Cette node renvoie une spread de valeurs intégrales comprises entre deux limites. Si vous êtes tenté de passer 2 heures à créer manuellement une liste de valeurs entre 0 et 1000, alors cette spread est faites pour vous.

BarSpread

La node BarSpread permet de créer des animations de type bar-graphe. Elle renvoie une valeur 1 en sortie pour chaque indice de slice inférieur à la valeur d'entrée, en revanche elle renvoie une valeur 0 pour chaque indice de slice supérieur à la valeur d'entrée.

PeakSpread

PeakSpread est semblable à BarSpread dans la mesure où la sortie est une valeur booléenne (0 ou 1) obtenue par comparaison entre les indices du spread count et la valeur d'entrée. Ici, la différence tient au fait que PeakSpread ne renvoie un 1 que pour la slice correspondant à la valeur d'entrée. Cette spread est particulièrement recommandée pour créer un pic-mètre.

Queue

Cette spread assigne la valeur d'entrée à la première slice puis la décale vers la seconde slice à l'image suivante, puis à la troisième à l'image suivante et ainsi de suite. Dés lors que la valeur d'entrée est passée à la seconde slice, Queue échantillonne de nouveau l'entrée et recommence l'opération de décalage image par image. Ceci permet de créer des effets de traînées, comme la queue d'un serpent (d'où son nom).

Connecter des pins de slice counts différents

Il est tout à fait possible de connecter entre eux des pins ayant des slice counts différents:

Dans le cas où l'entrée contient moins de slices que la sortie, vvvv les répètera simplement (image de gauche). Si l'entrée contient plus de slices, les slices superflues sont ignorées (image du centre). Enfin, si l'entrée ne contient qu'une slice, toutes les slices de sortie seront identiques (image de droite; en fait un cas particulier de l'image de gauche).

Le même phénomène se produit lorsqu'on utilise des spreads de tailles différentes à l'entrée d'une opération:

La spread de gauche contient plus d'éléments que l'entrée de droite. Pour des opérations scalaires simples (comme une addition) le spread count de sortie est prévu pour être celui de la plus grande entrée.

Pour être précis, ça n'est pas UNIQUEMENT une question de slice counts d'entrée: il y a une règle particulière qui gère les slices vides: la règle exacte est: "Tant qu'aucun des slice counts est de zéro, le maximum s'applique, autrement il est de zéro".
Notez que c'est une stratégie purement arbitraire: d'autres langages comme l'APL ou le J interdisent simplement ce comportement, mais les développeurs de vvvv pensent que pour une exploration ludique, il est important d'apporter une solution intelligente à ces cas. Plusieurs autres stratégies ont été discutées, comme prendre le plus petit multiple commun ou le slice count minimum, mais la solution actuelle est la plus sympa puisqu'elle permet de mélanger des spreads à une slice avec d'autres, plus longues, de manière naturelle.

Par conséquent, l'entrée droite est redimensionnée pour également contenir sept slices. Cela est fait par répatition des spreads les plus petites:

Le même concept s'applique également aux nodes affichables:

Puisque le spread count de chaque entrée est de huit, huit objets sont dessinés. L'entrée Type n'a que trois slices maximum, donc les trois formes différentes sont répétées le long des huit éléments. La spread Color n'a qu'une slice, donc tous les objets sont de la même couleur. Il est très instructif de jouer avec ces types de paramètres, car cela permettra de créer des comportements complexes d'une manière très simple, ce qui, vous en conviendrez, est plutôt une bonne chose.

Spreads Vides

Alias Ø

Alias NIL


Qu'est-ce que les Spreads Vides?

Il est possible de travailler avec des spreads vides.
D'habitude, les objets sont conçus de manière à ce que si une des entrées contient une spread vide, la sortie renverra également une spread vide. Les objets affichables avec des spreads vides en entrée ne seront pas dessinés.

Les spreads vides sont affichées dans l'Inspecteur et dans les pins avec le symbole spécial Ø. C'est également de spreads vides dont parlent les utilisateurs du forum lorsqu'ils emploient le terme "NIL".


Comment éviter les spreads vides?

Dans la plupart des cas, vous chercherez éviter un Ø car cela risque de perturber l'ensemble du patch.
Il existe un module fournit avec vvvv appelé "ReplaceEmpty (Value)" et qui se trouve dans le répertoire ../modules/enos/.
Malheureusement les entrées de ce module ne correspondent à aucune convention d'appellation de vvvv, qui n'ont été publiées que plus tard.
En faisant défiler cette page, vous pouvez télécharger quelques modules alternatifs.

Si vous êtes sûr que votre spread doit avoir une slice, vous pourrez utiliser un + (Value Spectral) pour vous débarrasser du nil.


Comment créer des spreads vides?

Parfois, il peut vous arriver de vouloir injecter un Ø dans une entrée. Cela peut être fait grâce à une astuce simple.

Attention:
A la différence d'autres valeurs, spreads, textes ou couleurs, un Ø connecté à une entrée de node ne sera PAS sauvegardé dans le patch. Donc si vous voulez assigner un Ø à une entrée de manière permanente, laissez ce node Select connecté. Sinon, votre entrée retournera à sa valeur par défaut la prochaine fois que le patch sera ouvert.


Modules à l'usage des Spreads Vides

Ici vous pouvez télécharger un ensemble de modules contenant chacun un SetNIL et un AvoidNIL de classes valeur, texte et couleur.

Download NILmodules (14.13 Kb)

Depuis la version beta17, il n'est plus nécessaire de télécharger ces modules. Vous pouvez y accéder via le catalogue de nodes.

Les spreads et l'Inspecteur

L'Inspecteur, par défaut, ne montre que la première slice d'un pin. Si vous voulez voir toutes les slices d'un pin, cliquez sur l'icone de double flèche >> au milieu de l'Inspecteur. Alors une nouvelle liste apparaît sur la gauche avec toutes les slices du pin sélectionné.

Si le pin est connecté, toutes les slices apparaîtront en gris sombre car elles ne peuvent être modifiées.

Si le pin est déconnecté, les slices apparaîtront en gris clair et pourront être modifiées. De plus, le champ de spread count est activé et peut être lui aussi modifié.

Nodes Spectraux

Une classe spéciale de nodes est appelée spectrale. Elle est utilisée pour calculer des valeurs individuelles à partir d'une spread de valeurs. Un exemple typique serait des paramètres statistiques tel que les moyennes, largeurs, minima et maxima. La node Bounds (Spectral), par exemple, calcule tous ces paramètres et les renvoies individuellement.

Les nodes spectrales sont également particulièrement utiles pour certaines opérations sur du texte: l'addition spectrale de texte, par exemple, enchaîne toutes les slices dans une seule.

BinSize

Les nodes spectrales possèdent un pin appelé BinSize. Il détermine le nombre de slices de sortie. Ainsi, un BinSize de 2 signifie que la spread entrante sera divisée en 2 bins à la sortie, et ces bins seront traités individuellement. Notez bien que le BinSize ne divise en aucun cas la spread d'entrée, celle-ci sera répétée au besoin. Vous pouvez trouver un tutoriel sur les BinSize en anglais dans les User Tutorials? et un autre, en français, sur le forum Codelab

Stalloning

Il y a souvent un problème de distribution de slices d'une spread vers différents pins et vice versa. Stallone est un node très flexible qui vous permet de regrouper les slices de n'importe quel nombre d'entrées et de les redistribuer vers n'importe quel nombre de sorties.

Un exemple simple serait de distribuer cinq slices d'un pin vers une slice sur cinq pins:

L'inverse est également possible en paramétrant les pins Count d'entrée et de sortie, et le pin SliceCount:

Avec le pin de SpreadCount vous pouvez sélectionner le nombre de slices de sorties générées. S'il n'y a pas assez de slices en entrée, Stallone reprend simplement la première slice du premier pin et répète les valeurs.

Les modes d'ordonnancement de Stallone

En interne, Stallone gère une grande spread qui contient toutes les slices de toutes les entrées qui sont ensuite distribuées vers les slices de toutes les sorties. Le SliceCount interne est le produit du maximum de toutes les entrées et du nombre de pins (excepté si un des pins a un SliceCount de 0 - alors le résultat sera de 0).

Les slices d'entrée sont collectées soit:
a) En prenant toutes les slices du premier pin, puis du second, etc. (mode d'assortiment par pin)
ou
b) En prenant la première slice de chaque pin, puis la seconde slice de chaque pin, etc. (mode d'assortiment par slice)

Les slices de sortie sont distribuées d'une manière similaire:
a) En mode d'assortiment par pin, le premier paquet de slices est copié vers le premier pin, le second paquet vers le second pin, etc.
b) En mode d'assortiment par slice, chaque pin délivre sa première slice, puis sa seconde, etc.

Plus de nodes Spreads

Count (compte le nombre de slices d'une spread)

GetSlice (accède à une slice grâce à son indice)

SetSlice, InsertSlice (injecte une slice à un indice donné)

Cons, CDR, CAR, Resample

Shift, Scroll (décalent les slices d'une spread)

Cross, SwapDim

Select, Sort, Reverse

Buffer, RingBuffer, Queue

anonymous user login

Shoutbox

~8h ago

joreg: vvvvTv S02E03 is out: Logging: https://youtube.com/live/OpUrJjTXBxM

~2d ago

~4d ago

joreg: Follow TobyK on his Advent of Code: https://www.twitch.tv/tobyklight

~7d ago

joreg: vvvvTv S02E02 is out: Saving & Loading UI State: https://www.youtube.com/live/GJQGVxA1pIQ

~7d ago

joreg: We now have a presence on LinkedIn: https://www.linkedin.com/company/vvvv-group

~15d ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~21d ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/

~21d ago

~22d ago

fleg: hey there! What's the best tool for remote work? Teamviewer feels terrible. Thanks!

~1mth ago

joreg: Last call: 6-session vvvv beginner course starting November 4: https://thenodeinstitute.org/courses/ws24-5-vvvv-beginners-part-i/