Uzly tieňovača#
Cycles 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, Cycles 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.
Eliminuje náraz konštantným vstupom Výška a namiesto toho sa použije jeho vstup Normál alebo Normál geometrie. Je to užitočné pri implementácii vstupov skupiny uzlov, ktoré sú predvolené na normál prostredníctvom smerovania Bez možnosti voľby Náraz pred vykonaním matematiky.
Nahradí uzly atribútov typu Vrstva zobrazenia vyhodnotenou hodnotou atribútu (je konštantná v rámci celej vrstvy prekreslenia).
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.
To môže podstatne znížiť výkonnostné nároky na kombináciu viacerých materiálov v jednom tieňovači s atribútom farby, textúrou alebo iným vstupom použitým ako prepínač.
Jazyk otvoreného tieňovania#
Ak je ako jazyk prekresľovania zvolený Open Shading Language, uzly tieňovačov (shaderov) 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.