- это, возможно, наиболее известный и распространенный среди других шейдерных языков.

Как мы уже говорили, шейдер HaSL- это программа на С-подобномязыке программирования, описывающая алгоритмически визуальное представление объектов, а если выразиться точнее: описывающая алгоритм расчета интегрированной освещенности и прозрачности для данной точки поверхности геометрического примитива. Для большего удобства в этом языке были сделаны некоторые изменения - например, были введены специальные типы данных, которые описывают цвет и позицию в трехмерном пространстве; синтаксис языка и его стандартная библиотека процедур были упрощены, оптимизированы и дополнены, по сравнению с оригинальным языком С, для работы с такими типами данных; был веден набор глобальных переменных, несущих информацию о цвете источников света, положении и ориентации освещаемого сэмпла и так далее, существенно облегчающих программирование шейдеров.

Простой шейдер на языке SL, реализующий металическую изотропную модель освещения поверхности, будет выглядеть так:

surface metal (float Ка=1, Ks=1, roughness=.1)

{

normal Nf = faceforward(normalize(N), I); vector V = normalize^!) ;

Oi = Os;

Ci = Os * Cs * ( Ka*ambient() + Ks*specular(Nf,V,roughness) );

}

Как можно видеть, любой более или менее сведущий в программировании человек (в особенности знающий язык С) способен достаточно быстро научиться писать данные шейдеры как вручную (многие студии и разработчики все еще предпочитают этот путь), так и с использованием специальных визуальных инструментов разработки шейдеров.

При помощи шейдеров в Renderman можно контролировать не только модель отображения поверхности (это задача для Surface shader’a), но и влиять на ее геометрию (через Displacement shader), управлять поведением источников света (через Light shader), прохождением света через область сцены (через Volume shader) и общим отображением информации в виртуальной камере (через Imager shader):

Работа с шейдерами в SL также упрощена путем введения модели “черного ящика”. В переводе на человеческий язык это означает, что в каждый момент времени наш шейдер имеет дело с одной конкретной точкой в сцене и отвечает на вопрос “Что происходит в данной конкретной точке сцены”? Об этой точке шейдер знает все: где она находится, какой цвет назначен геометрии в этом месте по умолчанию, какими геометрическими параметрами она обладает. Шейдер в такой модели представляет из себя “черный ящик” с некоторым набором “ручек” - вы засовываете исходные параметры в этот ящик, поворачиваете ручки в нужные позиции и получаете готовые данные, и так - для каждой точки в вашей сцене. Есть в данном случае и -'Обратная сторона медали»: в рамках шейдера вы, в общем случае, не имеете возможности обратиться к данным, которые относятся к соседней точке этой же сцены, этого же полигона или шарика.

Где-то там, наверху, сказано, что в стандарте Renderman две основные части? Пардон, оговорился: их-таки три, и на закуску я оставил самое интересное.

Еще одна сторона стандарта, о которой мало кто упоминает: он определяет не только форматы файлов, которые применяются для обмена информацией между системами анимации и моделирования и системой рендеринга, но и набор требований, который позволяет и другим разработчикам создавать различные рендереры, которые могли бы принимать подобные файлы.


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