Realtime Compositor

The Realtime Compositor is a new GPU accelerated compositor introduced in Blender 3.5 and is currently used for viewport compositing. This compositor is currently more limited and not all Compositor Nodes are supported, such nodes are marked with the CPU Compositor Only label along with notes about other limitations. Moreover, MacOS is not supported due to missing support for modern OpenGL.

Údaje

Rozmernosť

Uzly kompozície pracujú s údajmi, ktoré sú buď obrazom, alebo bezrozmernou jednotlivou hodnotou. Napríklad uzol Úrovne vygeneruje jednu hodnotu, zatiaľ čo uzol Vrstvy prekreslenia výstupom obrazu. Vstupy uzlov, ktoré očakávajú jednu hodnotu, predpokladajú predvolenú hodnotu, ak je daný obrázok a úplne ignorujú obrázok, napríklad uzol Transformácia očakáva pre svoje vstupy jednotlivé hodnoty a bude predpokladať predvolené hodnoty, ak boli obrázky dané týmto vstupom. Predvolené hodnoty sú tie, ktoré sa považujú za identitu, a preto nemajú žiadny vplyv na výstup, takže pre uzol Transformácia, vstupy X, Y a Uhol budú mať predvolenú hodnotu nula, zatiaľ čo vstup Mierka bude mať predvolenú hodnotu jedna. Na druhej strane, ak vstupy uzlov, ktoré očakávajú obraz, dostanú jednu hodnotu, bude sa predpokladať, že jediná hodnota pokryje celý priestor na zloženie. Napríklad uzol Filter očakáva, že jeho vstup Faktor bude obrázok, ale ak je uvedená jedna hodnota, bude sa predpokladať, že je rovnaká pre všetky pixely.

Typ

Existujú tri typy údajov, z ktorých všetky sú uložené vo formátoch s polovičnou presnosťou:

Pohyblivá čiarka

Podpísané číslo s pohyblivou desatinnou čiarkou. Celočíselné údaje sú tiež uložené ako s pohyblivou čiarkou, pretože neexistuje žiadny celočíselný typ.

Vektor

4D vektor. Aj keď je 4D, môže mať rôzne interpretácie v závislosti od uzla, ktorý ho používa. Môže sa s ním zaobchádzať ako s 2D vektorom, pričom posledné dve zložky sa ignorujú, napríklad Vektor vstup uzla Premiestniť sa považuje za 2D vektor. Môže sa s ním zaobchádzať ako s 3D vektorom, pričom posledná zložka sa ignoruje, napríklad Vektor vstup uzla Oddeliť XYZ sa považuje za 3D vektor. Môže sa s ním zaobchádzať ako s dvoma po sebe nasledujúcimi 2D vektormi. Napríklad Rýchlostný prechod podľa očakávania uzol Vektor rozostrenia2D predchádzajúcu rýchlosť v zložkách X a Y vektora a 2D ďalšia rýchlosť v zložkách Z a W vektora.

Farba

4D vektor ukladajúci červenú, zelenú, modrú a alfa farbu. Farba má voľnú formu a nezodpovedá konkrétnemu farebnému priestoru alebo modelu alfa úložiska, namiesto toho budú mať príslušné uzly nastavenia na ovládanie reprezentácie svojho výstupu a uzly existujú na konverziu medzi rôznymi reprezentáciami.

Implicitná konverzia

V prípade, že vstup uzla dostane údaje iného typu, ako je jeho vlastný typ, vykonajú sa nasledujúce implicitné konverzie:

Zdroj

Cieľ

Konvertovanie

Pohyblivá čiarka

Vektor

f = > vektor(f, f, f, 0)

Pohyblivá čiarka

Farba

f = > farba(f, f, f, 1)

Vektor

Pohyblivá čiarka

(x, y, z, w) => priemer(x, y, z)

Vektor

Farba

(x, y, z, w) => farba(x, y, z, 1)

Farba

Pohyblivá čiarka

(r, g, b, a) => priemer(r, g, b)

Farba

Vektor

(r, g, b, a) => vektor(r, g, b, 0)

Nasledujúci príklad demonštruje implicitnú konverziu medzi farebným typom a typom na pohyblivej čiarke, pretože uzol Matematika očakáva vstupy na pohyblivej čiarke.

../_images/compositing_realtime-compositor_compositing-space_data_type_implicit_conversion.png

Príklad, ktorý demonštruje implicitnú konverziu medzi farebným typom a typom na pohyblivej čiarke, pretože uzol Matematika očakáva vstupy na pohyblivej čiarke.

Priestor kompozície

Doména obrázka

Kompozítor je navrhnutý tak, aby umožňoval kompozíciu v nekonečnom kompozičnom priestore. V dôsledku toho sú obrázky reprezentované nielen svojou veľkosťou, ale aj ich transformáciou v tomto priestore, podobne ako 3D objekty majú transformácie. Transformácia identity predstavuje obrázok, ktorý je sústredený v priestore. Obdĺžniková oblasť obsadená obrázkom v tomto priestore, ako je definovaná jeho transformáciou a veľkosťou, sa nazýva Doména obrázka. Na nasledujúcom obrázku sú znázornené dva príklady domény obrázkov.

../_images/compositing_realtime-compositor_compositing-space_image-domain_example.png

Domény dvoch príkladov obrázkov sú ilustrované na kompozičnom priestore. Jeden z obrázkov je vycentrovaný v priestore a druhý je zmenšený a preložený tak, že leží v pravom hornom kvadrante priestoru. Všimnite si, že oba obrázky majú podobné veľkosti v pixeloch, ale ich zdanlivé veľkosti sú odlišné.

Obrázky je možné transformovať použitím uzlov, ako sú uzly Transformácia, Premiestnenie a Rotácia.

Operačná doména

Compositor Nodes operate on a specific rectangular area of the compositing space called the Operation Domain. The nodes only consider the area of the input images that overlap the operation domain and ignores the rest of the images. If an input image doesn’t completely overlap the operation domain, the rest of the operation domain for that input will be assumed to be a zero value, a zero vector, or a transparent zero color depending on the type. This behavior can be changed to an extent, see the section about Wrapping below.

Napríklad obrázok nižšie ilustruje prípad, keď operačnou doménou uzla je veľká modrá oblasť a doménou vstupného obrázka je malá červená oblasť. V takom prípade vstupný obraz úplne neprekrýva operačnú doménu, takže zvyšok modrej oblasti pre tento vstupný obraz sa považuje za nulový.

../_images/compositing_realtime-compositor_compositing-space_operation-domain_example.png

Príklad prípadu, keď je operačná doména uzla zobrazená modrou farbou a doména vstupného obrazu je zobrazená červenou farbou. Keďže vstupný obraz úplne nepokrýva prevádzkovú doménu uzla, predpokladá sa, že zvyšok modrej oblasti pre tento vstupný obraz je nula.

Predošlá ilustrácia je znázornením príkladu zo skutočného sveta, kde sa používa uzol Nad alfou na prekrytie malého loga na obrázku, ako je znázornené na obrázku nižšie. V takom prípade operačná doména pokrýva celý záber—ako sa ukáže neskôr, ale logo pokrýva iba jeho malú plochu, takže zvyšok plochy sa považuje za nulovú priehľadnú farbu, ktorá je vhodná pre prípadné využitie.

../_images/compositing_realtime-compositor_compositing-space_operation-domain_real-example.png

Príklad zo skutočného sveta, kde sa uzol Nad alfou používa na prekrytie malého loga na obrázku. Logo pokrýva iba malú plochu operačnej domény, ktorá je v tomto prípade celým záberom, takže zvyšok plochy sa považuje za nulovú priehľadnú farbu.

Interpolácia

If an input image to a node is not perfectly aligned with the operation domain of the node or have a different size in pixels, the node would typically need to do a process called Interpolation, where the input image is read at the exact positions of the pixels of the operation domain. This can be done using different interpolation methods, including Nearest-Neighbor, Bilinear, and Bicubic interpolations. Those interpolation methods are demonstrated in the following Wikipedia gallery. Transformation nodes like the Transform and Rotate nodes include an interpolation option to set how they prefer their output image to be read and interpolated.

Note that the transform nodes don’t do any interpolations themselves, they merely record the preferred interpolation method for the output image and latter nodes that read that image will be the node that does the actual interpolation. It follows that latter transform nodes will overwrite the interpolation methods set by former transform nodes if no interpolation took place in-between.

Pokrytie

While it was previously stated that areas of the input images that do not overlap the operation domain are assumed to be zero, this is only the default behavior. The alternative behavior is to instruct the compositor to repeat the input image to fill the missing areas along the horizontal direction, vertical direction, or both. This can be set in the Wrap option of the Translate node. Much like the aforementioned interpolation method, the Translate node doesn’t do any wrapping itself, it merely sets the preferred method of filling empty spaces and latter nodes that read the image will be the node that does the actual wrapping.

For instance, the previous Alpha Over example but with Both Axis Wrapping enabled is shown in the figure below.

../_images/compositing_realtime-compositor_compositing-space_operation-domain_wrapping.png

The previous example with Alpha Over example but with Both Axis Wrapping enabled.

Určenie operačnej domény

Otázkou zostáva, ako uzly určujú svoju operačnú doménu. Rôzne typy uzlov môžu mať rôzne mechanizmy na určenie ich prevádzkovej domény. Vo všeobecnosti však existujú tri triedy uzlov, pokiaľ ide o mechanizmus určovania operačnej domény, z ktorých každá je uvedená v jednej z nasledujúcich častí.

Vstupné uzly

Operačná doména vstupných uzlov ako uzol Obrázok je doména s transformáciou identity a rovnakou veľkosťou ako ich výstupy, takže pre uzol Obrázok bude operačnou doménou domény, ktorej veľkosť je veľkosť obrázka a ktorej transformácia je identita.

Výstupné uzly

Operačná doména výstupných uzlov, ako je uzol Prehliadač je doména s transformáciou identity a rovnakou veľkosťou ako konečný výstup kompozítora. Pre kompozíciu záberu, táto veľkosť by bola veľkosť záberu a pre konečné zloženie prekreslenia by táto veľkosť bola veľkosťou prekreslenia scény.

Ostatné uzly

Pokiaľ nie je na príslušných stránkach dokumentácie uvedené inak, všetky ostatné uzly používajú nasledujúci mechanizmus. Jeden zo vstupov uzlov je označený ako Vstup domény uzla a operačná doména uzla je identická s doménou tohto určeného vstupu. Pre mnoho uzlov môže byť vstup domény intuitívne identifikovaný ako hlavný vstup uzla, napríklad vstup domény pre uzol Filter je vstup Obrázok. Je však potrebné poznamenať niekoľko upozornení, ktoré si vyžadujú hlbšie pochopenie mechanizmu.

Každý vstup do uzla má takzvanú vlastnosť Priorita domény, operačná doména uzla je doménou vstupu bez jednej hodnoty s najvyššou prioritou domény. Takže napríklad uzol Filter má dva vstupy, priorita domény vstupu Obrázok je vyššia ako priorita vstupu Faktor a existujú štyri možné konfigurácie:

  • K obrázkom sú pripojené vstupy Obrázok aj faktor. V tomto prípade je vstup Obrázok vstupom domény, pretože má najvyššiu prioritu a je pripojený k obrázku.

  • Vstup Obrázok je pripojený k obrázku, ale vstup Faktor nie je. V tomto prípade je vstup Image vstupom domény, pretože je to jediný vstup pripojený k obrázku bez ohľadu na jeho prioritu.

  • Vstup Obrázok nie je pripojený k obrázku, ale vstup Faktor je. V tomto prípade je vstup Factor vstupom domény, pretože je to jediný vstup pripojený k obrázku bez ohľadu na jeho prioritu.

  • Ani vstupy Obrázok, ani Faktor nie sú pripojené k obrázkom, v tomto prípade neexistuje vstup domény, pretože uzol je vyhodnotený na základe jednotlivých hodnôt.

Úvahy

Vyššie uvedený mechanizmus na určenie operačnej domény má množstvo dôsledkov, ktoré je potrebné zvážiť, pretože by mohli byť nežiadúce, z ktorých každý je uvedený v jednej z nasledujúcich častí.

Orezávanie

Výstup uzlov bude intuitívne orezaný na operačnú doménu, alebo skôr na doménu vstupu domény. Napríklad, ak je vstup Popredie väčší ako vstup Pozadie v uzle Nad alfa, výstup sa oreže na vstup Pozadie, pretože ide o vstup domény, ako je znázornené na nasledujúcom obrázku.

../_images/compositing_realtime-compositor_compositing-space_operation-domain_considerations_clipping.png

Vstup Popredie je väčší ako vstup Pozadie v uzle Nad alfou, takže výstup je intuitívne orezaný na vstup Pozadie, pretože ide o vstup domény.

Uzol Nad alfou v súčasnosti nepodporuje zmenu priority domény pre svoje vstupy, takže ako alternatívne riešenie je možné použiť uzol Zmiešať na dosiahnutie požadovaného správania, pričom poznamenáva, že prvý vstup Obrázok v uzle Zmiešať má najvyššiu prioritu domény, ako je znázornené na nasledujúcom obrázku.

../_images/compositing_realtime-compositor_compositing-space_operation-domain_considerations_clipping-solution.png

Práca okolo správania orezania uzla Nad alfou použitím uzla Zmiešať, pričom poznamenáva, že prvý vstup Obrázok v uzle Zmiešať má najvyššiu prioritu domény

Pixelation

If the domain input of the node is very large, other inputs will look pixelated. That’s because the resolution of the domain input is the same, while its apparent size is greatly increased, so the number of pixels covered by other inputs is much fewer.

../_images/compositing_realtime-compositor_compositing-space_operation-domain_considerations_pixelation.png

An example case where pixelation happens due to very large domain inputs.

Pixel Space Operations

Nodes operate on their input images in local pixel space irrespective of their transformation in the compositing space. For instance, if an image that is rotated by 90 degrees is blurred along the horizontal direction using the Blur node, the blurring will apparently take place along the vertical direction instead, because the node is applied in the local pixel space of the input.

Výstup

The realtime compositor only supports a single active output target, that is, only one of the Composite nodes, Viewer nodes, or Split Viewer nodes in the node tree will be considered active and the rest will be ignored. In particular, the compositor searches the Active Node Tree Context and falls back to the Root Node Tree Context if no active output was found in the active node tree context. The active node tree context is the node tree of an expanded node group, that is, when the users selects a node group node and edits its underlying tree, while the root node tree context is the top level node tree without any expanded node groups. The compositor searches for the active Composite node, if non was found, it searches for the active Viewer node, be it a Viewer or a Split Viewer node, if non was found, the compositor doesn’t run altogether. Consequently, note that adding a Viewer node will have no effect if there is a Composite node, since the priority is given to Composite nodes.