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.

  • Eliminuje 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.

  • Eliminuje 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.

  • Eliminuje 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.

  • Eliminate Bump with constant Height input, using its Normal input or Geometry Normal instead.

  • Kombinuje 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.

This can substantially reduce the performance cost of combining multiple materials in one shader with vertex color, texture, or other input used as a switch.

Jazyk otvoreného tieňovania

If Open Shading Language is chosen as the rendering back end, node shaders are translated to OSL code and then compiled and executed by the OSL runtime. In the process it applies its own extensive set of optimizations, both at compile time and run-time.

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.