Nodes aspectors

Cycles aplica una sèrie d’optimitzacions de node aspector tant en temps de compilació com d’execució. Si s’exploten, es poden dissenyar complicats grups de nodes estil «Uber Shader» que incorren en uns sobretemps de revelat mínims per a funcionalitats que no s’usen.

Optimitzacions de nodes

Com a primer pas en la preparació d’un node aspector d’execució, Cycles expandeix tots els grups de nodes, com si fes ús d’una eina de Desagrupar, i descarta els elements que són només de la IU com ara marcs i nodes de redirecció.

Després d’això, aplica algunes transformacions òbvies, per exemple, pot (la llista no és exhaustiva):

  • Reemplaçar els nodes següents pel resultat constant de la seva avaluació, si tenen totes les entrades consignades com a constants:

    RGB, Valor, Mesclar RGB, Matemàtica, Matemàtica vectorial, RGB a BiN, Gamma, Contrast brillant, Invertir, Separar/combinar RGB/XYZ/TSV, Cos Negre, Corbes RGB, Corbes vectorials, Gradacions de color.

  • Detectar els nodes Mesclar RGB, Matemàtica i Matemàtica vectorial que esdevenen no-op (sense Retenció) o avaluen a 0 com a resultat de la suma, resta, multiplicació, divisió o producte escalar/vectorial amb una entrada coneguda constant de 0 o 1 i substituirglos per la connexió d’entrada o resultat constant pertinents.

  • Eliminar els nodes Mesclar RGB (sense Retenir) i Mesclar aspector quan se sap que el Factor és 0 o 1 reemplaçant amb el valor d’ingressió o enllaç apropiat.

  • Eliminar els nodes Mesclar RGB no-op (excepte Cremar color, Sobreexposar color, Aclarir o Retenir habilitat), Invertir, Corbes RGB i Corbes Vectorials amb Factor zero conegut.

  • Eliminar els nodes aspectors Emissió i Rerefons que no emeten cap llum i afegir-hi nodes Aspectors amb un o ambdós arguments d’entrada sense ocupar.

  • Elimina el Relleu amb una entrada d’Alçada constant i aplicant la seva entrada de Normal o alternativament la Normal de geometria. És útil per implementar entrades de grup de nodes que per defecte es posen a normal mitjançant l’encaminament via Relleu no-op abans d’aplicar-hi els càlculs.

  • Substituir els nodes d'Atribut del tipus Capa de visionat pel valor de l’atribut avaluat (és constant dins el context de la Capa de revelat).

  • Combinar en una sola instància múltiples còpies del mateix node amb les mateixes entrades.

Finalment, s’eliminen tots els nodes que acabin sense connectar-se directament o indirectament al node d’Egressió.

Optimitzacions de temps d’execució

Quan s’executen aspectors, s’aplica una optimització especial als nodes Aspector mesclar. Si el Factor avalua a 0 o 1, no s’avaluarà cap node que només sigui accessible a través de la branca no utilitzada de la mescla.

Això pot reduir substancialment el cost en rendiment de combinar múltiples materials en un sol aspector amb un Atribut de color, textura o una altra ingressió utilitzada com a alternador.

Llenguatge d’aspecció obert

Si s’opta per l’OSL, el Llenguatge d’Aspecció Obert, com a basament del revelat, els nodes aspectors es tradueixen al codi OSL i després es compilen i executen en l’entorn d’execució d’OSL. Dins el procés, hi aplica el seu propi joc d’àmplies optimitzacions, tant en temps de compilació com d’execució.

El Llenguatge d’aspecció obert pot optimitzar els nodes de Protocols si les seves sortides no estan en ús o són constants, inclús si els seus aspectors OSL tenen efectes secundaris com el traçat de depuració i el passatge de missatges, cosa que pot generar confusió. Per aquesta raó i per regla general, no s’hauria d’emprar passatge de missatges amb setmessage i getmessage per a subministrar informació cap a la gràfica; hauria de ser preferible de passar informació explícita a través dels borns.