Compositador de GPU

El nou compositador accelerat de GPU introduït en el Blender 3.5 i actualment emprat per al compositat de mirador.

Dades

Dimensionalitat

Els nodes de compositació operen sobre dades que són o bé una imatge o bé un valor únic adimensional. Per exemple, el node Node Nivells egressa un únic valor, mentre que el Node Capes de revelat espera valors únics per a les seves entrades i assumirà valors predeterminats si s’aporten imatges a aquestes entrades. Els valors per defecte són els considerats com a identitat i, per tant, no tenen cap efecte en l’egressió, que vol dir que per al Node de Transformació les entrades X, Y i Angle tindran un valor per defecte de zero, mentre que l’entrada Escala tindrà un valor per defecte d’u. D’altra banda, si a les entrades de node que esperen una imatge se’ls assigna un valor únic, s’assumirà que el valor únic cobreix tot l’espai de compositació. Per exemple, el Node de Filtre espera que la seva entrada Factor sigui una imatge, però si se li dona un únic valor, s’assumirà que és el mateix per a tots els píxels.

Tipus

Existeixen tres tipus de dades, totes emmagatzemades en formats de mitja precisió:

Flotant o decimal

Un número de coma flotant o decimal amb signe. Les dades enteres també s’emmagatzemen com a flotants perquè no existeix cap tipus per als enters.

Vector

Un vector 4D. Si bé és 4D, pot tenir diferents interpretacions depenent del node que l’utilitzi. Se’l pot tractar com un vector 2D deixant els dos últims components ignorats, per exemple, l’entrada Vector del Node Desplaçament es tracta com un vector 2D. Se’l pot tractar com un vector 3D amb l’últim component ignorat, per exemple, l’entrada Vector del Node Separar XYZ es tracta com un vector 3D. Se’l pot tractar com dos vectors 2D consecutius. Per exemple, el Passada de velocitat tal i com l’espera el Node Difuminat de vector es pressuposa que té la Velocitat anterior 2D en els components X i Y del vector i la Velocitat posterior 2D en els components Z i W del vector.

Color

Un vector 4D que emmagatzema el Vermell, Verd, Blau i Alfa del color. El color és de forma lliure i no s’ajusta a un espai de color específic o a un model d’emmagatzematge alfa, en canvi, els nodes apropiats tindran paràmetres per controlar la representació de la seva egressió i els nodes hi són per fer conversions entre les diferents representacions.

Conversió implícita

En cas que es doni una entrada de node a dades de tipus diferent del seu propi tipus, es realitzen les següents conversions implícites:

Origen

Referent

Conversió

Flotant o decimal

Vector

f => Vector(f, f, f, 0)

Flotant o decimal

Color

f => Color(f, f, f, 1)

Vector

Flotant o decimal

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

Vector

Color

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

Color

Flotant o decimal

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

Color

Vector

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

L’exemple següent demostra la conversió implícita entre un tipus de color i un tipus de flotant, ja que el Node Matemàtica. espera entrades de decimals.

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

Exemple que demostra la conversió implícita entre un tipus de color i un tipus de flotant, ja que el node Càcul espera entrades decimals.

Espai de compositació

Domini d’imatge

El compositor està dissenyat de tal manera que permet la compositació en un espai de compositació infinit. En conseqüència, les imatges no només es representen per la seva mida, sinó també per la seva transformació en aquest espai, igual que les transformacions dels objectes 3D. Una transformació d’identitat representa una imatge que està centrada en l’espai. L’àrea rectangular ocupada per una imatge en aquest espai tal com es defineix per la seva transformació i mida s’anomena el Domini de la imatge. La figura següent mostra els dominis de dues imatges exemple.

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

Els dominis de dues imatges exemple s’il·lustren a l’espai de compositació. Una de les imatges està centrada en l’espai i l’altra s’escala i trasllada de manera que es troba en el quadrant superior dret de l’espai. Observeu que ambdues imatges tenen mides similars en píxels, però les seves mides aparents són diferents.

Les imatges es poden transformar amb nodes com Transformar, Translladar, i Rotar nodes.

Domini d’operació

Els Nodes de compositador operen en una àrea rectangular específica de l’espai de compositació anomenat Domini d’operació. Els nodes només consideren l’àrea de les imatges d’ingressió que se superposen al domini d’operació i ignoren la resta d’imatges. Si una imatge d’ingressió no se superposa completament al domini d’operació, la resta del domini d’operació per a aquesta ingressió s’assumirà que és un valor zero, un vector zero o un color zero transparent depenent del tipus.

Per exemple, la figura següent il·lustra un cas en què el domini d’operació d’un node és l’àrea blava gran i el domini d’una imatge d’ingressió és l’àrea vermella petita. En aquest cas, la imatge d’ingressió no se superposa completament al domini d’operació, de manera que la resta de l’àrea blava per a aquesta imatge d’ingressió s’assumeix que és zero.

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

Un exemple en què el domini d’operació d’un node es mostra en blau i el domini d’una imatge d’ingressió es mostra en vermell. Com que la imatge d’ingressió no cobreix completament el domini d’operació del node, la resta de l’àrea blava per a aquesta imatge d’ingressió es pressuposa que és zero.

La il·lustració anterior és una representació d’un exemple del món real on s’utilitzen el node Alfa per sobre per a superposar un petit logotip en una imatge, com es mostra a la figura de sota. En aquest cas, el domini d’operació cobreix la totalitat del mirador — com es demostrarà més tard, però el logotip només en cobreix una petita àrea, de manera que la resta de l’àrea s’assumeix que és un color transparent zero, el qual és adient per a aquest cas d’ús.

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

Un exemple del món real on el node Alfa per sobre s’utilitza per sobreposar un petit logotip a una imatge. El logotip només cobreix una petita àrea del domini d’operació, que és la totalitat del mirador en aquest cas, de manera que la resta de l’àrea es pressuposa que és de color transparent zero.

Interpolació

Si una imatge d’entrada a un node no està perfectament alineada amb el domini d’operació del node o té una mida diferent en píxels, el node normalment necessitaria fer un procés anomenat Interpolació, on la imatge d’entrada es llegeix a les posicions exactes dels píxels del domini d’operació. Això es pot fer utilitzant diferents mètodes d’interpolació, incloent-hi interpolacions de Veí més proper, bilineals i bicúbiques. Aquests mètodes d’interpolació es mostren a la següent Galeria de Viquipèdia. Els nodes de Transformació com els Transformació i Rotar inclouen una opció d’interpolació per definir com es prefereix que la seva imatge de sortida sigui llegida i interpolada.

Determinar el domini d’operació

La qüestió continua sent com els nodes determinen el seu domini d’operació. Diferents tipus de node poden tenir diferents mecanismes per determinar el seu domini d’operació. Però generalment, existeixen tres classes de nodes pel que fa al mecanisme de determinació del domini d’operació, cadascun dels quals es presenta en una de les següents seccions.

Nodes d’Ingressió

El domini d’operació dels nodes d’entrada com el node Node imatge és un domini amb una transformació d’identitat i amb la mateixa mida que les seves sortides, de manera que per al node Imatge, el domini d’operació serà el domini la mida del qual és la mida de la imatge i la transformació del qual sigui una transformació d’identitat.

Nodes d’Egressió

El domini d’operació dels nodes de sortida com el Node Visor és un domini amb una transformació d’identitat i la mateixa mida que l’egressió final del compositador. Per a la compositació de mirador, aquesta mida seria la mida del mirador, i per a la compositació final de revelat, aquesta mida seria la mida de revelat de l’escena.

Altres nodes

Tret que s’indiqui el contrari en les respectives pàgines de documentació, tots els altres nodes utilitzen el mecanisme següent. Una de les entrades dels nodes està designada com a Entrada de domini del node, i el domini d’operació del node és idèntic al domini d’aquesta entrada designada. Per a molts nodes, l’entrada de domini es pot identificar intuïtivament com l’entrada principal del node, per exemple, l’entrada de domini per al :ref:`Node Filtre <bpy.types.CompositorNodeFilter>`és l’entrada *Imatge. Però hi ha algunes pegues a destacar, que requereixen una comprensió més profunda del mecanisme.

Cada entrada del node té la propietat anomenada Prioritat de domini, el domini d’operació del node és el domini de l’entrada de valor no únic amb la prioritat de domini més alta. Per exemple, el Node Filtre té dues entrades, la prioritat de domini de l’entrada Imatge és més alta que la de l’entrada Factor, i hi ha quatre configuracions possibles:

  • Tant les entrades Imatge com factor estan connectades a imatges. En aquest cas, l’entrada Imatge és l’entrada del domini perquè té la prioritat més alta i està connectada a una imatge.

  • L’entrada Imatge està connectada a una imatge, però l’entrada Factor no ho està. En aquest cas, l’entrada Imatge és l’entrada del domini perquè és l’única entrada connectada a una imatge independentment de la seva prioritat.

  • L’entrada Imatge no està connectada a una imatge, però l’entrada Factor sí. En aquest cas, l’entrada Factor és l’entrada del domini perquè és l’única entrada connectada a una imatge independentment de la seva prioritat.

  • Ni les entrades Imatge ni Factor estan connectades a imatges, en aquest cas, no hi ha entrada de domini perquè el node s’avalua sobre valors únics.

Consideracions

L’esmentat mecanisme per determinar el domini d’operació té una sèrie de conseqüències que cal considerar, ja que poden ser no desitjades, cadascuna es presenta en un dels apartats següents.

Retall

La sortida dels nodes es retallarà intuïtivament al domini d’operació, o millor dit, al domini de l’entrada de domini. Per exemple, si l’entrada Primer pla és més gran que l’entrada Rerefons en el Node Alfa per sobre, la sortida es retallarà a l’entrada de Rerefons perquè és l’entrada del domini, com es mostra a la figura següent.

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

L’entrada Primer pla és més gran que l’entrada Rerefons en el node Alpha a sobre, de manera que la sortida es retalla intuïtivament a l’entrada de Rerefons perquè és l’entrada del domini.

El Node Alfa per sobre ara mateix no permet canviar la prioritat de domini per a les seves entrades, de manera que com a circumsolució es pot utilitzar un Node mescla per aconseguir el comportament desitjat, assenyalant que la primera entrada de Imatge en el node Mescla té la prioritat de domini més alta, com es mostra en la figura següent.

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

Circumsolucionant el comportament de retallat del node Alpha a sobre amb un Node Mescla, observant que la primera entrada de Imatge al node Mescla té la prioritat de domini més alta

Egressió

El compositador GPU només admet una única egressió de destinació activa, és a dir, només un dels Nodes de compositació or Nodes de visor de l’arbre de nodes es considerarà actiu i la resta s’ignorarà. En concret, el compositador cerca el Context d’arbre de nodes actiu i recorre en segona opció al Context de l’arbre de nodes arrel si no ha trobat cap egressió activa en el context de l’arbre de nodes actiu. El context d’arbre de nodes actiu és l’arbre de node d’un grup de nodes expandit, és a dir, quan les usuàries seleccionen un node de grup de nodes i editen el seu arbre subjacent, mentre que el context d’arbre de node arrel és l’arbre de node de nivell superior sense cap grup de nodes expandit. El compositador cerca el node Compositar actiu, i si no en troba, cerca el node Visor actiu, ja sigui un node Visor o un node Visor dividit, si no n’ha trobat, el compositador en conjunt no s’executa. En conseqüència, tingueu en compte que afegir un node Visor no tindrà cap efecte si hi ha un node Compositar, ja que es dona prioritat als nodes Compositar.