Шейдером в широком смысле называется программа для визуального определения поверхности объекта. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражения и преломления, затемнения, смещения поверхности и эффекты пост-обработки.
Изначально шейдеры поддерживались исключительно программно, после чего получили аппаратную поддержку в виде Shader-блоков и ускорения DirectX и OpenGL на видеокартах. В целом, шейдеры добавили к графическому конвейеру множество новых возможностей по трансформации и освещению вершин и индивидуальной обработке пикселей так, как этого хотят разработчики каждого конкретного приложения.
Выделяют следующие виды шейдеров:
Вершинные шейдеры - это программы, выполняемые видеочипами, которые производят математические операции с вершинами (vertex, из которых состоят 3D объекты в играх), иначе говоря, они предоставляют возможность выполнять программируемые алгоритмы по изменению параметров вершин и их освещению (T&L - Transform & Lighting). Каждая вершина определяется несколькими переменными, например, положение вершины в 3D пространстве определяется координатами: x, y и z. Вершины также могут быть описаны характеристиками цвета, текстурными координатами и т.п. Вершинные шейдеры, в зависимости от алгоритмов, изменяют эти данные в процессе своей работы, например, вычисляя и записывая новые координаты и/или цвет. То есть, входные данные вершинного шейдера - данные об одной вершине геометрической модели, которая в данный момент обрабатывается. Обычно это координаты в пространстве, нормаль, компоненты цвета и текстурные координаты. Результирующие данные выполняемой программы служат входными для дальнейшей части конвейера, растеризатор делает линейную интерполяцию входных данных для поверхности треугольника и для каждого пикселя исполняет соответствующий пиксельный шейдер. Очень простой и грубый (но наглядный, надеюсь) пример: вершинный шейдер позволяет взять 3D объект красной сферы и вершинным шейдером сделать из него зеленый куб :).
Деформация объектов. Как самый явный и эффектный пример - создание реалистичных волн в динамике.
Анимация объектов. Например, травы и деревьев.
Реализация Скининга (skinning) для скелетной анимации персонажа. Применяется практически во всех 3d играх.
Toon shading/Cel shading. Используется в некоторых играх для создания эффекта "мультяшного" изображения.
Имитация ткани (Cloth Simulation) - для имитации поведения подобных ткани материалов.
Пиксельные шейдеры - это программы, выполняемые видеочипом во время растеризации для каждого пикселя изображения, они производят выборку из текстур и/или математические операции над цветом и значением глубины (Z-buffer) пикселей. Все инструкции пиксельного шейдера выполняются попиксельно, после того, как операции с трансформированием и освещением геометрии завершены. Пиксельный шейдер в итоге своей работы выдает конечное значение цвета пикселя и Z-значение для последующего этапа графического конвейера, блендинга. Наиболее простой пример пиксельного шейдера, который можно привести: банальное мультитекстурирование, просто смешение двух текстур (diffuse и lightmap, например) и наложение результата вычисления на пиксель.
Мультитекстурирование. Использование нескольких слоев текстур (+colormap, detailmap, lightmap и т.д.).
Попиксельное освещение. Bump mapping. Normal mapping.
Постобработка кадра. Все эти эффекты Bloom, Depth of Field, Motion Blur...
Процедурные текстуры, такие, как текстура дерева или мрамора.
Геометрический шейдер, в отличие от вершинного, способен обработать не только одну вершину, но и целый примитив. Это может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (adjacency) может быть обработано до шести вершин для треугольного примитива. Кроме того, геометрический шейдер способен генерировать примитивы «на лету», не задействуя при этом центральный процессор.
Читайте другие лекции курса «Основы 3D графики»:
Шейдеры | Процедурные текстуры | Маппинг | Level Of Detail и MIP mapping | Фильтрация текстур | Сглаживание | Постобработка | HDR и Tone Mapping | Bloom и Motion Blur | Depth Of Field