RenderMan Shading Language (abrégé en RSL, en français langage d'ombrage RenderMan) est un composant de RenderMan Interface Specification qui est utilisé pour définir des shaders. La syntaxe du langage est de type C.
Un shader écrit en RSL peut être utilisé sans modification sur n'importe quel moteur de rendu 3D conforme à RenderMan, tel que PhotoRealistic RenderMan de Pixar, 3Delight (en) de DNA Research, Air de Sitexgraphics ou une solution open source telle que Pixie (en) ou Aqsis (en).
RenderMan Shading Language définit des fonctions autonomes et cinq types de shaders : shaders de surface, de lumière, de volume, imageur et de déplacement.
Un exemple de shader de surface qui définit une surface métallique est :
surface metal (float Ka = 1; float Ks = 1; float roughness = 0.1;)
{
normal Nf = faceforward (normalize(N), I);
vector V = - normalize (I);
Oi = Os;
Ci = Os * Cs * (Ka * ambient() + Ks * specular (Nf, V, roughness));
}
Les shaders réalisent leur travail en lisant en en écrivant des variables spéciales telles que Cs (couleur de surface), N (normale en un point donné) et Ci (couleur de surface finale). Les arguments des shaders sont des paramètres globaux qui sont attachés aux objets du modèle (et donc un shader de métal peut être utilisé pour différents métaux). Les shaders n'ont pas de valeur de retour, mais des fonctions peuvent être définies, qui prennent des arguments en entrée et retournent une valeur. Par exemple, la fonction suivante calcule la longueur d'un vecteur avec l'opérateur produit scalaire "." :
float length (vector v) {
return sqrt (v . v); /* . is a dot product */
}