Uk/Shader

Шейдер(en - Shader) — програма для одного зі ступенів графічного конвеєра, що використовується в тривимірній графіці для визначення остаточних параметрів об'єкта чи зображення. використовує шейдери для всього в 3D-світі.
З шейдерами маніпулюють параметрами, що зберігаються у файлах en!. Хоча найпоширеніші досить прості, також існують дуже складні для обробки ефектів, таких як затінення в реальному часі, освітлення та заломлення світла.
Якщо шейдер відсутній на матеріалі чи моделі, поверхня відображатиметься як білий каркас. Рожеві та чорні квадрати не є відсутністю шейдера, а натомість є відсутністю самого матеріалу.
==Типи==
Існує два варіанти шейдерів, піксельні шейдери та вершинні шейдери, кожен з яких виконує окреме завдання в конвеєрі візуалізації. Шейдери формують заміну конвеєру фіксованих функцій і дозволяють розробникам краще контролювати вихідні дані рендеринґу, надаючи можливість динамічно змінювати пікселі та вершини. SDK містить багато en!.
==Мови шейдерів==
Наразі існує три основні мови шейдерів: en!, en! та OpenGL Shading Language (GLSL)en!. використовує засновані на HLSL шейдери. Однак Cg настільки схожий, що більшість шейдерів Cg можна швидко та легко перенести на HLSL.
==Моделі шейдерів==
Модель шейдера визначає, як розширені методи шейдерування можуть використовуватися на графічній карті. Це заважає старішим графічним картам фізично розпізнавати нові методи затінення.
Новітні версії підтримують Shader Model 2.0 (включно з Pixel Shader 2.0b) та Shader Model 3.0. 
Створюючи шейдери для новіших графічних карт, важливо пам’ятати про підтримку шейдерів зі старими картами, інакше ви швидко обмежите специфікації своєї гри. Старіші карти можуть вимагати вказівки так званих «резервних шейдерів», де буде використано резервний шейдер (з використанням старішої моделі шейдера), якщо новий шейдер виходить з ладу.
Якщо ви хочете дізнатися більше про детальні характеристики різних моделей шейдерів, прочитайте Статтю на Вікіпедіїen!.
Інформацію про створення шейдерів для використання в системі дивіться в en!.
==Вершинні шейдери (Vertex shaders)==
Вершинні шейдери застосовуються для кожної вершини, що запускається в програмованому конвеєрі. Основна мета — перетворити геометрію на координати екранного простору, щоб піксельний шейдер міг растеризувати зображення. Вершинні шейдери можуть змінювати ці позиційні координати для виконання деформації сітки. Вони також можуть отримувати додаткову інформацію від сітки, включаючи нормалі, дотичні та координати текстур. Потім вершинний шейдер записує у вихідні регістри; записані значення потім інтерполюються по вершинах у піксельних шейдерах. Вершинні шейдери не можуть створювати вершини.
Приклад вершинного шейдера, готового до використання в , наведено нижче.
===Приклад вершинного шейдера===
Це наскрізний шейдер, оскільки він не вносить серйозних змін у дані вершини, натомість просто передає дані на етап піксельного шейдера.
==Піксельні шейдери (Pixel shaders)==
Піксельні шейдери застосовуються до кожного пікселя, відображеного на екрані. Піксельний шейдер очікує введення від інтерпольованих значень вершин, які потім використовує для растеризації зображення. Піксельні шейдери можуть створити величезний діапазон ефектів, пов’язаних із кольором окремих пікселів, таких як заломлення світла, попіксельне освітлення або відображення.
Нижче наведено приклад піксельного шейдера, готового до використання в .
===Приклад піксельного шейдера===
Наведений нижче піксельний шейдер призначений для використання як шейдер після обробки та створює ефект відтінків сірого.
==Застосування шейдерів у ==
 забезпечує дві окремі форми шейдерів, Postprocess і Per-Object, більшість ефектів і матеріалів, що використовуються в , значною мірою покладаються на компоненти піксельних шейдерів.
===Постобробка (Postprocess)===
Шейдер постобробки - звичайний піксельний шейдер, що працює на кваді та відображається на весь екран. Квад тексурований копією з фрейм-буфера, піксельний шейдер може замінити вихідний рендер, щоб створити різноманітні ефекти, наприклад, базова модифікація кольору для більш просунутих процесів, таких як Motion Blur та Bloom.
 надає приклад цієї форми шейдера у файлах постобробки (sdk_postprocess.cpp, sdk_postprocess_vs20.fxc, та sdk_postprocess_ps20.fxc)
Розширені шейдери пост обробки, як-от шейдери Bloom і Motion Blur, що входять до , також можуть потребувати цілі рендеринґу. Щоб отримати додаткові відомості про інтеґрацію шейдера постобрабки з модом, дивіться en!.
===Пооб'єктний шейдер (Per-Object shader)===
Пооб’єктний шейдер у системі вихідного коду використовується для будь-якого об’єкта з посиланням на шейдер у відповідному файлі , наприклад моделі чи малюнку. Пооб'єктний шейдер може бути використаний для створення заломлюючого матеріалу, динамічної зміни вершин моделі або інших розширених ефектів візуалізації.
 надає приклад пооб'єктного шейдеру у файлах карти освітлення ( sdk_lightmap.cpp, sdk_lightmap_vs20.fxc, and sdk_lightmap_ps20.fxc)
==Зовнішні посилання==
* A bluffer's guide to Shader Models
* NVIDIA - The Cg tutorial
* NVIDIA - GPU Gems
* NVIDIA - GPU Gems 2
* NVIDIA - GPU Gems 3
* - a Wikipedia article on the subject.
* Introduction to Shaders Tutorial from Wraiyth
* Post-Process Shader Tutorial from Wraiyth