Nodes Shader

Cycles applies a number of shader node optimizations both at compile time and run-time. By exploiting them it is possible to design complicated « Uber Shader » style node groups that incur minimal render time overhead for unused features.

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.

  • Éliminerles nodes Shader Emission et Background qui n’émettent aucune lumière, et ajouter des nodes Shader avec un ou les deux arguments d’entrée manquants.

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

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