Шейдеры
Коротко: Шейдер — это небольшая программа, выполняемая на видеокарте и определяющая, как отображаются геометрия и пиксели: положение, цвет, свет, тени и эффекты поверхности.
Подробнее: Видеокарта устроена так, чтобы одновременно выполнять тысячи небольших вычислений. Шейдеры — это и есть эти вычисления: для каждой вершины или пикселя выполняется одна и та же программа с разными данными. Это называется параллельной обработкой.
Подробности
Важные виды:
| Шейдер | Задача |
|---|---|
| Вершинный шейдер | Обрабатывает каждую вершину модели: положение в пространстве, смещение, анимация |
| Фрагментный/пиксельный шейдер | Вычисляет цвет каждого пикселя: текстура, свет, отражение, прозрачность |
| Геометрический/тесселяционный шейдер | Создаёт или уточняет геометрию (больше треугольников из немногих) |
| Вычислительный шейдер (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-моделирование