Bližší seznámení s vertex shadery |
autor: Vrtal David , publikováno 16.4.2003 |
V minulém článku jsme se podívali na první důležitou součást grafické karty takzvané pixel shadery. Dnes na tento článek plynule naváži a seznámím vás s další neméně důležitou součástí grafické karty, která je možná ještě trochu důležitější než minule představené pixel shadery. Tato část grafické karty má název vertex shader. V reakcích na můj předchozí článek mi bylo vytýkáno, že jsem dostatečně srozumitelně na příkladech nevysvětlil, co je pixel shader z pohledu běžného uživatele. V tomto článku na to již budu pamatovat a budu se snaži přiblížit tuto technologii i běžným uživatelům tak, aby ji plně pochopili. Doufám, že se mi tento záměr zdárně povede a článek přispěje k větší vzdělanosti běžných uživatelů grafických karet.
Jak asi všichni víte skládá se ve hrách každý objekt z polygonů, přesněji z poskládaných trojúhelníků - tzv. triangles. V každém vrcholu se nachází vertex, který určuje geometrii tělesa. Nyní se blíže podíváme na to co to vlastně ten vertex je a jaká je jeho přesná definice.
Takže toto je přesná definice vertexu:
Vertex je bod v průsečíku dvou paprsků tvořících úhel, dvou stran polygonu nebo dvou hran tělesa. Je to špička úhlu ve které se dvě strany protínají. Je to tedy bod ve kterém se setkávají čáry, paprsky a hrany.
Na následujících dvou obrázcích je vše objasněno.
Vertex vytvořený jako průsečík dvou paprsků
Vertex jako špička úhlu ve které se protínají dvě strany
Poslední pojem který si zde uvedeme je takzvaná vertices. Jedná se pouze o množné číslo od slova vertex. Je to také pojem se kterým se často setkáte. I pro tento pojem následuje ilustrační obrázek.
Názorná definice pojmu vertices
Nakonec vám zde ukáži obrázek, který je rozdělen do čtyřech částí. Na obrázku je předveden model plochy. Pokud si obrázek pořádně prohlédnete, uvidíte na něm výše definované vertexy.
Praktické předvedení vertexů na obecné ploše
Nyní již víme co je to vertex a naším dalším úkolem je ujasnit si co je tedy přesně vertex shader. Možnost pracovat s vertexy pomocí vertex shaderů byla definována až v DirectX 8.0. Od té doby se začala implementovat hardwarová podpora vertex shaderů do grafických karet. Proto si lze vertex shader představit jako malý procesor, jež je součástí komplexní architektury grafického čipu. Je to tedy programovatelná jednotka zpracovávající instrukce, které do ní přicházejí. Primárním úkolem vertex shaderu je pracovat s již zmiňovanými vertexy. Všechny výše uvedené poznatky si shrneme do jedné přehledné definice:
Pro jednoduchost si lze vertex shader představit jako malý procesor, který je součástí grafického čipu.Je to plně programovatelná jednotka sloužící pro zpracovávání programového kódu skládajícího se ze speciálních instrukcí určených pro vertex shadery. Tento kód je pak aplikován na jednotlivé vertexy a ty jsou transformovány. Po své transformaci vytvoří vertexy požadovanou scénu.
Na druhy jednotlivých operací se scénou, které nám vertex shadery umožňují, se podíváme v kapitole III. Na závěr vám ukáži trochu hezčí obrázek, k jehož vygenerování byly použity verex shadery.
Ukázka scény vygenerované s použitím vertex shaderů
{mospagebreak title=Několik praktických ukázek }Účelem této kapitoly je ukázat čtenářům několik ilustračních příladů, na kterých je vidět jakých efektů se dá použitím vertex shaderů dosáhnout. Doufám, že vám tato sada obrázků umožní pochopit další výklad a umožní vám si udělat alespoň nějaký názor na to, o čem je tato technologie. První věcí ke které se dají vertex shadery použít je výpočet deformace jednoho objektu při jeho styku s objektem druhým. Tato situace je ukázána na obrázku.
Deformace objektu způsobená kontaktem s jiným objektem
Z tohoto obrázku je jasně vidět, jaké možnosti nám toto využití vertex shaderů přináší. Tento efekt je využitelný v mnoha typech her. Je to dáno tím, že téměř neexistuje hra, která by obsahovala pouze jeden objekt. Vždy se ve hře těchto objektů nachází větší či menší množství a tyto objekty se ve většině případů nějakým způsobem pohybují. S využitím výše prezentovaného efektu se zvýší realističnost kontaktu objektů a dojde ke kvalitnějšímu vykreslení následků tohoto kontaktu.
Další věcí ke které se dají vertex shadery s výhodou použít, je výpočet realistických stínů způsobených osvětlením scény z mnohonásobných světelných zfrojů. Použití tohoto efektu je ukázáno na následujícím obrázku.
Ukázka realistických stínů způsobených nasvětlením scény z mnohonásobných světelných zdrojů
V první části obrázku je vidět, jak se s použitím vertex shaderů zobrazily stíny jednotlivých objektů, v našem případě míčů. Pokud si scénu trochu prostudujete, uvidíte, že stíny jednotlivých objektů se nacházejí opravdu tam, kde by jste je očekávali. Nejmarkantněji je to vidět na basketbalovém a fotbalovém míči, jež jsou umístěny v popředí scény. Tohoto efektu se s výhodou používá v akčních hrách. Efekt umožňuje zobrazit realistické stíny postav, čímž se dá dosáhnout zajímavých efektů, které podstatnou měrou oživují atmosféru hry.
Na třetím obrázku je demonstrována další vlastnost vertex shaderů a tou je možnost animace objektů ve scéně. Zde je k demonstraci využita mýdlová bublina. Jedná se o trochu kontroverzní ukázku, neboť zobrazení bubliny je trochu více umělecky abstraktního rázu. Pokud někdo z čenářů chce, může si scénu lépe prostudovat a potom si zkusit tuto mýdlovou bublinu představit. Pokud se o to budete pokoušet, přeji vám příjemnou zábavu.
Ukázka mýdlové bubliny animované pomocí vertex shaderů
Na další dvojici obrázků je předveden optický efekt nazývaný "rybí oko". V levé části můžete vidět vstupní scénu před tím, než je na ní aplikována sada naprogramovaných instrukcí. O zpracování těchto instrukcí se postará jednotka vertex shaderu. Po vypočtení scény dojde k její transformaci na základě zpracovaných instrukcí. No a výsledný efekt je vidět na obrázku vpravo. Ti z vás, kteří hrají počítačové hry si asi dokáží představit, k čemu se dá tento efekt využít.
Ukázka efektu nazvaného "rybí oko"
Jde použít například na různé výhledy z kabiny u simulátorů. Je jedno zda se bude jednat o simulátory letecké, lodní nebo simulátory automobilů. Téměř ve všech případech si můžete zapnout pohled zevnitř simulovaného dopravního prostředku. Pokud si tento výhled zapnete uvidíte venkovní scény zdeformované otvorem, přes který ven vyhlížíte. A v tomto případě se dá samozřejmě s výhodou použít prezentovaný efekt. Další využití tohoto efektu mne napadá například ve spojitosti s výhledy přes různé dalekohledy a mířidla zbraní, které jsou používány v akčních hrách. Toto samozřejmě není vyčerpávající výčet použití tohoto efektu. Myslím si, že každý z vás dokáže vymyslet další možnosti aplikování.
Posledním příkladem, který zde ukáži je obrázek, na kterém je zobrazen povrch na který je aplikováno větší množství barevných odstínů a dále je pohled ještě deformován dle předem určených zákonitostí.
Ukázka povrchu s větším množstvím barevných přechodů
{mospagebreak title=Seznam operací použitelných k vytvoření finální scény pomocí vertex shaderů}Pojem vertex shader jsme si definovali již v kapitole I. Bylo řečeno, že s použitím vertex shaderů se dá dosáhnout úžasných efektů. Podívejte se na tento ilustrační obrázek z Dooma 3. Jsou na něm vidět realistické tváře postav z této hry.
Ukázka efektů dosažených v Doomu 3 pomocí vertex shaderů
Po shlédnutí obrázků se podíváme na výčet operací, které můžeme se scénou provádět pomocí vertex shaderu. Použitím kombinace těchto operací můžeme dosáhnout efektů předvedených na obrázcích z Dooma 3. Zde je uveden seznam jednotlivých operací:
- Příprava scény -jedná se o výpočetní operace spojené s výpočty prováděnými před vygenerováním scény.
- Rotace scény - Jedná se o výpočetní operace spojené s jakýmkoliv natáčením scény o nějaký úhel.
- Osvětlování scény -zde se jedná o výpočetní operace spojené s osvětlováním celé scény. O tyto operace se stará známý T&L engine. Bere se zde v úvahu rozmístění světelných zdrojů pro generování scény, použitý typ světelných zdrojů a intenzita zdrojů. Použitelné typy jsou například bodové zdroje, zdroje přirozeného světla, zdroje umělého světla atd. Tyto výpočty jsou velmi důležité v moderních 3D hrách. Nejznámějším člověkem z herní branže, který věnuje velkou pozornost správnému osvětlení scén a práci se světlem a stínem, je legendárním John Carmack ze společnosti Id software. Tyto technologie jsou patrny především z jeho připravované pecky Doom III, kterou všichni netrpělivě očekáváme. Většina z nás měla možnost vyzkoušet si prví tři části hry ve verzi, která Id softwaru unikla a která se dostala mezi širokou hráčskou komunitu po celém světě. Již z této krátké ukázky je patrné, že jednou ze základních složek ovlivňujících atmosféru hry je právě hra se světlem a stínem.
- Umisťování scény -jedná se o výpočetní operace spojené s výpočty jež nám umožňují přesné umístění a souřadnicové napozicování scény v prostoru. Tyto operace jsou velice složité u dynamicky se měnících scén, kdy matematický model, popisující chování jednotlivých objektů ve scéně a celkové umístění a natočení scény v relativním souřadnicovém systému oproti výchozímu souřadnicovému systému, je velice složitý.
- Animování scény -do této kategorie spadají výpočetní operace spojené s výpočty určenými pro rozpohybování a rozanimování staticky navržených scén.
Ukázka drátěného modelu postavy z Dooma 3 před aplikací efektu vytvořeného vertex shaderem
Model po aplikaci efektů vytvořených vertex shaderem
-
Transformace scény -v této kategorii jsou zahrnuty výpočetní operace spojené s jakýmikoliv transformacemi scény prováděnými aplikováním různých pokročilých transformačních technologií.
Aplikace wave efektu (vlnový efekt) na modelAplikace fish eye efektu (rybí oko) na model
Aplikace efektu pro first person hry na model
Kromě operací s již výše zmiňovanými trojúhelníky operují vertex shadery také s polygony a plochami. Pokud by jste chtěli používat trochu fundovanější označení pro proces zpracování trojúhelníků, polygonů a ploch pomocí vertex shaderů, lze pro tento proces použít název vertex processing engine. Tento engine je u novějších grafických karet tvořen většinou jednou nebo více shader pipeline. Každá z těchto pipeline může souběžně provádět jak skalární tak vektorové operace. Skalární operace pracují většinou jen s jednoduchými jednosložkovými vstupy. Oproti tomu vektorové operace pracují se vstupy vícesložkovými. Může se jednat buďto o informace o RGB barevných složkách (red-červená barva, green-zelená barva, blue-modrá barva) nebo o souřadnicích (x,y,z). Tím, že tato jednotka je schopna zpracovávat oba druhy těchto operací se dá dost podstatně zvýšit rychlost zpracování.
Tím bych dnešní část seriálu ukončil. Doufám, že je již tato část seriálu dostatečně pochopitelná a bude k užitku i běžným uživatelům. V další části seriálu se znovu vrátím k pixel shaderům a doplním předchozí článek o vysvětlení základní problematiky.
Redakce si vyhrazuje právo odstranit neslušné a nevhodné příspěvky. Případné vyhrady na diskuze(zavináč)pctuning.cz
Jinak tenhle dil byl uz mnohem pochopitelnejsi, tak jen tak dal.
ja bych
ty bys
on/ona by
my bychom
vy byste
oni/ony by
Stejne tak se pise abyste, kdybyste apod.
Zdraví autor článku
Holt takoví co se zabývají češtinou i informatikou to mají těžké :o)))
Dale mi neni jasne, proc nejste schopni zajistit korekturu, kdyz jazyk sam neovladate, nebo si to muzete nechat aspon od nekoho zkontrolovat. Uz mne unavuje vecne brblani o tom, ze clanek je o IT a ne cestine. Pokud pisete, mel byste ovladat obe oblasti (nehlede na to, ze, jak jsem rikal, pravopis by mel zvladnout kazdy absolvent SS). Je snad v poradku aby ucitel umel danou latku a nebyl schopen ji podat? Asi by si mel najit jine zamestnani, ne?.
Ted bych se rad dostal k odbornosti - vite, oni se obvykle ozvou ti nespokojeni ctenari (to byste ostatne taky mohl vedet). Ja si myslim, ze k clanku o PS stacilo pridat jeden odstavec a bylo by to ok. Me by ale spis zajimalo, jak se s PS a VS pracuje, tedy jakym zpusobem se programuji a provazanost s OpenGL (v nejhorsim i DirectX).
PS. Domnivate se, ze pokud vas upozornim na chybu a vy ji tvrdosijne opakujete, svedci to o vasi inteligneci?
http://www17.tomshardware.com/graphic/20020116/index.html
http://www.tomshardware.com/graphic/20021004/index.html
(v uvedenem poradi)
ale to uz je detail .. jinak clanek je fajn .. jen tak dal.
Autor
Chapu, ze to neni jen tak, ale od toho jste prece odbornici, ze...
Dále mi není jasné co vás opravňuje k tomu, kritizovat jak obsahovou stránku článku, tak jejich stylistickou podobu. Nikde jste neuvedl odkaz na vámi napsaný článek, nebo stránku s nějakým vaším příspěvkem, který by mi dokumentoval vaši výbornou znalost českého jazyka. Já sám mám něco napublikováno i v papírových médiích. Takže nechápu, jak můžete posuzovat mojí stylistiku. Víte ono se dá moc hezky kritizovat, když člověk neví o co jde. Zkuste si napsat takovýto článek a brzy zjistíte, že se jedná o poměrně časově náročnou záležitost a potom asi sám uznáte, že pokud člověk pouze nechodí do školy, ale také pracuje, tak už mu nezbývá tolik času na nějaké podstatnější korekce. Pokud se model tohoto serveru vytvořil podle toho co píšete vy, asi by jste si zde mnoho článků nepřečetl, neboť by autoři stále jen korigovali jejich stylistikou podobu. Tolik na vysvětlení. Zdraví Autor
V dalsi casti reakce jste se dopustil dalsiho (jak jsem doufal jiz preziteho) klise: "Jestli se ti to nelibi, napis neco sam." To jako znamena, ze at uz se mi nelibi prace kohokoli, musim ji predelat osobne? Ja proste nechapu, proc nejste schopny rict: "Ok, byly tam chyby, zkusim na to priste dat bacha," a misto toho tady vypoustite podobne demagogicke vylevy.
uplne jasne to vystihuji napr. popisky k obrazkum, napr. "tento obrazek je vytvoreny pomoci vertex shaderu", pricemz neni vysvetleno jak a proc
celkove bych obe clanky hodnotil jako hodne matouci a zbytecne, mozna i skodlive
Prosim, nez se priste opet rozhodnete do fora srat usty, venujte alespon par okamziku hluboke uvaze.