В июне 1999 г. лаборатория компьютерной графики в Стэнфорде начала работу над определением языка шейдеров реального времени, код которого мог бы выполняться на графическом акселераторе. Этот язык был назван «Стэнфорд-ский язык шейдеров реального времени». Результаты были показаны в 2001 г.

Сравнение языков программирования

Язык тендеров OpenGL, HLSL от Microsoft, Cg от NVIDIA являются примерами коммерчески жизнеспособных высокоуровневых языков шейдеров реального времени. Доклад о языке, который позже и стал языком шейдеров OpenGL, опубликован в октябре 2001 г. Дэйвом Болдуином. Спецификация Cg была опубликована в июне 2002 г., а спецификация HLSL - в ноябре 2002 г. как часть бета-версии DirectX 9.0 SDK. При этом происходил и некоторый обмен идеями между компаниями, так что языки в чем-то похожи.

В следующих разделах сравним язык шейдеров OpenGL с другими коммерческими высокоуровневыми языками шейдеров.

17.2. Язык RenderMan

В 1998 г., после нескольких лет разработки, компания Pixar опубликовала спецификацию языка RenderMan (рис. 17.1). Это был интерфейс, в котором определялись формат передаваемых сообщений, соглашения и правила сообщения программ моделирования и программ рендеринга, конечной целью применения которого является получение фотореалистичных изображений. Эта спецификация сразу нашла при-мененне, и очень успешное, в мультипликации. Интерфейс RenderMan использовался для создания спецэффектов в фильмах «Парк юрского периода», «Звездные войны. Эпизод 1», «Властелин колец: две башни» и др., а также в мультфильмах «В поисках Немо», «Сказка об игрушках», «Жизнь насекомых» и «Корпорация монстров».

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


⇐ Предыдущая| |Следующая ⇒