Що таке шейдери Vertex і Pixel?
Яка різниця між ними? Який з них найкращий?
Що таке шейдери Vertex і Pixel?
Яка різниця між ними? Який з них найкращий?
Відповіді:
Pixel Shader є GPU (Graphic Processing Unit) компонент , який може бути запрограмований для роботи на кожному пікселі основі і піклуватися про речі , як освітлення і рельєфне текстурування.
Вершинних шейдеров також компонент графічного процесора і також запрограмований з допомогою спеціального складально-подібного мови, як піксельних шейдеров, але орієнтовані на геометрію сцени і може робити такі речі , як додавання мультяшних силуету краю до об'єктів і т.д.
І той, і інший не кращий від іншого, кожен з них має своє конкретне використання. Більшість сучасних графічних карт, що підтримують DirectX 9 або вище, включають ці можливості.
В Інтернеті є кілька ресурсів для кращого розуміння того, як використовувати ці речі. NVidia та ATI - особливо хороші ресурси для документів на цю тему.
DirectX 10 та OpenGL 3 представили Geometry Shader як третій тип.
При отриманні замовлення конвеєра -
Вершинний шейдер - бере одну точку і може її налаштувати. Може використовуватися для опрацювання складних ** вершинних освітлювальних накипів як налаштування для наступного етапу та / або деформації точок навколо (хитання, масштабування тощо).
кожен отриманий примітив передається в
Geometry Shader - бере кожен перетворений примітив (трикутник тощо) і може виконувати на ньому обчислення. Це може додати нові бали, забрати їх або перемістити, якщо потрібно. Це може бути використано для динамічного додавання або видалення рівнів деталізації з однієї базової сітки, створення математичних сіток на основі точки (для складних систем частинок) та інших подібних завдань.
кожен отриманий примітив перетворює лінію сканування, і кожен піксель, який охоплює проміжок, проходить через
Піксельний шейдер (Фрагментний шейдер у OpenGL) - обчислює колір пікселя на екрані на основі того, що передає вершинний шейдер, пов'язаних текстур та даних, доданих користувачем. Це не може прочитати поточний екран взагалі, просто визначте, яким кольором / прозорістю повинен бути цей піксель для поточного примітиву.
ці пікселі потім поміщаються в поточний буфер малювання (екран, резервний буфер, візуалізація текстури, що завгодно)
Усі шейдери можуть отримувати доступ до глобальних даних, таких як матриця світогляду, а розробник може передавати прості змінні, які вони можуть використовувати для освітлення або для будь-яких інших цілей. Шейдери обробляються мовою, схожою на асемблер, але сучасні версії DirectX та OpenGL вбудували високорівневі компілятори мов, подібних до мов, вбудовані відповідно під назвою HLSL та GLSL. NVidia також має компілятор шейдерів під назвою CG, який працює на обох API.
[відредаговано для відображення неправильного порядку, який я мав раніше (Геометрія-> Вершина-> Піксель), як зазначено в коментарі.]
Зараз у DirectX 11 для теселяції використовуються 3 нові шейдери. Новим повним порядком шейдерів є Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel. Я ще не використовував ці нові, тому не відчуваю себе кваліфікованим, щоб точно їх описати.
Шейдери Vertex і Pixel надають різні функції в графічному конвеєрі. Вершинні шейдери беруть і обробляють дані, пов'язані з вершинами (положення, нормалі, текстові координати).
Піксельні (або, точніше, фрагментні) шейдери приймають значення, інтерпольовані з тими, що обробляються у шейдері Vertex, і генерують піксельні фрагменти. Більшість «крутих» речей зроблено в піксельних шейдерах. Тут відбуваються такі речі, як пошук текстури та освітлення.
DirectX:
Шейдер:
Набір програм, що реалізує додавання графічних функцій до об'єктів, які не визначені у фіксованому конвеєрі візуалізації. Завдяки цьому ми можемо мати свої власні графічні ефекти відповідно до наших потреб - тобто, ми більше не обмежуємось заздалегідь визначеними «фіксованими» операціями.
HLSL: (Мова затінення високого рівня):
HLSL - це мова програмування, подібно C ++, яка використовується для реалізації шейдерів (піксельних шейдерів / вершинних шейдерів).
Вершинні шейдери:
Вершинний шейдер - це програма, що виконується на графічному процесорі графічної карти, яка працює на кожній вершині окремо. Це полегшує можливість написання власного алгоритму роботи з вершинами.
Піксельні шейдери:
Піксельний шейдер - це програма, що виконується на графічному процесорі графічної карти під час процесу растеризації кожного пікселя. Це дає нам можливість прямого доступу / управління окремими пікселями. Цей прямий доступ до пікселів дозволяє нам досягти різноманітних спецефектів, таких як мультитекстурування, освітлення на піксель, глибина різкості, моделювання хмар, імітація вогню та складні технології затінення.
Примітка: І вершинні шейдери, і піксельні шейдери (програми) перед компіляцією слід компілювати за допомогою певної версії компілятора. Компіляція може здійснюватися так само, як виклик API із необхідними параметрами, як ім'я файлу, основна функція введення тощо,
Що стосується розвитку, шейдер Pixel - це невелика програма, яка працює на кожному пікселі окремо, так само шейдер Vertex працює на кожній вершині окремо.
Вони можуть бути використані для створення спецефектів, тіней, освітлення тощо ...
Оскільки кожен Pixel / Vertex працює окремо, ці шейдери піддаються надзвичайно паралельній архітектурі сучасних графічних процесорів.
Раніше була демонстрація Flash, яка показувала площини експозиції від близької до глядача до відстані відбиття. Це представляє площини огляду відстані відбитого відстані світла назад до глядача через будь-яку іншу площину на своєму шляху. Будь-що на цих площинах може бути використано таким, яким воно є, або використано у параметризованому значенні даних для зміни світла або кольору, що повертається. Це найпростіші пояснення, які ви збираєтесь побачити. Я хотів би, щоб демо-версія все ще була виконуваною, але більше не з міркувань безпеки. Насправді будь-яке тіло, яке встановило б 3D-шейдер, що показує x кількість вертикальних площин вздовж осі Z, що показує взаємодію з цими площинами, могло б швидко прославитись. Вигляд можна було б показати під кутом, як можна було б показати концепт-вигляд, так як розсічення було очевидним. Іншими словами, вигляд має кутовий переріз того, що бачить трубопровід і що бачить глядач. По суті, це може зробити когось по-справжньому добре оплаченим, коли цей шейдер використовується як створення шейдерів, де розробник просто вставляє необхідні площини в осі Z adhoc. Оглядове вікно, розташоване збоку, покаже результати візуалізації. Я роблю мільйонерів.