Aller au contenu

Agrégation et sibling aggregator

Un seul arbre doit décrire deux graphes. Cette page traite du second — et de la règle unique qui décide de ce que chaque composite collecte.

Pourquoi deux hiérarchies

La Node View de Harmony porte deux graphes de connexion en même temps :

Hiérarchie Couleur Relie Signifie
Input / Transform 🟢 vert peg → ses enfants « ceci déplace cela »
Output / Composite 🔵 bleu comp ← ce qui l'alimente « ceci composite cela »

Ce ne sont pas le même arbre. Un même peg peut piloter plusieurs compositions distinctes, et un même composite peut rassembler des choses qu'aucun peg unique ne déplace.

Un arbre de staging est un arbre — il n'a qu'une seule forme de parenté. OSA l'utilise donc pour le graphe vert, où l'indentation signifie déjà ce que vous voulez qu'elle signifie : une ligne enfant est un nœud enfant.

Il ne reste alors aucune indentation où loger le graphe bleu. Sa réponse est la position parmi les frères.

Le sibling aggregator

Un composite sans green container agrège les frères situés en dessous de lui.

C'est cela, un sibling aggregator. Il n'a pas de portée propre où regarder, alors il regarde plus bas dans la liste.

Comp-1        ← starts block 1
Peg-1         ← feeds Comp-1 … but see below: what enters is Comp-2's output
  Comp-2      ← starts an inner block; its output IS Peg-1's output
  Drawing-1   ← feeds Comp-2
  Drawing-2   ← feeds Comp-2
Drawing-3     ← feeds Comp-1
Comp-3        ← ENDS block 1, starts block 2
Drawing-4     ← feeds Comp-3
Drawing-5     ← feeds Comp-3

Lu à voix haute : un comp ouvre un bloc, tout ce qui le suit s'y déverse, et le comp suivant au même niveau ferme le bloc et en ouvre un nouveau.

Un peg n'alimente pas un comp — c'est la sortie de sa hiérarchie qui le fait

Peg-1 est une transformation, pas une image. Ce qui arrive à Comp-1, c'est le résultat de tout ce qui se trouve sous Peg-1, et ce résultat sort de Comp-2 — le comp situé dans la portée de Peg-1, qui a déjà rassemblé Drawing-1 et Drawing-2.

Le fil est donc Comp-2 → Comp-1. Peg-1 est sur le graphe vert ; il n'apparaît jamais sur le bleu.

Retirez Comp-2 et Peg-1 n'a plus de comp pour parler en son nom — alors Drawing-1 et Drawing-2 remontent et sont câblés dans Comp-1 individuellement, en deux entrées au lieu d'une. C'est là toute la différence entre un peg avec comp et un peg sans, et c'est traité dans Ce qu'un conteneur produit en sortie.

Et un deuxième comp dans Peg-1 signifierait deux sorties arrivant à Comp-1 — une par bloc :

Comp-1
Peg-1              ← now hands Comp-1 TWO outputs
  Comp-2           ← block A → its output goes to Comp-1
  Drawing-1        → feeds Comp-2
  Comp-2b          ← block B: closes A, opens its own
  Drawing-2        → feeds Comp-2b
                   ← Comp-2b's output ALSO goes to Comp-1

Chaque bloc qui se termine dans un conteneur remonte comme sa propre sortie, dans l'ordre de l'arbre. Le nombre de fils arrivant à Comp-1 depuis Peg-1 est donc exactement le nombre de blocs que Peg-1 a fermés — un comp, un fil ; deux comps, deux fils ; aucun comp du tout, un fil par drawing.

Ce qui rompt la chaîne

Un autre composite au même niveau. C'est la seule chose qui le fasse.

Quand le parcours rencontre un second comp parmi les mêmes frères, il vide le bloc courant et en démarre un neuf. Il n'y a aucun marqueur à poser ni aucune option à cocher : la présence du second comp est la frontière.

C'est pourquoi vous pouvez disposer une scène en liste plate de frères et en tirer malgré tout plusieurs compositions séparées — vous les séparez en plaçant un comp là où chaque groupe doit finir.

La règle qui décide enfants ou frères

Seuls les green containers créent une portée, et il y en a exactement deux : Peg et Group.

Slot Le comp agrège Pourquoi
C seul les frères en dessous rien d'autre qu'un point d'agrégation
D-C les frères en dessous pas de green container, donc pas de portée
BD-C les frères en dessous un backdrop est visuel — il ne possède pas de nœuds
BD-D-C les frères en dessous pareil : le backdrop ne change rien au câblage
P-C, G-C les enfants le green container crée une portée interne
P-D-C, G-D-C les enfants pareil
BD-P-C, BD-P-G-D-C les enfants c'est le peg qui le fait ; le backdrop ne dessine qu'une boîte

Un backdrop ne change jamais qui agrège

C'est le point que les gens ratent, et il vaut la peine de le dire sans détour : BD est visuel. BG=BD-C agrège les frères exactement comme un C nu, parce qu'il n'existe aucune connexion verte entre le backdrop et le comp par laquelle le comp pourrait collecter des enfants. Seuls P ou G transforment un comp en agrégateur d'enfants.

Super node avec Peg (ou Group) + Comp

Voici maintenant le cas que vous construisez tous les jours.

Un slot avec un green container et un comp — hero=P-C, hero=BD-P-G-C — fait que le comp agrège ses enfants immédiats, dans l'ordre de l'arbre…

…jusqu'au premier enfant qui est lui-même un comp. Cet enfant démarre un nouveau bloc de sibling aggregator, et tout ce qui suit appartient à ce bloc-là.

hero=P-C            ← green scope; its comp collects the children below
├── arm=D           → feeds hero-C
├── leg=D           → feeds hero-C
├── fx=C            ← a comp among the children: block boundary
├── glow=D          → feeds fx-C
└── dust=D          → feeds fx-C

hero-C reçoit arm et leg. fx-C reçoit glow et dust, et c'est la sortie de fx-C qui poursuit vers le haut.

Voilà tout le langage de composition : un green container ouvre une portée, et un comp à l'intérieur collecte jusqu'à ce que le comp suivant dise stop.

Ce qu'un conteneur produit en sortie

Le conteneur Sa sortie
a un comp interne une seule sortie — le comp, ou le dernier effet après lui
n'a pas de comp interne multi-sortie : chaque drawing à l'intérieur remonte

Un peg sans comp ne fusionne rien. Il tend à son parent une liste, et chaque élément est câblé individuellement dans le comp du parent.

SuperNode=P-D-C
├── Peg-1  (P only, no Comp)
│   ├── Drawing-A
│   └── Drawing-B
└── Drawing-C

Peg-1 renvoie [Drawing-A, Drawing-B], donc SuperNode-C reçoit quatre entrées :

Port Entrée
3 le drawing propre de SuperNode
2 Drawing-A (remonté depuis Peg-1)
1 Drawing-B (remonté depuis Peg-1)
0 Drawing-C

Mettez un comp dans le peg et ces deux-là se réduisent à une seule entrée. C'est la différence pratique entre Peg-1=P et Peg-1=P-C, et c'est en général la raison pour laquelle un graphe a plus de fils que prévu.

Ordre des ports

Le graphe bleu a un sens, et il est fixe :

Port Rend Se place
Port N (le plus haut) devant à gauche dans la Node View
Port 0 (le plus bas) derrière à droite dans la Node View

Ainsi l'élément le plus à gauche dans la Node View est au-dessus dans le rendu, et celui le plus à droite est au fond. Dans un super node, le drawing propre du slot prend le port de devant et les enfants prennent ceux d'en dessous, de gauche à droite.

C'est aussi pourquoi le Wide Bus place le haut de votre arbre à gauche : ordre de l'arbre, ordre des ports et ordre de rendu sont le même ordre, lu de la même façon.

Le lire dans l'arbre

Vous n'avez rien à simuler de tout cela dans votre tête — la colonne Details vous dit déjà ce que chaque ligne construit, et la règle ci-dessus vous dit ce que son comp va collecter :

BACKGROUND      (Backdrop > Peg > Comp)     ← green scope: collects its children
  sky           (Read)                       → feeds BACKGROUND-C
  clouds        (Read)                       → feeds BACKGROUND-C
EFFECTS         (Backdrop > Peg > Comp > Effects)

Si un comp collecte les mauvaises choses, il n'y a que deux questions à poser : y a-t-il un green container sur ce slot ? et y a-t-il un autre comp au-dessus de lui parmi les mêmes frères ?