Найти тему
PC_light _

Что такое шейдеры? Откуда и зачем они взялись?

Наверняка, многие из вас сталкивались с понятием шейдера и не понимали, что оно значит. Давайте же разберёмся, что такое шейдер.

Немного истории

Начнём с того, что видеокарты (GPU) выполняют функцию отрисовки кадра, то есть переводят геометрические данные каждого объекта сцены в пиксели, проще говоря создают картинку исходя из данных. Изначально видеокарты могли выполнять только определённые, зашитые в них с самого начала аппаратные алгоритмы, из-за чего нельзя было добиться высококачественных эффектов, однако со временем появились видеокарты, которые можно было программировать. Так и появились шейдеры, программы для видеокарт, реализующие растеризовку(перевод данных в картинку). 

Шейдер воды применённый на сфере
Шейдер воды применённый на сфере

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

Шейдеры делятся на три типа, в зависимости от того, какой процессор их исполняет:
• Вершинные
• Геометрические
• Пиксельные (фрагментные)

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

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

Геометрические шейдеры

Геометрический шейдер, в отличие от вершинного, способен обработать не только одну вершину, но и целый примитив. Примитивом может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах для треугольного примитива может быть обработано до шести вершин. Геометрический шейдер способен генерировать примитивы «на лету» (не задействуя при этом центральный процессор).

Пиксельные (фрагментные) шейдеры

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