Nodes Shader

Cycles applique un grand nombre d’optimisations de node shader à la fois au moment de la compilation et de l’exécution. En les exploitant il est possible de concevoir des groupes de nodes complexes du style « Uber Shader » qui occasionnent un coût de temps de rendu minimal pour les fonctions inutilisées.

Optimisations de nodes

Comme première étape dans le préparation d’un node shader pour exécution, Cycles expand tous les groupes de nodes, comme si l’outil Ungroup, et comme les frames et les nodes reroute.

Après cela, il applique certaines transformations évidentes. Par exemple, il peut (la liste n’est pas exhaustive) :

  • Remplacer les nodes suivants par le résultat constant de leur évaluation, si toutes leurs entrées sont déterminées pour être constantes :

    RGB, Value, Mix RGB, Math, Vector Math, RGB to BW, Gamma, Bright Contrast, Invert, Separate/Combine RGB/XYZ/HSV, Blackbody, RGB Curves, Vector Curves, Color Ramps.

  • Detect Mix RGB, Math and Vector Math nodes that become no-op (without Clamp) or evaluate to 0 as a result of addition, subtraction, multiplication, division or dot/cross product with a known constant 0 or 1 input, and replace with the appropriate input link or constant result.

  • Eliminate Mix RGB Mix (without Clamp) and Mix Shader nodes when Factor is known to be 0 or 1 by replacing with the appropriate input value or link.

  • Eliminate no-op Mix RGB (except Color Burn, Dodge, Lighten, or enabled Clamp), Invert, RGB Curves and Vector Curves nodes with known zero Factor.

  • Les nodes Shader Eliminate Emission et Background qui n’émettent aucune lumière, et les nodes Add Shader avec un ou deux arguments d’entrée manquants.

  • Eliminate Bump avec entrée Height constante, en utilisant à la place son entrée Normal ou Geometry Normal.

  • Combiner plusieurs copies du même node avec les mêmes entrées en une seule instance.

Au final, tout node qui se termine sans être connecté directement ou indirectement au node output est supprimé.

Optimisations d’exécution

Pendant l’exécution des shaders, une optimisation spéciale est appliquée aux nodes Mix Shader. Si Factor est à 0 ou 1, tous les nodes qui sont uniquement atteignables via la branche inutilisée du mélange ne sont pas évalués.

Ceci peut substantiellement réduire le coût de performance de la combinaison de nombreux matériaux dans un Shader avec une entrée color, texture ou autre entrée utilisée comme interrupteur.

Open Shading Language

Si Open Shading Language est choisi comme back-end de rendu, les nodes shaders sont traduits en code OSL et ensuite compilés et exécutés par OSL. Dans le processus il applique son propre vaste ensemble d’optimisations, à la fois lors de la compilation et lors de l’exécution.

Open Shading Language can optimize out Script nodes if their outputs are unused or constant, even if their OSL shaders have side effects like debug tracing and message passing, which may be confusing. For that reason message passing with setmessage and getmessage should generally not be used for passing information forward in the graph; explicitly passing information through sockets should be preferred.