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 rozostrenia má 2D 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.
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.
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ý.
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.
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.
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.
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.
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.
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.