Шейдер (англ. Shader) — програма для одного із ступенів графічного конвеєра, що використовується в тривимірній графіці для визначення остаточних параметрів об'єкта чи зображення. Вона може містити в собі довільної складності опис поглинання та розсіювання світла, накладення текстури, віддзеркалення і заломлення, затінення, зміщення поверхні і ефекти пост-обробки.
Програмовані шейдери гнучкі та ефективні. Складні на вигляд поверхні можуть бути візуалізовані за допомогою простих геометричних форм. Наприклад, шейдери можуть бути використані для малювання поверхні із тривимірної керамічної плитки на абсолютно плоскій поверхні.
Потреба в шейдерах
В програмних графічних рушіях весь ланцюжок рендерингу — від визначення видимих частин сцени до накладення текстури — створювався розробником ігор. У цей ланцюжок можна було включати власні нестандартні відеоефекти. З появою перших відеоакселераторів розробник виявився обмежений тим набором ефектів, який закладений в апаратне забезпечення. Ось два приклади.
- Спробуйте пірнути під воду в Quake 2 на програмному і на OpenGL-рендерінгу. При апаратно прискореній картинці, вода там — просто синій світлофільтр, в той час як в програмному є реалістичніший ефект води.
- В Counter-Strike ефект засліплення від світлошумової гранати на апаратному рендерінгу — білий спалах, на програмному — білий спалах і пікселізований екран.
Шейдери були розроблені для того, щоб мати змогу відтворювати складні відеоефекти з атомарних операцій. Попередниками шейдерів були процедурна генерація текстур (що широко застосовувалася в Unreal для створення анімованих текстур води і вогню) і мультитекстуровання (на ньому була заснована мова шейдерів, що застосовувався в Quake 3) . Але і ці механізми не забезпечують такої гнучкості, як шейдери.
Типи шейдерів
В даний час шейдери поділяються на чотири типи: вершинні, геометричні, параллаксні і фрагментні (піксельні).
Вершинні шейдери (Vertex Shader)
Вершинний шейдер оперує даними вершин багатогранників. До таких даних, зокрема, належать координати вершини в просторі, текстурні координати, тангенс-вектор, вектор бінормалі, вектор нормалі. Вершинний шейдер може бути використаний для видового і перспективного перетворення вершин, генерації текстурних координат, розрахунку освітлення і т. д.
Геометричні шейдери (Geometry Shader)
Геометричний шейдер, на відміну від вершинного, здатний обробити не лише одну вершину, але і цілий примітив. Це може бути відрізок (дві вершини) і трикутник (три вершини), а за наявності інформації про суміжних вершинах (adjacency) може бути оброблено до шести вершин для трикутного примітиву. Крім того геометричний шейдер здатний генерувати примітиви «на льоту», не залучаючи при цьому центрального процесора. Вперше почав використовуватися на відеокартах Nvidia серії 8.
Фрагментні (піксельні) шейдери (Pixel Shader)
Фрагментний Шейдер працює з фрагментами зображення. Під фрагментом зображення в даному випадку розуміється піксель, якому поставлено у відповідність деякий набір атрибутів, таких як колір, глибина, текстурні координати. Фрагментний Шейдер використовується на останній стадії графічного конвеєра для формування фрагмента зображення.
Шейдерні мови
Вперше використані в системі RenderMan компанії Pixar, шейдери набували все більшого поширення зі зниженням цін на комп'ютери. Основна перевага використання шейдерів — їх гнучкість, що спрощує і здешевлює цикл розробки програми, і при тому що підвищує складність і достовірність сцен, що візуалізуються.
Шейдерні мови зазвичай містять спеціальні типи даних, такі як колір або нормаль. Оскільки комп'ютерна графіка має безліч сфер застосування, для задоволення різних потреб ринку була створена велика кількість шейдерних мов.
Професійний рендерінг
Дані шейдерні мови орієнтовані на досягнення максимальної якості візуалізації. Опис властивостей матеріалів зроблено на максимально абстрактному рівні, для роботи не потрібно особливих навичок програмування або знання апаратної частини. Такі шейдери зазвичай створюються художниками з метою забезпечити «правильний вигляд», подібно до накладення текстури, джерел кольору та інших аспектів їхньої роботи.
Обробка таких шейдерів звичайно являє собою ресурсномісткі завдання. Сукупна обчислювальна потужність, необхідна для забезпечення їх роботи, може бути дуже велика, тому що використовується для створення фотореалістичних зображень. Основна частина обчислень при подібній візуалізації виконується потужними комп'ютерними кластерами.
Шейдерна мова RenderMan
Шейдерна мова RenderMan, описана в Специфікації інтерфейсу RenderMan, є фактичним стандартом для професійного рендерінгу. API RenderMan, розроблений Робом Куком, використовується у всіх роботах студії Pixar. Вона також є першою з реалізованих шейдерних мов.
У більшості випадків реалізація стандарту Renderman - це набір програм, що викликаються з командного рядка і відіграють важливу роль в процесі рендеринга. Стандарт розрізняє поняття файлів опису сцени та геометрії - RIB-файлів, і файлів опису матеріалів — SL-файлів, або шейдерів. Всі ці файли мають простий текстовий формат, описаний в специфікації. Файли шейдерів являють собою мініпрограми на сильно спрощеному діалекті мови C.
Шейдерна мова Gelato
NVIDIA Gelato є оригінальною гібридною системою рендерінгу зображень і анімації тривимірних сцен і об'єктів, що використовує для розрахунків центральні процесори і апаратні можливості професійних відеокарт серії Quadro FX.
Основним принципом, якого неухильно дотримуються розробники, є безкомпромісна якість фінального зображення, не обмежену нічим, у тому числі — сучасними можливостями відеокарт. Як виробничий інструмент, здатний створювати кінцевий продукт високої якості, Gelato призначений для професійного використання в таких галузях як кіно, телебачення, промисловий дизайн та архітектурні візуалізації.
Рендерінг в реальному часі
Шейдерна мова OpenGL: GLSL
Шейдерна мова OpenGL носить назву GLSL (The OpenGL Shading Language). GLSL заснована на мові ANSI C. Більшість можливостей мови ANSI C збережено, також до них додано векторні та матричні типи даних, що часто застосовуються при роботі з тривимірною графікою. У контексті GLSL шейдером називається незалежно компільована одиниця, написана цією мовою. Програмою називається набір шейдерів, пов'язаних разом. У версії OpenGL 4.3 додано шейдери обчислення (compute shader) — які представляють собою спрощену форму ядер OpenCL і збільшують гнучкість графічного конвеєра, дозволяючи реалізувати динамічно модифіковані текстури, програмно-генеровану геометрію та інше.
Мова програмування Cg
Розроблена nVidia спільно з Microsoft (аналогічна (по суті) мова від Microsoft має назву 'HLSL' та додана до DirectX 9). 'Cg' розшифровується як C for Graphics. Мова дуже схожа на C, вона використовує схожі типи даних (int, float, а також спеціальний 16-бітний тип з рухомою комою — half). Підтримуються функції і структури. Мова має своєрідні оптимізації у вигляді упакованих масивів — оголошення типу «float a [4]» і «float 4 a» відповідають різним типам. Друге оголошення - це й є упакований масив, операції з яким виконуються швидше, ніж із звичайними масивами. Попри те, що мова розроблена nVidia, вона вільно працює і з відеокартами інших виробників, таких як AMD/ATI. Однак слід враховувати, що всі шейдерні програми мають свої особливості, які слід отримувати з спеціалізованих джерел.
Шейдерні мови DirectX
Шейдерна мова низького рівня DirectX (DirectX ASM)
Синтаксично — мова асемблера. Існує кілька версій, що розрізняються наборами команд, а також необхідним обладнанням. Існує поділ на вершинні (англ. vertex) і піксельні (англ. pixel) шейдери.
- Вершинний шейдер
Виконує обробку геометрії — змінює атрибути вершин, розміщені у вхідних регістрах, такі як позиція, текстурні координати, колір вершини, нормаль та інші. Також може виконувати обчислення освітлення. Допустима кількість команд залежить від версії шейдера, яка задає вимоги до аппаратного забезпечення, і може досягати однієї-двох сотень і більше. Приклад фрагмента коду:
vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3
- Піксельний Шейдер
Виконує обробку даних забарвлення, отриманого при відображенні трикутника. Оперує з текстурами і кольором. Кількість інструкцій значно обмежена, так, наприклад, у версії 1.4 вона не може бути більше 32. Приклад фрагмента коду:
ps.1.4 texld r0, t0 mul r0, r0, v0
Шейдерна мова високого рівня DirectX (HLSL — High Level Shader Language)
Є надбудовою над DirectX ASM. За синтаксисом подібна до C, дозволяє використовувати структури, процедури та функції.
Див. також
Посилання
- OpenGL Shading Language Specification v1.20.8 (PDF). Архів (PDF) оригіналу за 5 лютого 2012. Процитовано 4 березня 2008.
- OpenGL Shading Language Specification v1.30.08 (PDF). Архів (PDF) оригіналу за 5 лютого 2012. Процитовано 12 листопада 2009.
- OpenGL Shading Language Specification v1.40.07 (PDF). Архів (PDF) оригіналу за 5 лютого 2012. Процитовано 12 листопада 2009.
- OpenGL Shading Language Specification v1.50.09 (PDF). Архів (PDF) оригіналу за 5 лютого 2012. Процитовано 12 листопада 2009.
IDE
- FX Composer [ 29 березня 2010 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Shejder angl Shader programa dlya odnogo iz stupeniv grafichnogo konveyera sho vikoristovuyetsya v trivimirnij grafici dlya viznachennya ostatochnih parametriv ob yekta chi zobrazhennya Vona mozhe mistiti v sobi dovilnoyi skladnosti opis poglinannya ta rozsiyuvannya svitla nakladennya teksturi viddzerkalennya i zalomlennya zatinennya zmishennya poverhni i efekti post obrobki Programovani shejderi gnuchki ta efektivni Skladni na viglyad poverhni mozhut buti vizualizovani za dopomogoyu prostih geometrichnih form Napriklad shejderi mozhut buti vikoristani dlya malyuvannya poverhni iz trivimirnoyi keramichnoyi plitki na absolyutno ploskij poverhni Potreba v shejderahV programnih grafichnih rushiyah ves lancyuzhok renderingu vid viznachennya vidimih chastin sceni do nakladennya teksturi stvoryuvavsya rozrobnikom igor U cej lancyuzhok mozhna bulo vklyuchati vlasni nestandartni videoefekti Z poyavoyu pershih videoakseleratoriv rozrobnik viyavivsya obmezhenij tim naborom efektiv yakij zakladenij v aparatne zabezpechennya Os dva prikladi Sprobujte pirnuti pid vodu v Quake 2 na programnomu i na OpenGL renderingu Pri aparatno priskorenij kartinci voda tam prosto sinij svitlofiltr v toj chas yak v programnomu ye realistichnishij efekt vodi V Counter Strike efekt zasliplennya vid svitloshumovoyi granati na aparatnomu renderingu bilij spalah na programnomu bilij spalah i pikselizovanij ekran Shejderi buli rozrobleni dlya togo shob mati zmogu vidtvoryuvati skladni videoefekti z atomarnih operacij Poperednikami shejderiv buli procedurna generaciya tekstur sho shiroko zastosovuvalasya v Unreal dlya stvorennya animovanih tekstur vodi i vognyu i multiteksturovannya na nomu bula zasnovana mova shejderiv sho zastosovuvavsya v Quake 3 Ale i ci mehanizmi ne zabezpechuyut takoyi gnuchkosti yak shejderi Tipi shejderivV danij chas shejderi podilyayutsya na chotiri tipi vershinni geometrichni parallaksni i fragmentni pikselni Vershinni shejderi Vertex Shader Vershinnij shejder operuye danimi vershin bagatogrannikiv Do takih danih zokrema nalezhat koordinati vershini v prostori teksturni koordinati tangens vektor vektor binormali vektor normali Vershinnij shejder mozhe buti vikoristanij dlya vidovogo i perspektivnogo peretvorennya vershin generaciyi teksturnih koordinat rozrahunku osvitlennya i t d Geometrichni shejderi Geometry Shader Geometrichnij shejder na vidminu vid vershinnogo zdatnij obrobiti ne lishe odnu vershinu ale i cilij primitiv Ce mozhe buti vidrizok dvi vershini i trikutnik tri vershini a za nayavnosti informaciyi pro sumizhnih vershinah adjacency mozhe buti obrobleno do shesti vershin dlya trikutnogo primitivu Krim togo geometrichnij shejder zdatnij generuvati primitivi na lotu ne zaluchayuchi pri comu centralnogo procesora Vpershe pochav vikoristovuvatisya na videokartah Nvidia seriyi 8 Fragmentni pikselni shejderi Pixel Shader Fragmentnij Shejder pracyuye z fragmentami zobrazhennya Pid fragmentom zobrazhennya v danomu vipadku rozumiyetsya piksel yakomu postavleno u vidpovidnist deyakij nabir atributiv takih yak kolir glibina teksturni koordinati Fragmentnij Shejder vikoristovuyetsya na ostannij stadiyi grafichnogo konveyera dlya formuvannya fragmenta zobrazhennya Shejderni moviVpershe vikoristani v sistemi RenderMan kompaniyi Pixar shejderi nabuvali vse bilshogo poshirennya zi znizhennyam cin na komp yuteri Osnovna perevaga vikoristannya shejderiv yih gnuchkist sho sproshuye i zdeshevlyuye cikl rozrobki programi i pri tomu sho pidvishuye skladnist i dostovirnist scen sho vizualizuyutsya Shejderni movi zazvichaj mistyat specialni tipi danih taki yak kolir abo normal Oskilki komp yuterna grafika maye bezlich sfer zastosuvannya dlya zadovolennya riznih potreb rinku bula stvorena velika kilkist shejdernih mov Profesijnij rendering Dani shejderni movi oriyentovani na dosyagnennya maksimalnoyi yakosti vizualizaciyi Opis vlastivostej materialiv zrobleno na maksimalno abstraktnomu rivni dlya roboti ne potribno osoblivih navichok programuvannya abo znannya aparatnoyi chastini Taki shejderi zazvichaj stvoryuyutsya hudozhnikami z metoyu zabezpechiti pravilnij viglyad podibno do nakladennya teksturi dzherel koloru ta inshih aspektiv yihnoyi roboti Obrobka takih shejderiv zvichajno yavlyaye soboyu resursnomistki zavdannya Sukupna obchislyuvalna potuzhnist neobhidna dlya zabezpechennya yih roboti mozhe buti duzhe velika tomu sho vikoristovuyetsya dlya stvorennya fotorealistichnih zobrazhen Osnovna chastina obchislen pri podibnij vizualizaciyi vikonuyetsya potuzhnimi komp yuternimi klasterami Shejderna mova RenderMan Shejderna mova RenderMan opisana v Specifikaciyi interfejsu RenderMan ye faktichnim standartom dlya profesijnogo renderingu API RenderMan rozroblenij Robom Kukom vikoristovuyetsya u vsih robotah studiyi Pixar Vona takozh ye pershoyu z realizovanih shejdernih mov U bilshosti vipadkiv realizaciya standartu Renderman ce nabir program sho viklikayutsya z komandnogo ryadka i vidigrayut vazhlivu rol v procesi renderinga Standart rozriznyaye ponyattya fajliv opisu sceni ta geometriyi RIB fajliv i fajliv opisu materialiv SL fajliv abo shejderiv Vsi ci fajli mayut prostij tekstovij format opisanij v specifikaciyi Fajli shejderiv yavlyayut soboyu miniprogrami na silno sproshenomu dialekti movi C Shejderna mova Gelato NVIDIA Gelato ye originalnoyu gibridnoyu sistemoyu renderingu zobrazhen i animaciyi trivimirnih scen i ob yektiv sho vikoristovuye dlya rozrahunkiv centralni procesori i aparatni mozhlivosti profesijnih videokart seriyi Quadro FX Osnovnim principom yakogo neuhilno dotrimuyutsya rozrobniki ye bezkompromisna yakist finalnogo zobrazhennya ne obmezhenu nichim u tomu chisli suchasnimi mozhlivostyami videokart Yak virobnichij instrument zdatnij stvoryuvati kincevij produkt visokoyi yakosti Gelato priznachenij dlya profesijnogo vikoristannya v takih galuzyah yak kino telebachennya promislovij dizajn ta arhitekturni vizualizaciyi Rendering v realnomu chasi Shejderna mova OpenGL GLSL Shejderna mova OpenGL nosit nazvu GLSL The OpenGL Shading Language GLSL zasnovana na movi ANSI C Bilshist mozhlivostej movi ANSI C zberezheno takozh do nih dodano vektorni ta matrichni tipi danih sho chasto zastosovuyutsya pri roboti z trivimirnoyu grafikoyu U konteksti GLSL shejderom nazivayetsya nezalezhno kompilovana odinicya napisana ciyeyu movoyu Programoyu nazivayetsya nabir shejderiv pov yazanih razom U versiyi OpenGL 4 3 dodano shejderi obchislennya compute shader yaki predstavlyayut soboyu sproshenu formu yader OpenCL i zbilshuyut gnuchkist grafichnogo konveyera dozvolyayuchi realizuvati dinamichno modifikovani teksturi programno generovanu geometriyu ta inshe Mova programuvannya Cg Rozroblena nVidia spilno z Microsoft analogichna po suti mova vid Microsoft maye nazvu HLSL ta dodana do DirectX 9 Cg rozshifrovuyetsya yak C for Graphics Mova duzhe shozha na C vona vikoristovuye shozhi tipi danih int float a takozh specialnij 16 bitnij tip z ruhomoyu komoyu half Pidtrimuyutsya funkciyi i strukturi Mova maye svoyeridni optimizaciyi u viglyadi upakovanih masiviv ogoloshennya tipu float a 4 i float 4 a vidpovidayut riznim tipam Druge ogoloshennya ce j ye upakovanij masiv operaciyi z yakim vikonuyutsya shvidshe nizh iz zvichajnimi masivami Popri te sho mova rozroblena nVidia vona vilno pracyuye i z videokartami inshih virobnikiv takih yak AMD ATI Odnak slid vrahovuvati sho vsi shejderni programi mayut svoyi osoblivosti yaki slid otrimuvati z specializovanih dzherel Shejderni movi DirectX Shejderna mova nizkogo rivnya DirectX DirectX ASM Sintaksichno mova asemblera Isnuye kilka versij sho rozriznyayutsya naborami komand a takozh neobhidnim obladnannyam Isnuye podil na vershinni angl vertex i pikselni angl pixel shejderi Vershinnij shejder Vikonuye obrobku geometriyi zminyuye atributi vershin rozmisheni u vhidnih registrah taki yak poziciya teksturni koordinati kolir vershini normal ta inshi Takozh mozhe vikonuvati obchislennya osvitlennya Dopustima kilkist komand zalezhit vid versiyi shejdera yaka zadaye vimogi do apparatnogo zabezpechennya i mozhe dosyagati odniyeyi dvoh soten i bilshe Priklad fragmenta kodu vs 2 0 dcl position v0 dcl texcoord v3 m4x4 oPos v0 c0 mov oT0 v3 Pikselnij Shejder Vikonuye obrobku danih zabarvlennya otrimanogo pri vidobrazhenni trikutnika Operuye z teksturami i kolorom Kilkist instrukcij znachno obmezhena tak napriklad u versiyi 1 4 vona ne mozhe buti bilshe 32 Priklad fragmenta kodu ps 1 4 texld r0 t0 mul r0 r0 v0 Shejderna mova visokogo rivnya DirectX HLSL High Level Shader Language Ye nadbudovoyu nad DirectX ASM Za sintaksisom podibna do C dozvolyaye vikoristovuvati strukturi proceduri ta funkciyi Div takozhRendering Tekstura trivimirna grafika Zatinennya komp yuterna grafika PosilannyaOpenGL Shading Language Specification v1 20 8 PDF Arhiv PDF originalu za 5 lyutogo 2012 Procitovano 4 bereznya 2008 OpenGL Shading Language Specification v1 30 08 PDF Arhiv PDF originalu za 5 lyutogo 2012 Procitovano 12 listopada 2009 OpenGL Shading Language Specification v1 40 07 PDF Arhiv PDF originalu za 5 lyutogo 2012 Procitovano 12 listopada 2009 OpenGL Shading Language Specification v1 50 09 PDF Arhiv PDF originalu za 5 lyutogo 2012 Procitovano 12 listopada 2009 IDEFX Composer 29 bereznya 2010 u Wayback Machine