Термин в Энциклопедическом Фонде

Шейдер

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

Полноценная поддержка шейдеров появилась в видеоускорителях GeForce 3, но зачатки были реализованы ещё в GeForce256 (в виде Register Combiners).

Типы шейдеров:

Вершинный шейдер (или вершинная программа в OpenGL) - программа для вершинной шейдерной стадии конвейера, обрабатывающая вершинные данные. Вершинный шейдер может описывать, например, трансформацию вершин из объектного пространства в пространство камеры. Вершинный шейдер выполняется отдельно для каждой вершины.

Пиксельный шейдер (или фрагментная программа в OpenGL) - программа для пиксельной шейдерной стадии конвейера. Пиксельный шейдер выполняется для каждого фрагмента растеризованной геометрии. Обычно пиксельный шейдер занимается закраской геометрического объекта - наложение текстур, освещение, и наложение разных текстурных эффектов, таких как отражение, преломление, туман, Bump Mapping и пр. Пиксельные шейдеры также используются для пост-эффектов.

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

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

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

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

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

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

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

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

NVIDIA Gelato представляет собой оригинальную гибридную систему рендеринга изображений и анимации трехмерных сцен и объектов, использующую для расчетов центральные процессоры и аппаратные возможности профессиональных видеокарт серии Quadro FX.
Основополагающим принципом, которого неукоснительно придерживаются разработчики, является бескомпромиссное качество финального изображения, не ограниченное ничем, в том числе - современными возможностями видеокарт. Как производственный инструмент, способный создавать конечный продукт высокого качества, Gelato предназначен для профессионального использования в таких областях как кино, телевидение, промышленный дизайн и архитектурные визуализации.

Open Shading Language.

Open Shading Language (OSL) - представляет собой небольшой, но богатый язык для программируемых шейдеров в развитых рендерах и других приложениях, идеально подходит для описывающих материалов, света, перемещения и получения изображения.
OSL - был разработан Sony Pictures Imageworks для использования в своем внутреннем рендере и используется для анимационных фильмов и визуальных эффектов.
OSL используется в пакете для создания трёхмерной компьютерной графики Blender.

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

Шейдерный язык OpenGL
Шейдерный язык OpenGL носит название GLSL (The OpenGL Shading Language). GLSL основан на языке ANSI C. Большинство возможностей языка ANSI C сохранено, к ним добавлены векторные и матричные типы данных, часто применяющиеся при работе с трехмерной графикой. В контексте GLSL шейдером называется независимо компилируемая единица, написанная на этом языке. Программой называется набор откомпилированных шейдеров, связанных вместе.

Шейдерный язык Cg.
Разработан nVidia совместно с Microsoft (такой же по сути язык от Microsoft называется HLSL, включён в DirectX 9). Cg расшифровывается как C for Graphics. Язык действительно очень похож на C, он использует схожие типы (int, float, а также специальный 16-битный тип с плавающей запятой - half). Поддерживаются функции и структуры. Язык обладает своеобразными оптимизациями в виде упакованных массивов (packed arrays) - объявления типа "float a" и "float4 a" в нём соответствуют разным типам. Второе объявление и есть упакованный массив, операции с упакованным массивом выполняются быстрее, чем с обычными. Несмотря на то, что язык разработан nVidia, он без проблем работает и с видеокартами ATI. Однако следует учесть, что все шейдерные программы обладают своими особенностями, о которых можно узнать из специализированных источников.

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

Низкоуровневый шейдерный язык DirectX (DirectX ASM)
По синтаксису сходен с Ассемблером. Существует несколько версий, различающихся по набору команд, а также по требуемому оборудованию. Существует разделение на вершинные (vertex) и пиксельные (pixel) шейдеры, которые различаются.

Используемые источники
1. ru.wikipedia.org/wiki/
2. http://www.twodee.org/weblog/?p=805
3. http://affirmaconsulting.wordpress.com/2010/12/30/tool-for-developing-hlsl-pixel-shaders-for-wpf-and-silverlight/
4. http://3dgraphics.ucoz.ru/index/shader_shejder/0-32
5. http://www.thg.ru/graphic/20040414/geforce_6800-03.html
Энциклопедический Фонд