Renderman Shading Language (сокращенно RSL) является компонентом спецификации интерфейса RenderMan и используется для определения шейдеров . Синтаксис языка — C-подобный .
Шейдер, написанный на RSL, можно использовать без изменений в любом рендерере, совместимом с RenderMan, например, PhotoRealistic RenderMan от Pixar, 3Delight от DNA Research , Air от Sitexgraphics или в решении с открытым исходным кодом, например, Pixie или Aqsis .
Язык шейдеров RenderMan определяет автономные функции и пять типов шейдеров: поверхностные, световые, объемные, шейдеры изображений и шейдеры смещения.
Пример поверхностного шейдера, определяющего металлическую поверхность:
поверхность металла ( float Ka = 1 ; float Ks = 1 ; float шероховатость = 0,1 ;) { нормаль Nf = лицом вперед ( нормализовать ( N ), I ); вектор V = - нормализовать ( I ); Oi = Os ; Ci = Os * Cs * ( Ka * окружающий () + Ks * зеркальный ( Nf , V , шероховатость )); }
Шейдеры выражают свою работу посредством чтения и записи специальных переменных, таких как Cs (цвет поверхности), N (нормаль в заданной точке) и Ci (конечный цвет поверхности). Аргументы шейдеров — это глобальные параметры, которые прикреплены к объектам модели (поэтому один шейдер металла может использоваться для разных металлов и т. д.). Шейдеры не имеют возвращаемых значений, но можно определить функции, которые принимают аргументы и возвращают значение. Например, следующая функция вычисляет длину вектора с помощью оператора скалярного произведения ".":
float length ( vector v ) { return sqrt ( v . v ); /* . — скалярное произведение */ }