Одно из основных различий между языком шейдеров OpenGL и RenderMan - в том, что RenderMan полностью определяет интерфейс между программами моделирования и рендеринга, без каких-либо частей «стандартной функциональности», и не имеет никакого отношения к OpenGL. RenderMan включает поддержку описания геометрических примитивов, иерархическое моделирование, наложение геометрических преобразований, параметры камеры, затенения и т. д. Многие из этих возможностей уже реализованы в OpenGL, так что нет необходимости ссылаться на них при описании языка шейдеров OpenGL.

Самая интересная часть RenderMan называется языком шейдеров RenderMan. Этот язык позволяет описать полностью произвольные шейдеры, которые можно передавать для рендеринга через интерфейс RenderMan. Этот язык также основан на языке программирования С, поэтому немного похож и на язык шейдеров OpenGL. В целом, интерфейс RenderMan напоминает OpenGL, а язык шейдеров RenderMan - язык шейдеров OpenGL. И интерфейс RenderMan, и OpenGL позволяют определять характеристики сцены (параметры обзора, примитивы для рендеринга и т. д.). И в одном и в другом можно вычислять цвет, координаты, прозрачность и другие характеристики точек сцены.

Одно из основных различий между языками OpenGL и RenderMan - в степени абстракции. Язык шейдеров OpenGL спроектирован так, чтобы максимально просто «вписаться» в современное графическое оборудование, поэтому в нем есть два вида шейдеров: вершинные и фрагментные. Язык шейдеров RenderMan служит, прежде всего, для создания высококачественных изображений, поэтому в нем целых пять видов шейдеров: освещения, сдвига, поверхности, объема и работы с изображением. Типы шейдеров RenderMan идеально подходят для создания удачных реализаций рендеринга, но не очень хорошо совмещаются с современным оборудованием, спроектированным для поддержки интерактивного рендеринга на OpenGL. В результате практически все реализации RenderMan являются программными, а не аппаратными; однако попытки ускорить работу RenderMan предпринимались [12]. Язык шейдеров OpenGL с самого начала проектировался для выполнения на графическом оборудовании.

Модель работы языка RenderMan

Рис. 17.1. Модель работы языка RenderMan

В этих двух языках различаются и типы данных. RenderMan поддерживает типы, близкие к предметной области: цвет, точку, нормаль, - в то время как язык шейдеров OpenGL оперирует более абстрактными типами: векторами чисел с плавающей запятой размерностью от 1 до 4. RenderMan оперирует терминами, присущими скорее для графики, - «объект», «мир», «камера», «растр», «экран».

RenderMan поддерживает большое количество предопределенных переменных для шейдеров поверхности, освещения, объема, сдвига и изображений.

Язык шейдеров OpenGL содержит встроенные переменные, аналогичные некоторым состояниям OpenGL, часть из них по смыслу похожа на переменные, определенные в RenderMan. Так как RenderMan используется в основном в анимации, в нем есть встроенные переменные для отсчета времени. В языке шейдеров OpenGL таких переменных нет, но существует возможность передавать нужные значения в шейдеры через uniform-переменные.


⇐ вернуться назад | | далее ⇒