Uzly tieňovača

Cykly používajú množstvo optimalizácií uzlov tieňovačov v čase kompilácie aj počas behu. Ich využitím je možné navrhnúť komplikované skupiny uzlov v štýle „Uber tieňovač“, ktoré spôsobujú minimálne nároky v čase prekresľovania pre nepoužívané funkcie.

Optimalizácie uzlov

Ako prvý krok pri príprave tieňovača uzlov na vykonanie, Cykly rozšíria všetky skupiny uzlov, ako keby použil nástroj Zrušiť skupinu a vyradí iba prvky užívateľského rozhrania, ako sú snímky a uzly presmerovania.

Potom použije niektoré zrejmé transformácie, napríklad môže (zoznam nie je úplný):

  • Nahradiť nasledujúce uzly konštantným výsledkom ich vyhodnotenia, ak sú všetky ich vstupy určené ako konštantné:

    RGB, Hodnota, Zmiešať RGB, Matematika, Vektorová matematika, RGB na ČB, Gama, Jasný kontrast, Invertovať, Oddeliť/kombinovať RGB/XYZ/HSV, Čierne telo, Krivky RGB, Vektorové krivky, Farebné spády.

  • Detekcia uzlov Zmiešať RGB, Matematiky a Vektorová Matematika, ktoré sa stanú nefunkčnými (bez Pripnutia) alebo sa vyhodnotia ako 0 v dôsledku sčítania, odčítania, násobenia, delenia alebo bodového/krížového súčinu so známou konštantnou hodnotou 0 alebo 1 na vstupe, a nahradenie príslušným vstupným odkazom alebo konštantným výsledkom.

  • Eliminovať uzly Miešať RGB (bez Pripnutia) a tieňovač Miešanie, keď je známe, že hodnota Faktor je 0 alebo 1, nahradením príslušnou vstupnou hodnotou alebo prepojením.

  • Eliminovať uzly Zmiešať RGB (okrem uzlov Prepáliť farbu, Uhýbať farbe, Presvetliť alebo povolené Pripnutie), Invertovať, RGB krivky a Vektorové krivky so známym nulovým faktorom.

  • Eliminovať uzly tieňovača Emisie a Pozadie neemitujúcich žiadne svetlo a pridať uzly tieňovača, v ktorých chýba jeden alebo oba vstupné argumenty.

  • Eliminovať Náraz s konštantným vstupom Výška a namiesto toho použiť jeho vstup Normál alebo Geometria Normálu.

  • Kombinovať viaceré kópie toho istého uzla s rovnakými vstupmi do jednej inštancie.

Nakoniec sa odstránia všetky uzly, ktoré nie sú priamo alebo nepriamo pripojené k výstupnému uzlu.

Optimalizácie počas behu

Pri vykonávaní tieňovačov sa na uzly tieňovača Miešanie aplikuje špeciálna optimalizácia. Ak sa hodnota Faktor vyhodnotí ako 0 alebo 1, všetky uzly, ktoré sú dosiahnuteľné len cez nepoužitú vetvu zmiešania, sa nevyhodnotia.

To môže podstatne znížiť výkonnostné nároky na kombináciu viacerých materiálov v jednom tieňovači s farbou vrcholov, textúrou alebo iným vstupom použitým ako prepínač.

Jazyk otvoreného tieňovania

Ak je ako prekresľovací jazyk zvolený Open Shading Language, tieňovače (shadery) uzlov sa preložia do kódu OSL a potom sa skompilujú a spustia v prostredí OSL. V tomto procese sa uplatňuje vlastný rozsiahly súbor optimalizácií v čase kompilácie aj počas behu.

Jazyk Open Shading Language dokáže optimalizovať uzly skriptov, ak sú ich výstupy nepoužívané alebo konštantné, aj keď ich OSL tieňovače majú vedľajšie efekty, ako napríklad snímanie ladenia a odovzdávanie správ, čo môže byť mätúce. Z tohto dôvodu by sa odovzdávanie správ pomocou setmessage a getmessage vo všeobecnosti nemalo používať na odovzdávanie informácií dopredu v grafe; malo by sa uprednostňovať explicitné odovzdávanie informácií prostredníctvom zásuviek.