Поиск
На сайте: 763804 статей, 327745 фото.

Шейдер (программа)

Ше́йдер (англ. Shader) — это программа, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Это может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.

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

Содержание

Шейдерные языки

Впервые использованные в системе RenderMan компании Pixar, шейдеры получали всё большее распространение со снижением цен на компьютеры. Основное преимущество от использования шейдеров — их гибкость, упрощающая и удешевляющая цикл разработки программы, и при том повышающая сложность и достоверность визуализируемых сцен.

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

Профессиональный рендеринг

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

Обработка таких шейдеров обычно ресурсоёмкая задача. Совокупная вычислительная мощность, необходимая для обеспечения их работы, может быть очень велика, так как используется для создания фотореалистичных изображений. Основная часть вычислений при подобной визуализации выполняется большими компьютерными кластерами.

Шейдерный язык RenderMan

Шейдерный язык RenderMan, описанный в Спецификации Интерфейса RenderMan, является фактическим стандартом для профессионального рендеринга. API RenderMan, разработанный Робом Куком, используется во всех работах студии Pixar. Он также является первым из реализованных шейдерных языков.

Шейдерный язык Gelato

Рендеринг в реальном времени

Шейдерный язык OpenGL

Язык прогрммирования Cg

Шейдерные языки DirectX

Низковуровневый шейдерный язык DirectX (DirectX ASM)

По синтаксису сходен с Ассемблером. Существует несколько версий, различающихся по набору команд, а также по требуемому оборудованию. Существует разделение на вертексный(Vertex - "вершина") и пиксельный шейдеры, которые различаются по выполняемым задачам, набору команд, ограничениям. Оперирует над регистрами и константами, представленными четырех компонентыми векторами из чисел с плавающей точкой. Пиксельный и вертексный шейдеры отличаются наличием, обозначением, и функциями специальных регистров, а также набором команд.

вертексный шейдер

Выполняет обработку геометрии - изменяет позицию, текстурные координаты, цвет вершин. Также может выполнять вычислении освещения. Допустимое количество команд может достигать одной-двух сотен. Пример фрагмента кода:
vs.2.0
dcl_position v0
dcl_texcoord v3
m4x4 oPos, v0, c0
mov oT0, v3
<tt/>

пиксельный шейдер

Выполняет обработку цветовых данных, полученных при отрисовке треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено, так, к примеру, в версии 1.4 оно не может быть больше 32. Пример фрагмента кода:
<tt> ps.1.4
texld r0, t0
mul r0, r0, v0

Высокоуровневый шейдерный язык DirectX (HLSL - High Level Shader Language)
Основная статья: HLSL

Является надстройкой над DirectX ASM. По синтаксису сходен с C++, позволяет использовать структуры, процедуры и функции.

Структурные шейдеры реального времени

Вершинные шейдеры

Шейдеры фрагментов

Текстурные шейдеры

Освещение и затенение


Первоначальная версия этой статьи была взята из русской Википедии на условиях лицензии GNU FDL.