RenderMan поддерживает большое количество предопределенных переменных для шейдеров поверхности, освещения, объема, сдвига и изображений.
Язык шейдеров OpenGL содержит встроенные переменные, аналогичные некоторым состояниям OpenGL, часть из них по смыслу похожа на переменные, определенные в RenderMan. Так как RenderMan используется в основном в анимации, в нем есть встроенные переменные для отсчета времени. В языке шейдеров OpenGL
Сравнение языков программирования
таких переменных нет, но существует возможность передавать нужные значения в шейдеры через uniform-переменные.
И все же эти два языка имеют много общего. Язык шейдеров OpenGL может даже рассматриваться как некое ответвление языка шейдеров RenderMan. Типы переменных uniform и varying были придуманы для RenderMan и затем позаимствованы для языка шейдеров OpenGL. Выражения, приоритетность операторов в обоих языках очень похожи на используемые в языке С. Ключевые слова i f, el se, while, for, break, return в них совпадают. Список встроенных математических функций языка шейдеров OpenGL практически совпадает с таким же списком языка шейдеров RenderMan.
17.3. Язык OpenGL Shader (ISL)
Язык OpenGL Shader является некоммерческим и его можно загрузить с веб-сайта компании SGL Версия 3.0 этого пакета совместима с IRIX 6.5 или выше и с RedHat Linux 8.0. OpenGL Shader определяет и язык шейдеров (интерактивный язык шейдеров, или ISL), и набор функций, с помощью которых можно определять шейдеры и использовать их для рендеринга. Этот набор функций стал частью продуктов SGI, таких как SGI OpenGL Performer и SGI OpenGL Volumizer.
Основное преимущество OpenGL Shader в том, что OpenGL API можно использовать как язык ассемблера для выполнения программируемых шейдеров (рис. 17.2). Если графическое аппаратное обеспечение позволяет использовать больше возможностей (например, многотекстурность и нрограммируемость на уровне фрагментов), то считается, что язык ассемблера является более мощным. Последовательность выражений в шейдере ISL может затем транслироваться в один или больше проходов рендеринга. На каждом проходе может происходить обработка геометрической информации (операции над вершинами, фрагментами, растеризация), или копирование (копируется часть буфера кадров), или копирование текстуры (часть буфера кадров копируется в текстуру для операций, выполняемых раздельно с каждым пикселом). Для определения тина прохода последовательности команд и уменьшения количества проходов используется оптимизация компилятора. Текущая версия OpenGL Shader оптимизирована под многие графические ускорители и платформы и позволяет для каждой из них уменьшать количество проходов.