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