Uk/Shader: Difference between revisions
mNo edit summary |
m (obsolete language category) |
||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LanguageBar|title = '''''Шейдери'''''}} | ||
{{see also|[[:Category:Shaders]]}} | |||
{{back|SDK Docs | |||
{{back|Category:Modding:uk| | {{back|SDK Docs/uk|'''''Документація Source SDK'''''}} | ||
{{back|Category:Modding:uk|Категорія '''''Модоробство'''''}} | |||
{{back|Category:Material_System:uk|Категорії '''''Система матеріалів'''''}} | |||
'''Шейдер'''<sup>(en - Shader)</sup> — програма для одного зі ступенів графічного конвеєра, що використовується в тривимірній графіці для визначення остаточних параметрів об'єкта чи зображення. {{Source|4}} використовує шейдери для всього в 3D-світі. | '''Шейдер'''<sup>(en - Shader)</sup> — програма для одного зі ступенів графічного конвеєра, що використовується в тривимірній графіці для визначення остаточних параметрів об'єкта чи зображення. {{Source|4}} використовує шейдери для всього в 3D-світі. | ||
З шейдерами маніпулюють параметрами, що зберігаються у файлах | З шейдерами маніпулюють параметрами, що зберігаються у файлах {{L|material|матеріалів}}<span style="color:#FFFF00"><sup>en!</sup></span>. Хоча найпоширеніші досить прості, також існують дуже складні для обробки ефектів, таких як затінення в реальному часі, освітлення та заломлення світла. | ||
''Якщо шейдер відсутній на матеріалі чи моделі, поверхня відображатиметься як білий каркас. Рожеві та чорні квадрати не є відсутністю шейдера, а натомість є відсутністю самого матеріалу.'' | ''Якщо шейдер відсутній на матеріалі чи моделі, поверхня відображатиметься як білий каркас. Рожеві та чорні квадрати не є відсутністю шейдера, а натомість є відсутністю самого матеріалу.'' | ||
==Типи== | ==Типи== | ||
Існує два варіанти шейдерів, ''піксельні шейдери'' та ''вершинні шейдери'', кожен з яких виконує окреме завдання в конвеєрі візуалізації. Шейдери формують заміну конвеєру фіксованих функцій і дозволяють розробникам краще контролювати вихідні дані рендеринґу, надаючи можливість динамічно змінювати пікселі та вершини. SDK містить багато | Існує два варіанти шейдерів, ''піксельні шейдери'' та ''вершинні шейдери'', кожен з яких виконує окреме завдання в конвеєрі візуалізації. Шейдери формують заміну конвеєру фіксованих функцій і дозволяють розробникам краще контролювати вихідні дані рендеринґу, надаючи можливість динамічно змінювати пікселі та вершини. SDK містить багато {{LCategory|Shaders|типів шейдерів}}<span style="color:#FFFF00"><sup>en!</sup></span>. | ||
==Мови шейдерів== | ==Мови шейдерів== | ||
Наразі існує три основні мови шейдерів: '' | Наразі існує три основні мови шейдерів: ''{{L|HLSL|High Level Shader Language (HLSL)}}<span style="color:#FFFF00"><sup>en!</sup></span>, {{L|CG|C for Graphics (Cg)}}<span style="color:#FFFF00"><sup>en!</sup></span> та [[Wikipedia:GLSL|OpenGL Shading Language (GLSL)]]''<span style="color:#FFFF00"><sup>en!</sup></span>. {{Source|4}} використовує засновані на HLSL шейдери. Однак Cg настільки схожий, що більшість шейдерів Cg можна швидко та легко перенести на HLSL. | ||
==Моделі шейдерів== | ==Моделі шейдерів== | ||
Line 24: | Line 27: | ||
Якщо ви хочете дізнатися більше про детальні характеристики різних моделей шейдерів, прочитайте [[Wikipedia:High Level Shader Language|Статтю на Вікіпедії]]<span style="color:#FFFF00"><sup>en!</sup></span>. | Якщо ви хочете дізнатися більше про детальні характеристики різних моделей шейдерів, прочитайте [[Wikipedia:High Level Shader Language|Статтю на Вікіпедії]]<span style="color:#FFFF00"><sup>en!</sup></span>. | ||
Інформацію про створення шейдерів для використання в системі {{Source|4}} дивіться в | Інформацію про створення шейдерів для використання в системі {{Source|4}} дивіться в {{L|Shader Authoring|Створення шейдерів}}<span style="color:#FFFF00"><sup>en!</sup></span>. | ||
==Вершинні шейдери (''Vertex shaders'')== | ==Вершинні шейдери (''Vertex shaders'')== | ||
Line 98: | Line 101: | ||
{{Source|4}} надає приклад цієї форми шейдера у файлах постобробки <code>(sdk_postprocess.cpp, sdk_postprocess_vs20.fxc, та sdk_postprocess_ps20.fxc)</code> | {{Source|4}} надає приклад цієї форми шейдера у файлах постобробки <code>(sdk_postprocess.cpp, sdk_postprocess_vs20.fxc, та sdk_postprocess_ps20.fxc)</code> | ||
Розширені шейдери пост обробки, як-от шейдери Bloom і Motion Blur, що входять до {{Source|4}}, також можуть потребувати цілі рендеринґу. Щоб отримати додаткові відомості про інтеґрацію шейдера постобрабки з модом, дивіться | Розширені шейдери пост обробки, як-от шейдери Bloom і Motion Blur, що входять до {{Source|4}}, також можуть потребувати цілі рендеринґу. Щоб отримати додаткові відомості про інтеґрацію шейдера постобрабки з модом, дивіться {{L|Custom_Postprocessing_Effects|Спеціальні ефекти постобробки}}<span style="color:#FFFF00"><sup>en!</sup></span>. | ||
===Пооб'єктний шейдер (''Per-Object shader'')=== | ===Пооб'єктний шейдер (''Per-Object shader'')=== | ||
Пооб’єктний шейдер у системі вихідного коду використовується для будь-якого об’єкта з посиланням на шейдер у відповідному файлі | Пооб’єктний шейдер у системі вихідного коду використовується для будь-якого об’єкта з посиланням на шейдер у відповідному файлі {{L|VMT|.vmt}}, наприклад моделі чи малюнку. Пооб'єктний шейдер може бути використаний для створення заломлюючого матеріалу, динамічної зміни вершин моделі або інших розширених ефектів візуалізації. | ||
{{Source|4}} надає приклад пооб'єктного шейдеру у файлах карти освітлення ( <code>sdk_lightmap.cpp</code>, <code>sdk_lightmap_vs20.fxc</code>, and <code>sdk_lightmap_ps20.fxc</code>) | {{Source|4}} надає приклад пооб'єктного шейдеру у файлах карти освітлення ( <code>sdk_lightmap.cpp</code>, <code>sdk_lightmap_vs20.fxc</code>, and <code>sdk_lightmap_ps20.fxc</code>) | ||
Line 115: | Line 118: | ||
* [http://www.moddb.com/games/half-life-2/tutorials/post-process-shader Post-Process Shader Tutorial from Wraiyth] | * [http://www.moddb.com/games/half-life-2/tutorials/post-process-shader Post-Process Shader Tutorial from Wraiyth] | ||
{{ACategory| Glossary}} | |||
{{ACategory| Programming}} | |||
{{ACategory| Shaders}} | |||
{{ACategory| Technical}} | |||
{{ACategory| Material System}} | |||
{{ACategory| Modding}} | |||
{{ACategory|Material_System}} |
Latest revision as of 04:09, 22 August 2024
Шейдер(en - Shader) — програма для одного зі ступенів графічного конвеєра, що використовується в тривимірній графіці для визначення остаточних параметрів об'єкта чи зображення. Source використовує шейдери для всього в 3D-світі.
З шейдерами маніпулюють параметрами, що зберігаються у файлах матеріалівen!. Хоча найпоширеніші досить прості, також існують дуже складні для обробки ефектів, таких як затінення в реальному часі, освітлення та заломлення світла.
Якщо шейдер відсутній на матеріалі чи моделі, поверхня відображатиметься як білий каркас. Рожеві та чорні квадрати не є відсутністю шейдера, а натомість є відсутністю самого матеріалу.
Типи
Існує два варіанти шейдерів, піксельні шейдери та вершинні шейдери, кожен з яких виконує окреме завдання в конвеєрі візуалізації. Шейдери формують заміну конвеєру фіксованих функцій і дозволяють розробникам краще контролювати вихідні дані рендеринґу, надаючи можливість динамічно змінювати пікселі та вершини. SDK містить багато типів шейдерівen!.
Мови шейдерів
Наразі існує три основні мови шейдерів: High Level Shader Language (HLSL)en!, C for Graphics (Cg)en! та OpenGL Shading Language (GLSL)en!. Source використовує засновані на HLSL шейдери. Однак Cg настільки схожий, що більшість шейдерів Cg можна швидко та легко перенести на HLSL.
Моделі шейдерів
Модель шейдера визначає, як розширені методи шейдерування можуть використовуватися на графічній карті. Це заважає старішим графічним картам фізично розпізнавати нові методи затінення.
Новітні версії Source підтримують Shader Model 2.0 (включно з Pixel Shader 2.0b) та Shader Model 3.0.

togl
. Ви повинні планувати створення версії SM2.0b своїх шейдерів, якщо плануєте підтримувати ці системи.Створюючи шейдери для новіших графічних карт, важливо пам’ятати про підтримку шейдерів зі старими картами, інакше ви швидко обмежите специфікації своєї гри. Старіші карти можуть вимагати вказівки так званих «резервних шейдерів», де буде використано резервний шейдер (з використанням старішої моделі шейдера), якщо новий шейдер виходить з ладу.
Якщо ви хочете дізнатися більше про детальні характеристики різних моделей шейдерів, прочитайте Статтю на Вікіпедіїen!.
Інформацію про створення шейдерів для використання в системі Source дивіться в Створення шейдерівen!.
Вершинні шейдери (Vertex shaders)
Вершинні шейдери застосовуються для кожної вершини, що запускається в програмованому конвеєрі. Основна мета — перетворити геометрію на координати екранного простору, щоб піксельний шейдер міг растеризувати зображення. Вершинні шейдери можуть змінювати ці позиційні координати для виконання деформації сітки. Вони також можуть отримувати додаткову інформацію від сітки, включаючи нормалі, дотичні та координати текстур. Потім вершинний шейдер записує у вихідні регістри; записані значення потім інтерполюються по вершинах у піксельних шейдерах. Вершинні шейдери не можуть створювати вершини.
Приклад вершинного шейдера, готового до використання в Source, наведено нижче.
Приклад вершинного шейдера
Це наскрізний шейдер, оскільки він не вносить серйозних змін у дані вершини, натомість просто передає дані на етап піксельного шейдера.
Піксельні шейдери (Pixel shaders)
Піксельні шейдери застосовуються до кожного пікселя, відображеного на екрані. Піксельний шейдер очікує введення від інтерпольованих значень вершин, які потім використовує для растеризації зображення. Піксельні шейдери можуть створити величезний діапазон ефектів, пов’язаних із кольором окремих пікселів, таких як заломлення світла, попіксельне освітлення або відображення.
Нижче наведено приклад піксельного шейдера, готового до використання в Source.
Приклад піксельного шейдера
Наведений нижче піксельний шейдер призначений для використання як шейдер після обробки та створює ефект відтінків сірого.
Застосування шейдерів у
Source
Source забезпечує дві окремі форми шейдерів, Postprocess і Per-Object, більшість ефектів і матеріалів, що використовуються в
Source, значною мірою покладаються на компоненти піксельних шейдерів.
Постобробка (Postprocess)
Шейдер постобробки - звичайний піксельний шейдер, що працює на кваді та відображається на весь екран. Квад тексурований копією з фрейм-буфера, піксельний шейдер може замінити вихідний рендер, щоб створити різноманітні ефекти, наприклад, базова модифікація кольору для більш просунутих процесів, таких як Motion Blur та Bloom.

sdk_bloom.cpp
та sdk_bloom.ps20.fxc
визначає один можливий шейдер, який можна використовувати як альтернативний приклад Source надає приклад цієї форми шейдера у файлах постобробки
(sdk_postprocess.cpp, sdk_postprocess_vs20.fxc, та sdk_postprocess_ps20.fxc)
Розширені шейдери пост обробки, як-от шейдери Bloom і Motion Blur, що входять до Source, також можуть потребувати цілі рендеринґу. Щоб отримати додаткові відомості про інтеґрацію шейдера постобрабки з модом, дивіться Спеціальні ефекти постобробкиen!.
Пооб'єктний шейдер (Per-Object shader)
Пооб’єктний шейдер у системі вихідного коду використовується для будь-якого об’єкта з посиланням на шейдер у відповідному файлі .vmt , наприклад моделі чи малюнку. Пооб'єктний шейдер може бути використаний для створення заломлюючого матеріалу, динамічної зміни вершин моделі або інших розширених ефектів візуалізації.
Source надає приклад пооб'єктного шейдеру у файлах карти освітлення (
sdk_lightmap.cpp
, sdk_lightmap_vs20.fxc
, and sdk_lightmap_ps20.fxc
)