EMZETT.
Войти

Шейдеры

Коротко: Шейдер — это небольшая программа, выполняемая на видеокарте и определяющая, как отображаются геометрия и пиксели: положение, цвет, свет, тени и эффекты поверхности.

Подробнее: Видеокарта устроена так, чтобы одновременно выполнять тысячи небольших вычислений. Шейдеры — это и есть эти вычисления: для каждой вершины или пикселя выполняется одна и та же программа с разными данными. Это называется параллельной обработкой.

Подробности

Важные виды:

ШейдерЗадача
Вершинный шейдерОбрабатывает каждую вершину модели: положение в пространстве, смещение, анимация
Фрагментный/пиксельный шейдерВычисляет цвет каждого пикселя: текстура, свет, отражение, прозрачность
Геометрический/тесселяционный шейдерСоздаёт или уточняет геометрию (больше треугольников из немногих)
Вычислительный шейдер (compute)Общие вычисления на GPU (физика, ИИ, фильтры изображений)
Шейдер трассировки лучейРасчёт лучей света для реалистичного освещения

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

Языки: GLSL (OpenGL), HLSL (DirectX, Unity), WGSL (WebGPU), Metal Shading Language (Apple), SPIR-V (Vulkan). Визуально: Shader Graph (Unity), редактор материалов (Unreal).

Пример (фрагментный шейдер GLSL):

void main() {
    // цвет из текстуры, затемнённый в зависимости от света
    vec3 color = texture(tex, uv).rgb * max(dot(normal, lightDir), 0.0);
    output = vec4(color, 1.0);
}

Применение:

  • Освещение, тени, вода, дым, кожа, волосы, туман.
  • Постобработка: размытие (bloom), цветокоррекция, сглаживание.
  • Художественные стили: cel shading (вид комикса), пиксельные шейдеры, эффекты голограммы.
  • Не только игры: кино (шейдеры рендера), вычисления, ИИ.

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

См. также: Игровой движок, Unity, 3D-моделирование