Čo sú shadery v hre? Ako nainštalovať shadery na Minecraft? Čo odpovedajú shadery.

S globálnou informatizáciou sa do nášho sveta dostalo obrovské množstvo nezrozumiteľných pojmov. Vyrovnať sa so všetkými nie je také jednoduché, ako sa na prvý pohľad zdá. Mnohé z nich majú podobný názov, mnohé majú širokú funkčnosť. Je čas zistiť, čo je to shader, odkiaľ pochádza, na čo slúži a čo to je.

Optimalizátor

S najväčšou pravdepodobnosťou ste vášnivým hráčom Minecraftu a preto ste prišli zistiť, čo to je. Okamžite je potrebné poznamenať, že koncept „shader“ je ľahko oddelený od tejto hry a môže „žiť“ oddelene od nej. Rovnako ako mody. Preto sa neoplatí tieto dva pojmy úzko spájať.

Vo všeobecnosti shader pochádza z programovania, objavil sa ako asistent špecialistov. Nazvať tento nástroj optimalizátorom bude asi hlasité, no skutočne zlepšuje obraz v hrách. Takže, keď ste už začali zhruba chápať, čo to je, prejdime k presnému výkladu.

Výklad

Čo je to shader? ktorý vykonávajú procesory grafických kariet. Tieto nástroje sú vyvinuté v špeciálnom jazyku. V závislosti od účelu sa môže líšiť. Potom sú shadery podmienečne preložené do pokynov pre procesory grafického akcelerátora.

Aplikácia

Hneď je potrebné povedať, že aplikácia ako celok je predurčená účelom. Programy sú zabudované v procesoroch grafických kariet, čo znamená, že pracujú na parametroch objektov a obrázkov trojrozmernej grafiky. Môžu vykonávať rôzne úlohy vrátane práce s odrazom, lomom, stmievaním, šmykovými efektmi atď.

Predpoklad

Ľudia sa už dlho snažia zistiť, čo je to shader. Ešte pred týmito programami robili vývojári všetko ručne. Proces vytvárania obrazu z niektorých objektov nebol automatizovaný. Predtým, ako sa hra zrodila, vývojári robili rendering sami. Pracovali s algoritmom, skladali ho na rôzne úlohy. Takto sa objavil návod na nanášanie textúr, video efektov atď.

Samozrejme, niektoré procesy boli stále zabudované do práce grafických kariet. Takéto algoritmy by mohli použiť vývojári. Nepodarilo sa im však vložiť svoje algoritmy na grafickú kartu. Neštandardné inštrukcie mohol vykonávať CPU, ktorý bol pomalší ako GPU.

Príklad

Aby ste pochopili rozdiel, stojí za to pozrieť sa na niekoľko príkladov. Je zrejmé, že v hre môže byť vykresľovaním hardvér a softvér. Všetci si napríklad pamätáme na slávny Quake 2. Voda v hre by teda mohla byť len modrým filtrom, čo sa hardvérového vykresľovania týka. Ale programovým zásahom sa objavila striekajúca voda. Je to rovnaký príbeh s CS 1.6. Hardvérové ​​vykresľovanie poskytlo iba biely záblesk, zatiaľ čo softvérové ​​vykresľovanie pridalo pixelovanú obrazovku.

Prístup

Bolo teda jasné, že je potrebné takéto problémy riešiť. Grafické akcelerátory začali rozširovať počet algoritmov, ktoré boli medzi vývojármi obľúbené. Ukázalo sa, že „napchať“ všetko sa nedá. Bolo potrebné otvoriť prístup k špecialistom na grafické karty.

Predtým, ako existovali hry ako "Minecraft" s modifikáciami a shadermi, vývojári dostali príležitosť pracovať s blokmi GPU v potrubiach, ktoré by mohli byť zodpovedné za rôzne pokyny. Do povedomia sa tak dostali programy s názvom „shader“. Na ich vytvorenie boli špeciálne vyvinuté programovacie jazyky. Grafické karty sa teda začali načítavať nielen štandardnou „geometriou“, ale aj pokynmi pre procesor.

Keď bol takýto prístup možný, začali sa otvárať nové možnosti programovania. Špecialisti mohli riešiť matematické problémy na GPU. Tieto výpočty sa stali známymi ako GPGPU. Tento proces si vyžadoval špeciálne nástroje. Od nVidia CUDA, od Microsoft DirectCompute a OpenCL frameworku.

Typy

Čím viac ľudí sa dozvedelo, čo sú shadery, tým viac informácií o nich a ich schopnostiach bolo odhalených. Pôvodne mali urýchľovače tri procesory. Každý bol zodpovedný za svoj vlastný typ shadera. Postupom času boli nahradené univerzálnym. Každý mal určitú sadu inštrukcií, ktoré mali naraz tri typy shaderov. Napriek zjednoteniu diela sa dodnes zachoval popis každého typu.

Typ Vertex pracoval s vrcholmi tvarov, ktoré majú mnoho tvárí. Zapojených je veľa nástrojov. Hovoríme napríklad o súradniciach textúr, vektoroch tangens, binormál alebo normál.

Geometrický typ pracoval nielen s jedným vrcholom, ale aj s celým primitívom. Pixel bol navrhnutý na spracovanie fragmentov bitmapových ilustrácií a textúr vo všeobecnosti.

V hrách

Ak hľadáte shadery pre Minecraft 1.5.2, potom s najväčšou pravdepodobnosťou chcete len vylepšiť obraz v hre. Aby to bolo možné, programy prešli cez „oheň, vodu a medené rúry“. Shadery boli testované a vylepšené. V dôsledku toho sa ukázalo, že tento nástroj má výhody a nevýhody.

Obrovským plusom je samozrejme jednoduchosť pri zostavovaní rôznych algoritmov. Ide o flexibilitu a citeľné zjednodušenie v procese vývoja hry, a teda o zníženie nákladov. Výsledné virtuálne scény sa stávajú komplexnejšími a realistickejšími. Aj samotný proces vývoja sa mnohonásobne zrýchli.

Z nedostatkov stojí za zmienku len to, že sa budete musieť naučiť jeden z programovacích jazykov a tiež vziať do úvahy, že na rôznych modeloch grafických kariet sa nachádzajú rôzne sady algoritmov.

Inštalácia

Ak ste našli balík shaderov pre Minecraft, musíte pochopiť, že jeho inštalácia má veľa úskalí. Napriek už slabnúcej popularite tejto hry jej verní fanúšikovia stále zostávajú. Nie každý má rád grafiku, najmä v roku 2017. Niektorí si myslia, že vďaka shaderom sa im to podarí vylepšiť. Teoreticky je toto tvrdenie správne. V praxi toho ale veľa nezmeníte.

Ale ak stále hľadáte spôsoby na "Minecraft 1.7", potom buďte v prvom rade opatrní. Samotný proces nie je zložitý. Okrem toho je spolu s akýmkoľvek stiahnutým súborom aj návod na jeho inštaláciu. Hlavná vec je skontrolovať verzie hry a shadera. V opačnom prípade optimalizátor zlyhá.

Na internete je veľa miest, kde si môžete takýto nástroj nainštalovať a stiahnuť. Ďalej musíte rozbaliť archív do ľubovoľného priečinka. Nájdete tam súbor „GLSL-Shaders-Mod-1.7-Installer.jar“. Po spustení sa vám ukáže cesta k hre, ak je správna, tak súhlaste so všetkými nasledujúcimi pokynmi.

Potom musíte presunúť priečinok „shaderpacks“ do „.minecraft“. Teraz, keď spustíte spúšťač, budete musieť prejsť do nastavení. Tu, ak bola inštalácia správna, sa zobrazí riadok "Shaders". Z celého zoznamu si môžete vybrať požadovaný balík.

Ak potrebujete shadery pre Minecraft 1.7.10, potom stačí nájsť shaderpack požadovanej verzie a urobiť to isté. Nestabilné verzie možno nájsť na internete. Niekedy musíte zmeniť, preinštalovať a hľadať vhodný. Je lepšie pozrieť sa na recenzie a vybrať tie najobľúbenejšie.

Úvod

Svet 3D grafiky vrátane hier je plný pojmov. Pojmy, ktoré nemajú vždy jedinú správnu definíciu. Niekedy sa tie isté veci nazývajú odlišne a naopak, rovnaký efekt možno v nastaveniach hry nazvať „HDR“, „Bloom“, „Glow“, potom „Postprocessing“. Väčšina ľudí, z toho, že sa vývojári chvália tým, čo zabudovali do svojho grafického enginu, je zmätená, čo tým vlastne myslia.

Tento článok vám má pomôcť zistiť, čo znamenajú niektoré z týchto slov, ktoré sa v takýchto prípadoch najčastejšie používajú. V rámci tohto článku nebudeme hovoriť o všetkých pojmoch 3D grafiky, ale iba o tých, ktoré sa v posledných rokoch rozšírili ako charakteristické vlastnosti a technológie používané v herných grafických engine a ako názvy pre grafické nastavenia moderných hier. . Na začiatok vám vrelo odporúčam, aby ste sa zoznámili.

Ak vám niečo v tomto článku a v Alexandrových článkoch nie je jasné, potom má zmysel začať od najskoršieho, str. Tieto články sú už, samozrejme, trochu zastarané, ale základné, najdôležitejšie a najdôležitejšie údaje tam sú. Porozprávame sa s vami o pojmoch „vyššej úrovne“. Mali by ste mať základné znalosti o 3D grafike v reálnom čase a grafickej línii. Na druhej strane nečakajte matematické vzorce, akademickú presnosť a príklady kódu – o tom tento článok vôbec nie je. Podmienky

Zoznam výrazov opísaných v článku:

Shader

Shader v širšom zmysle je program na vizuálne definovanie povrchu objektu. Môže ísť o popis osvetlenia, textúrovania, post-processingu atď. Shadery sa vyvinuli z práce Cookových tieňových stromov a Perlinovho pixelového streamovacieho jazyka. RenderMan Shading Language je teraz najznámejší. Programovateľné shadery boli prvýkrát predstavené v programe Pixar RenderMan, ktorý definuje niekoľko typov shaderov: shadery svetelného zdroja, povrchové shadery, posunutie shadery, volume shadery, imager shadery. Tieto shadery sú najčastejšie softvérovo vykonávané univerzálnymi procesormi a nemajú úplnú hardvérovú implementáciu. Neskôr mnohí výskumníci opísali jazyky podobné RenderMan, ale už boli navrhnuté pre hardvérovú akceleráciu: PixelFlow systém (Olano a Lastra), jazyk Quake Shader Language (používaný spoločnosťou id Software v grafickom engine hry Quake III, ktorý popisoval viacpriechodové vykresľovanie) atď. Peercy a jeho kolegovia vyvinuli techniku ​​na spúšťanie programov so slučkami a podmienkami na tradičné hardvérové ​​architektúry využívajúce viacero vykresľovacích prechodov. Shadery RenderMan sa rozbili na niekoľko Počet prechodov, ktoré boli skombinované vo framebufferi. Neskôr sa objavili jazyky, ktoré vidíme hardvérovo akcelerované v DirectX a OpenGL. Takto boli shadery prispôsobené pre grafické aplikácie v reálnom čase.

Prvé video čipy neboli programovateľné a vykonávali iba predprogramované činnosti (pevná funkcia), napríklad algoritmus osvetlenia bol pevne zafixovaný v hardvéri a nič sa nedalo zmeniť. Potom výrobcovia video čipov postupne zavádzali do svojich čipov prvky programovateľnosti, najskôr to boli veľmi slabé schopnosti (NV10, známa ako NVIDIA GeForce 256, už bola schopná niektorých primitívnych programov), ktoré nedostali softvérovú podporu v Microsoft DirectX API, no odvtedy sa možnosti neustále rozširujú. Ďalší krok bol pre NV20 (GeForce 3) aj NV2A (video čip používaný v hernej konzole Microsoft Xbox), ktoré sa stali prvými čipmi s hardvérovou podporou pre DirectX API shadery. Verzia Shader Model 1.0 / 1.1, ktorá sa objavila v DirectX 8, bola veľmi obmedzená, každý shader (najmä pre pixelové) mohol byť relatívne krátky a kombinovať veľmi obmedzený súbor pokynov. Neskôr bol Shader Model 1 (skrátene SM1) vylepšený o Pixel Shader 1.4 (ATI R200), ktorý ponúkal väčšiu flexibilitu, no zároveň mal príliš obmedzené možnosti. Shadery tej doby boli napísané v takzvanom assembleri shader jazyku, ktorý je blízky jazyku symbolických inštrukcií pre procesory na všeobecné použitie. Jeho nízka úroveň prináša určité ťažkosti pre pochopenie kódu a programovanie, najmä keď je programový kód veľký, pretože má ďaleko od elegancie a štruktúrovanosti moderných programovacích jazykov.

Verzia Shader Model 2.0 (SM2), ktorá sa objavila v DirectX 9 (ktorý bol podporovaný videočipom ATI R300, ktorý sa stal prvým GPU s podporou pre shader model verzie 2.0), výrazne rozšírila možnosti real-time shaderov, ponúka dlhšie a zložitejšie shadery a výrazne rozšírenú sadu pokynov. Bola pridaná možnosť vypočítať plávajúcu desatinnú čiarku v pixel shaderoch, čo bolo tiež veľkým vylepšením. DirectX 9, tvárou v tvár schopnostiam SM2, zaviedol aj vysokoúrovňový shader jazyk (HLSL), ktorý je veľmi podobný jazyku C. A efektívny kompilátor, ktorý prekladá programy HLSL do nízkoúrovňového, hardvérovo priateľského kódu. Okrem toho je k dispozícii niekoľko profilov pre rôzne hardvérové ​​architektúry. Teraz môže vývojár napísať jeden HLSL shader kód a skompilovať ho pomocou DirectX do optimálneho programu pre video čip nainštalovaný používateľom. Potom vyšli čipy od NVIDIA, NV30 a NV40, ktoré vylepšili možnosti hardvérových shaderov o krok ďalej, pridali ešte dlhšie shadery, možnosť dynamických prechodov vo vertex a pixel shader, možnosť načítať textúry z vertex shaderov atď. neboli, očakávajú sa koncom roka 2006 v DirectX 10 ...

Vo všeobecnosti shadery pridali do grafického potrubia veľa nových možností na transformáciu a osvetlenie vrcholov a individuálne spracovanie pixelov tak, ako to vývojári každej konkrétnej aplikácie chcú. A napriek tomu, schopnosti hardvérových shaderov ešte neboli v aplikáciách úplne odhalené a keďže ich schopnosti narastajú v každej novej generácii hardvéru, čoskoro uvidíme úroveň práve tých RenderMan shaderov, ktoré sa kedysi zdali pre herné video akcelerátory nedosiahnuteľné. Zatiaľ sú v modeloch shaderov v reálnom čase podporovaných hardvérovými akcelerátormi videa definované iba dva typy shaderov: a (v definícii DirectX 9 API). DirectX 10 sľubuje, že k nim v budúcnosti pribudne.

Vertex Shader

Vertex shadery sú programy vykonávané video čipmi, ktoré vykonávajú matematické operácie s vrcholmi (vertex, tvoria 3D objekty v hrách), inými slovami, poskytujú možnosť vykonávať programovateľné algoritmy na zmenu parametrov vrcholov a ich osvetlenia (T&L - Transformácia a osvetlenie) ... Každý vrchol je definovaný niekoľkými premennými, napríklad polohu vrcholu v 3D priestore určujú súradnice: x, y a z. Vrcholy môžu byť tiež opísané farebnými charakteristikami, súradnicami textúry a podobne. Vertex shadery v závislosti od algoritmov menia tieto údaje v priebehu svojej práce, napríklad pri výpočte a zápise nových súradníc a/alebo farieb. To znamená, že vstupné dáta vertex shaderu sú dáta o jednom vrchole geometrického modelu, ktorý sa práve spracováva. Typicky sú to priestorové súradnice, normály, farebné zložky a súradnice textúry. Výsledné dáta vykonávaného programu slúžia ako vstup pre ďalšiu časť pipeline, rasterizátor vykoná lineárnu interpoláciu vstupných dát pre povrch trojuholníka a pre každý pixel vykoná príslušný pixel shader. Veľmi jednoduchý a drsný (ale dúfam, že jasný) príklad: vertex shader umožňuje zobrať 3D sférický objekt a pomocou vertex shaderu z neho vytvoriť zelenú kocku :).

Pred príchodom video čipu NV20 mali vývojári dva spôsoby, buď použiť svoje vlastné programy a algoritmy, ktoré menia parametre vrcholov, ale potom by všetky výpočty robil CPU (softvér T&L), alebo sa spoliehať na pevné algoritmy vo video čipoch s podporou transformácie hardvéru a osvetlenia (hardvérové ​​T&L). Úplne prvý model shadera DirectX znamenal veľký krok vpred od pevných funkcií pre transformáciu a osvetlenie vrcholov k plne programovateľným algoritmom. Napríklad bolo možné spustiť algoritmus sťahovania úplne na video čipoch a predtým jedinou možnosťou bolo ich spustenie na univerzálnych centrálnych procesoroch. Teraz, so schopnosťami výrazne vylepšenými od vyššie uvedeného čipu NVIDIA, môžete veľa robiť s vrcholmi pomocou vertex shaderov (snáď okrem ich vytvárania) ...

Príklady toho, ako a kde sa používajú vertex shadery:

Pixel Shader

Pixel shadery sú programy vykonávané video čipom počas rastrovania pre každý pixel v obraze, vykonávajú vzorkovanie textúry a/alebo matematické operácie s hodnotou farby a hĺbky (Z-buffer) pixelov. Všetky inštrukcie pixel shader sa vykonávajú pixel po pixeli po dokončení transformácie geometrie a osvetlenia. Výsledkom svojej práce je, že pixel shader vytvára konečnú hodnotu farby pixelu a hodnotu Z pre ďalšiu fázu grafického potrubia, prelínanie. Najjednoduchší príklad pixel shaderu, ktorý možno uviesť: banálny multitexturing, len zmiešanie dvoch textúr (napríklad difúznej a svetelnej mapy) a uloženie výsledku výpočtu na pixel.

Pred príchodom video čipov s hardvérovou podporou pre pixel shadery mali vývojári len možnosti konvenčného multitexturingu a alfa blendingu, čo výrazne obmedzovalo možnosti mnohých vizuálnych efektov a neumožňovalo robiť veľa z toho, čo je teraz dostupné. A ak by sa s geometriou dalo urobiť niečo iné programovo, potom s pixelmi - nie. Skoršie verzie DirectX (až do 7.0 vrátane) vždy vykonávali všetky výpočty vertikálne a v najnovších verziách ponúkali extrémne obmedzené funkcie pre osvetlenie na pixel (pamätajte na EMBM - environment bump mapping a DOT3). Pixel shadery umožnili osvetliť akýkoľvek povrch pixel po pixeli pomocou vývojárom naprogramovaných materiálov. Pixel shadery verzie 1.1 (v zmysle DirectX), ktoré sa objavili v NV20, dokázali nielen multitexturing, ale aj oveľa viac, hoci väčšina hier používajúcich SM1 jednoducho používala tradičné multitexturing na väčšine povrchov, pričom komplexnejšie pixel shadery vykonávali len na časti povrchov, na vytváranie rôznych špeciálnych efektov (každý vie, že voda je stále najbežnejším príkladom použitia pixel shaderov v hrách). Teraz, po objavení sa SM3 a video čipov, ktoré ich podporujú, sa možnosti pixel shaderov rozrástli, aby dokonca umožnili sledovanie lúčov, aj keď s určitými obmedzeniami.

Príklady použitia pixel shaderov:

Procedurálne textúry

Procedurálne textúry sú textúry opísané matematickými vzorcami. Takéto textúry nezaberajú miesto vo videopamäti, sú vytvárané pixel shaderom „za behu“, každý ich prvok (texel) je získaný ako výsledok vykonania zodpovedajúcich príkazov shadera. Najbežnejšie procedurálne textúry: rôzne druhy hluku (napríklad fraktálny hluk), drevo, voda, láva, dym, mramor, oheň atď., teda také, ktoré sa dajú pomerne jednoduchým spôsobom matematicky opísať. Procedurálne textúry vám tiež umožňujú používať animované textúry len s miernou úpravou matematických vzorcov. Napríklad takto urobené oblaky vyzerajú celkom slušne ako v dynamike, tak aj v statike.

Medzi výhody procedurálnych textúr patrí aj neobmedzená miera detailov pre každú textúru, jednoducho nedôjde k pixelizácii, textúra sa generuje vždy podľa veľkosti potrebnej na jej zobrazenie. Animovaný je tiež veľmi zaujímavý, s jeho pomocou môžete robiť vlny na vode bez použitia vopred vypočítaných animovaných textúr. Ďalším plusom takýchto textúr je, že čím viac sú v produkte použité, tým menej práce pre umelcov (aj keď viac pre programátorov) pri vytváraní bežných textúr.

Bohužiaľ, procedurálne textúry sa v hrách ešte poriadne nevyužili, v reálnych aplikáciách je stále často jednoduchšie načítať bežnú textúru, objemy videopamäte rastú míľovými krokmi, do najmodernejších akcelerátorov už inštalujú 512 megabajtov dedikovaného videa pamäť, ktorá je potrebná viac ako si niečo požičať. Navyše stále často robia opak - na urýchlenie matematiky v pixel shaderoch používajú vyhľadávacie tabuľky (LUT) - špeciálne textúry obsahujúce vopred vypočítané hodnoty získané ako výsledok výpočtov. Aby nepočítali niekoľko matematických inštrukcií pre každý pixel, jednoducho načítajú vopred vypočítané hodnoty z textúry. Ale čím ďalej, tým väčší dôraz by sa mal posunúť smerom k matematickým výpočtom, vezmite rovnakú novú generáciu video čipov ATI: RV530 a R580, ktoré majú 12 a 48 pixelové procesory na každé 4 a 16 jednotiek textúry. Navyše, ak sa bavíme o 3D textúrach, pretože ak sa dajú bez problémov umiestniť dvojrozmerné textúry do lokálnej pamäte akcelerátora, tak 3D textúry toho vyžadujú oveľa viac.

Príklady procedurálnych textúr:

Bump Mapping / Specular Bump Mapping

Bump mapping je technika na simuláciu nepravidelností (alebo modelovanie mikroreliéfu, ako chcete) na rovnom povrchu bez veľkých výpočtových nákladov a zmien geometrie. Pre každý pixel na povrchu sa vykoná výpočet osvetlenia na základe hodnôt v špeciálnej výškovej mape nazývanej bumpmap. Zvyčajne ide o 8-bitovú čiernobielu textúru a hodnoty farby textúry nie sú prekryté ako bežné textúry, ale používajú sa na opis drsnosti povrchu. Farba každého texelu určuje výšku príslušného bodu reliéfu, vyššie hodnoty znamenajú vyššiu výšku nad pôvodným povrchom a nižšie hodnoty nižšie. Alebo naopak.

Stupeň osvetlenia bodu závisí od uhla dopadu lúčov svetla. Čím menší je uhol medzi normálou a lúčom svetla, tým väčšie je osvetlenie bodu na povrchu. To znamená, že ak vezmete rovný povrch, normály v každom bode budú rovnaké a osvetlenie bude tiež rovnaké. A ak je povrch nerovný (v skutočnosti sú takmer všetky povrchy v skutočnosti), potom sa normály v každom bode budú líšiť. A osvetlenie je iné, v jednom bode to bude viac, v inom - menej. Odtiaľ pochádza princíp bumpmappingu – na modelovanie nepravidelností pre rôzne body polygónu sa nastavujú normály povrchu, ktoré sa berú do úvahy pri výpočte osvetlenia na pixel. Výsledkom je získanie prirodzenejšieho obrazu povrchu, bumpmapping poskytuje povrchom viac detailov, ako sú nepravidelnosti v tehlách, póry na koži atď., bez zvýšenia geometrickej zložitosti modelu, pretože výpočty sa vykonávajú pri úroveň pixelov. Navyše, keď sa zmení poloha svetelného zdroja, osvetlenie týchto nepravidelností sa zmení správne.

Samozrejme, osvetlenie vrcholov je výpočtovo oveľa jednoduchšie, ale vyzerá to príliš nereálne, najmä s relatívne nízkou poly geometriou, farebná interpolácia pre každý pixel nemôže reprodukovať hodnoty väčšie ako vypočítané hodnoty pre vrcholy. To znamená, že pixely v strede trojuholníka nemôžu byť jasnejšie ako fragmenty v blízkosti vrcholu. V dôsledku toho budú oblasti s náhlymi zmenami osvetlenia, ako je oslnenie a svetelné zdroje veľmi blízko povrchu, fyzicky nesprávne zobrazené, čo sa prejaví najmä v dynamike. Samozrejme, problém sa dá čiastočne vyriešiť zvýšením geometrickej zložitosti modelu, jeho rozdelením na viac vrcholov a trojuholníkov, no najlepšou možnosťou je osvetlenie pixel po pixeli.

Ak chcete pokračovať, musíte si spomenúť na komponenty osvetlenia. Farba povrchového bodu sa vypočíta ako súčet okolitých, difúznych a zrkadlových zložiek zo všetkých svetelných zdrojov na scéne (ideálne zo všetkých, ktoré mnohí často zanedbávajú). Príspevok k tejto hodnote z každého svetelného zdroja závisí od vzdialenosti medzi svetelným zdrojom a bodom na povrchu.

Komponenty osvetlenia:

Teraz k tomu pridáme nejaké mapovanie nerovností:

Jednotná (ambientná) zložka osvetlenia je aproximačné, „počiatočné“ osvetlenie pre každý bod scény, pri ktorom sú všetky body osvetlené rovnako a osvetlenie nezávisí od iných faktorov.
Difúzna zložka svetla závisí od polohy svetelného zdroja a od normály povrchu. Táto zložka osvetlenia je odlišná pre každý vrchol objektu, čo im dodáva objem. Svetlo už nevypĺňa povrch rovnakým odtieňom.
Zrkadlový komponent osvetlenia sa javí ako odraz svetelných lúčov od povrchu. Na jeho výpočet sa okrem vektora polohy svetelného zdroja a normály používajú ešte dva vektory: vektor smeru pohľadu a vektor odrazu. Model osvetlenia Specular ako prvý navrhol Phong Bui-Tong. Tieto svetlice výrazne zvyšujú realizmus obrazu, pretože vzácne skutočné povrchy neodrážajú svetlo, takže zrkadlová zložka je veľmi dôležitá. Najmä v pohybe, pretože oslnenie okamžite ukazuje zmenu polohy fotoaparátu alebo samotného objektu. Neskôr vedci prišli na iné spôsoby výpočtu tejto zložky, zložitejšie (Blinn, Cook-Torrance, Ward), berúc do úvahy distribúciu svetelnej energie, jej absorpciu materiálmi a rozptyl vo forme difúznej zložky.

Takže Specular Bump Mapping sa získa týmto spôsobom:

A pozrime sa to isté na príklade hry Call of Duty 2:


Prvý fragment obrázku je vykresľovaný úplne bez bumpmappingu (), druhý (vpravo hore) je bumpmapping bez zrkadlového komponentu, tretí je so zrkadlovým komponentom normálnej veľkosti, ktorý sa používa v hre, a posledný , sprava dole, s maximálnou možnou zrkadlovou zložkou.

Pokiaľ ide o prvú hardvérovú aplikáciu, niektoré typy bumpmappingu (Emboss Bump Mapping) sa začali používať už v časoch grafických kariet založených na čipoch NVIDIA Riva TNT, ale techniky tej doby boli extrémne primitívne a neboli široko používané. Ďalším známym typom bol Environment Mapped Bump Mapping (EMBM), ale iba grafické karty Matrox mali v tom čase hardvérovú podporu v DirectX a opäť bolo použitie výrazne obmedzené. Potom sa objavil Dot3 Bump Mapping a vtedajšie video čipy (GeForce 256 a GeForce 2) vyžadovali tri prechody na úplné vykonanie takéhoto matematického algoritmu, pretože sú obmedzené dvoma textúrami používanými súčasne. Počnúc NV20 (GeForce3) bolo možné urobiť to isté v jednom prechode pomocou pixel shaderov. Ďalej viac. Začali využívať efektívnejšie techniky ako napr.

Príklady použitia bumpmappingu v hrách:


Displacement Mapping je metóda pridávania detailov do 3D objektov. Na rozdiel od bumpmappingu a iných per-pixelových metód, keď je pomocou výškových máp správne modelované iba osvetlenie bodu, ale jeho poloha v priestore sa nemení, čo dáva len ilúziu zvýšenia zložitosti povrchu, mapy posunutia umožňujú získať skutočné komplexné 3D objekty z vrcholov a polygónov bez obmedzení, ktoré sú vlastné metódam pre jednotlivé pixely. Táto metóda premiestňuje vrcholy trojuholníkov ich normalizáciou o hodnotu založenú na hodnotách v mapách posunu. Mapa posunu je zvyčajne čiernobiela textúra a hodnoty v nej sa používajú na určenie výšky každého bodu na povrchu objektu (hodnoty môžu byť uložené ako 8-bitové alebo 16-bitové čísla) , podobne ako bumpmap. Mapy posunov sa často používajú (v takom prípade sa nazývajú aj výškové mapy) na vytvorenie terénu s kopcami a údoliami. Keďže terén je opísaný dvojrozmernou mapou posunu, je relatívne ľahké ho v prípade potreby zdeformovať, pretože by to vyžadovalo iba úpravu mapy posunu a vykreslenie povrchu na jej základe v ďalšom rámci.

Vytvorenie krajiny pomocou prekrytia máp posunu je jasne znázornené na obrázku. Spočiatku boli použité 4 vrcholy a 2 polygóny, výsledkom čoho bol plnohodnotný kúsok krajiny.

Veľkou výhodou prekrývania máp posunov nie je len možnosť pridávať detaily na povrch, ale takmer úplné vytvorenie objektu. Zoberie sa objekt s nízkym poly, rozdelený (rozčlenený) na viacero vrcholov a polygónov. Vrcholy vytvorené mozaikovaním sa potom posunú pozdĺž normály na základe hodnoty načítanej v mape posunu. Skončíme so zložitým 3D objektom z jednoduchého pomocou vhodnej mapy posunu:


Počet trojuholníkov vytvorených mozaikovaním musí byť dostatočne veľký, aby zachytil všetky detaily definované mapou posunu. Niekedy sa ďalšie trojuholníky vytvárajú automaticky pomocou N-záplat alebo iných metód. Mapy posunu sa najlepšie používajú v spojení s mapovaním nerovností na vytvorenie jemných detailov, kde postačuje správne osvetlenie pixel po pixeli.

Mapovanie posunu bolo prvýkrát podporované v DirectX 9.0. Toto bola prvá verzia tohto API, ktorá podporovala techniku ​​mapovania posunu. DX9 podporuje dva typy mapovania posunu, filtrované a predvzorkované. Prvá metóda bola podporovaná zabudnutým videočipom MATROX Parhelia a druhá - ATI RADEON 9700. Filtrovaná metóda sa líši v tom, že umožňuje použiť mip-levels pre mapy posunu a aplikovať na ne trilineárne filtrovanie. Pri tejto metóde sa úroveň mip mapy posunu vyberie pre každý vrchol na základe vzdialenosti od vrcholu ku kamere, to znamená, že úroveň detailov sa vyberie automaticky. Tým sa dosiahne takmer rovnomerné rozdelenie scény, keď sú trojuholníky približne rovnako veľké.

Mapovanie posunu možno v podstate považovať za techniku ​​kompresie geometrie; používanie máp posunu znižuje množstvo pamäte potrebnej pre určitú úroveň detailov v 3D modeli. Objemné údaje o geometrii sú nahradené jednoduchými 2D posunovými textúrami, zvyčajne 8-bitovými alebo 16-bitovými. To znižuje množstvo pamäte a šírku pásma potrebné na doručovanie údajov o geometrii do video čipu a tieto obmedzenia patria medzi hlavné obmedzenia v dnešných systémoch. Alternatívne, s rovnakými požiadavkami na šírku pásma a úložný priestor, mapovanie posunu umožňuje oveľa zložitejšie geometrické 3D modely. Využitie modelov oveľa menšej zložitosti, kedy sa namiesto desiatok či stoviek tisíc trojuholníkov používajú jednotky tisíc, umožňuje aj zrýchlenie ich animácie. Alebo ho vylepšite použitím zložitejších komplexných algoritmov a techník, ako je napríklad simulácia látky.

Ďalšou výhodou je, že pomocou máp posunutia premení zložité polygonálne 3D siete na viacero 2D textúr, s ktorými sa ľahšie manipuluje. Napríklad pre organizáciu môžete použiť bežné mip-mapping na prekrytie máp posunov. Namiesto pomerne zložitých algoritmov na kompresiu trojrozmerných sietí môžete tiež použiť obvyklé metódy kompresie textúr, dokonca aj podobných JPEG. A pre procedurálnu tvorbu 3D objektov môžete použiť obvyklé algoritmy pre 2D textúry.

Ale mapy premiestnenia majú aj určité obmedzenia, nemožno ich použiť vo všetkých situáciách. Napríklad hladké objekty, ktoré neobsahujú veľa jemných detailov, budú lepšie reprezentované ako štandardné siete alebo iné povrchy vyššej úrovne, ako sú Bézierove krivky. Na druhej strane, veľmi zložité modely, ako sú stromy alebo rastliny, tiež nie je ľahké znázorniť pomocou máp premiestnenia. Problémy sú aj s pohodlnosťou ich používania, to si takmer vždy vyžaduje špecializované nástroje, pretože je veľmi ťažké priamo vytvárať mapy premiestnenia (ak nehovoríme o jednoduchých objektoch, ako je krajina). Mnohé zo základných problémov a obmedzení máp posunutia sú rovnaké ako tieto, pretože tieto dve metódy sú v podstate dve rôzne reprezentácie podobnej myšlienky.

Ako príklad zo skutočných hier uvediem hru, ktorá využíva vzorkovanie textúr z vertex shadera, funkciu, ktorá sa objavila vo video čipoch NVIDIA NV40 a Shader Model 3.0. Textúrovanie vertexov možno použiť na jednoduchú metódu prekrývania máp posunu, ktorú úplne vykonáva GPU, bez mozaikovania (rozdelenia na viac trojuholníkov). Použitie takéhoto algoritmu je obmedzené, má zmysel iba vtedy, ak sú mapy dynamické, to znamená, že sa budú v procese meniť. Ide napríklad o vykreslenie veľkých vodných plôch, ktoré sa robí v hre Pacific Fighters:


Normalmapping je vylepšená verzia už opísanej techniky bumpmapping, jej rozšírená verzia. Bumpmapping vyvinul Blinn už v roku 1978, kde sa normály povrchu menia touto metódou mapovania terénu na základe informácií z máp nerovností. Zatiaľ čo bumpmapping mení iba existujúcu normálu pre povrchové body, normalmapping úplne nahrádza normály načítaním ich hodnôt zo špeciálne pripravenej normálnej mapy. Tieto mapy sú zvyčajne textúry s vopred vypočítanými normálnymi hodnotami, ktoré sú v nich uložené, reprezentované ako farebné zložky RGB (existujú však aj špeciálne formáty pre normálne mapy, vrátane tých s kompresiou), na rozdiel od 8-bitových čiernobielych biele výškové mapy v bumpmappingu.

Vo všeobecnosti, podobne ako bumpmapping, je to tiež „lacná“ metóda na pridávanie detailov do modelov s relatívne nízkou geometrickou zložitosťou, bez použitia skutočnejšej geometrie, len pokročilejšia. Jedným z najzaujímavejších použití techniky je výrazné zvýšenie detailov low-poly modelov pomocou normálnych máp získaných spracovaním rovnakého modelu vysokej geometrickej zložitosti. Normálne mapy poskytujú podrobnejší popis povrchu ako bumpmapping a umožňujú reprezentovať zložitejšie tvary. Nápady na získavanie informácií z vysoko detailných objektov zazneli už v polovici 90. rokov minulého storočia, vtedy však išlo o využitie pre. Neskôr, v roku 1998, boli predstavené nápady na prenos detailov vo forme normálnych máp z high-poly modelov na low-poly.

Normálne mapy poskytujú efektívnejší spôsob ukladania podrobných údajov o povrchu ako jednoduché použitie veľkého počtu polygónov. Ich jediným vážnym obmedzením je, že sa príliš nehodia na veľké detaily, pretože bežné mapovanie v skutočnosti nepridáva polygóny ani nemení tvar objektu, iba vytvára jeho zdanie. Toto je len simulácia detailov na základe výpočtov osvetlenia na úrovni pixelov. Pri extrémnych polygónoch objektu a veľkých uhloch sklonu povrchu je to veľmi citeľné. Preto je najrozumnejším spôsobom, ako použiť normálne mapovanie, urobiť model s nízkym poly dostatočne podrobným, aby sa zachoval základný tvar objektu, a použiť normálne mapy na pridanie jemnejších detailov.

Normálne mapy sa zvyčajne generujú z dvoch verzií modelu, nízkej a vysokej poly. Low poly model pozostáva z minima geometrie, základných tvarov objektu a high poly model obsahuje všetko, čo potrebujete pre maximálny detail. Potom sa pomocou špeciálnych pomôcok navzájom porovnajú, vypočíta sa rozdiel a uloží sa do textúry nazývanej normálna mapa. Pri jej vytváraní môžete dodatočne použiť bump mapu pre veľmi malé detaily, ktoré sa nedajú vymodelovať ani v high-poly modeli (póry kože, iné drobné priehlbiny).

Normálne mapy boli pôvodne reprezentované ako pravidelné RGB textúry, kde farebné zložky R, G a B (0 až 1) sú interpretované ako súradnice X, Y a Z. Každý texel na normálnej mape je reprezentovaný ako normála bodu povrchu. Normálne mapy môžu byť dvoch typov: so súradnicami v modelovom priestore (všeobecný súradnicový systém) alebo tangenciálnom priestore (v ruštine je výraz „tangenciálny priestor“, lokálny súradnicový systém trojuholníka). Druhá možnosť sa používa častejšie. Keď sú normálne mapy prezentované v modelovom priestore, potom musia mať tri komponenty, pretože môžu byť znázornené všetky smery, a keď v lokálnom súradnicovom systéme, tangentovom priestore, môžete si vystačiť s dvomi komponentmi a tretiu získať v pixel shaderi. .

Moderné aplikácie v reálnom čase stále výrazne prekonávajú predrenderované animácie v kvalite obrazu, čo sa týka predovšetkým kvality osvetlenia a geometrickej zložitosti scén. Počet vrcholov a trojuholníkov vypočítaných v reálnom čase je obmedzený. Preto sú metódy na zníženie množstva geometrie veľmi dôležité. Pred normálnym mapovaním bolo vyvinutých niekoľko takýchto metód, ale low poly modely aj s bumpmappingom sú oveľa horšie ako zložitejšie modely. Aj keď má normálne mapovanie niekoľko nedostatkov (najzreteľnejšie – keďže model zostáva low-poly, je to ľahko vidieť z jeho uhlových hraníc), výsledná kvalita vykresľovania sa výrazne zlepšila, takže geometrická zložitosť modelov zostáva nízka. V poslednej dobe je jasne viditeľný nárast popularity tejto techniky a jej použitie vo všetkých populárnych herných engine. Je to dané spojením vynikajúcej výslednej kvality a súčasného zníženia nárokov na geometrickú náročnosť modelov. Bežná technika mapovania sa teraz používa takmer všade, všetky nové hry ju využívajú v čo najširšom rozsahu. Tu je len krátky zoznam známych počítačových hier, ktoré používajú normálne mapovanie: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. Všetky vyzerajú oveľa lepšie ako hry z minulosti, a to aj vďaka používanie máp normál.

Existuje len jeden negatívny dôsledok použitia tejto techniky - zvýšenie objemu textúr. Normálna mapa totiž silne ovplyvňuje, ako bude objekt vyzerať, a musí mať dostatočne veľké rozlíšenie, takže nároky na video pamäť a jej šírku pásma sú dvojnásobné (v prípade nekomprimovaných normálnych máp). Teraz sa však už vyrábajú grafické karty s 512 megabajtmi lokálnej pamäte, ich šírka pásma neustále rastie, metódy kompresie boli vyvinuté špeciálne pre normálne mapy, takže tieto malé obmedzenia v skutočnosti nie sú veľmi dôležité. Efekt normálneho mapovania je oveľa väčší, umožňuje použitie relatívne low-poly modelov, znižuje pamäťové nároky na ukladanie geometrických údajov, zlepšuje výkon a poskytuje veľmi slušný vizuálny výsledok.

Paralaxné mapovanie / Offsetové mapovanie

Po normálnom mapovaní, vyvinutom v roku 1984, nasledovalo reliéfne mapovanie textúr, ktoré predstavili Olivera a Bishop v roku 1999. Je to technika mapovania textúr založená na informáciách o hĺbke. Metóda nenašla uplatnenie v hrách, no svojou myšlienkou prispela k pokračovaniu prác na mapovaní paralaxy a jej zdokonaľovaniu. Kaneko predstavilo mapovanie paralaxy v roku 2001, čo bola prvá účinná metóda na vykreslenie paralaxového efektu po pixeli. V roku 2004 Welsh demonštroval použitie mapovania paralaxy na programovateľných video čipoch.

Táto metóda má snáď najrôznejšie názvy. Uvediem zoznam tých, s ktorými som sa stretol: Parallax Mapping, Offset Mapping, Virtual Displacement Mapping, Per-Pixel Displacement Mapping. Pre stručnosť je v článku použitý prvý nadpis.
Paralaxné mapovanie je ďalšou alternatívou k mapovaniu nerovností a technikám normálneho mapovania, ktoré vám poskytuje ešte lepší prehľad o detailoch povrchu, prirodzenejšie zobrazenie 3D povrchov, tiež bez príliš veľkého zníženia výkonu. Táto technika je podobná mapovaniu posunu aj normálnemu mapovaniu súčasne, je niekde medzi tým. Metóda je tiež navrhnutá tak, aby zobrazovala viac povrchových detailov ako má pôvodný geometrický model. Je to podobné normálnemu mapovaniu, rozdiel je však v tom, že metóda deformuje mapovanie textúry zmenou súradníc textúry tak, že keď sa na povrch pozriete z rôznych uhlov, vyzerá to vypuklé, hoci v skutočnosti je povrch plochý a nemení sa. . Inými slovami, Parallax Mapping je technika na aproximáciu efektu posunu povrchových bodov v závislosti od zmeny uhla pohľadu.

Táto technika posúva súradnice textúry (preto sa táto technika niekedy nazýva offsetové mapovanie), takže povrch vyzerá objemnejšie. Myšlienkou metódy je vrátiť súradnice textúry bodu, kde vektor zobrazenia pretína povrch. Vyžaduje si to sledovanie lúčov (sledovanie lúčov) pre výškovú mapu, ale ak nemá príliš veľa meniacich sa hodnôt ("hladký" alebo "hladký"), od aproximácie možno upustiť. Táto metóda je vhodná pre povrchy s plynule sa meniacimi výškami, bez nesprávneho výpočtu priesečníkov a veľkých hodnôt odsadenia. Takýto jednoduchý algoritmus sa líši od normálneho mapovania iba tromi inštrukciami pixel shader: dvoma matematickými inštrukciami a jedným dodatočným načítaním z textúry. Po vypočítaní novej súradnice textúry sa táto používa ďalej na čítanie ďalších vrstiev textúr: základná textúra, normálna mapa atď. Táto metóda mapovania paralaxy na moderných video čipoch je takmer rovnako účinná ako konvenčné mapovanie textúr a jej výsledkom je realistickejšie zobrazenie povrchu ako jednoduché normálne mapovanie.

Ale použitie konvenčného mapovania paralaxy je obmedzené na výškové mapy s malým rozdielom v hodnotách. "Strmé" nepravidelnosti sú algoritmom spracované nesprávne, objavujú sa rôzne artefakty, "plávajúce" textúry atď. Na zlepšenie techniky mapovania paralaxy bolo vyvinutých niekoľko modifikovaných metód. Niekoľko výskumníkov (Yerex, Donnelly, Tatarchuk, Policarpo) opísalo nové metódy, ktoré zlepšujú počiatočný algoritmus. Takmer všetky nápady sú založené na sledovaní lúčov v pixel shaderi na určenie priesečníka detailov povrchu medzi sebou. Modifikované techniky dostali niekoľko rôznych názvov: Parallax Mapping with Occlusion, Parallax Mapping with Distance Functions, Parallax Occlusion Mapping. Pre stručnosť ich budeme všetky nazývať Parallax Occlusion Mapping.

Metódy mapovania paralaxnej oklúzie tiež zahŕňajú sledovanie lúčov na určenie výšky a zohľadnenie viditeľnosti texelu. Pri pohľade pod uhlom k povrchu sa texely navzájom blokujú, a preto môžete paralaxovému efektu pridať väčšiu hĺbku. Výsledný obraz sa stáva realistickejším a takto vylepšené metódy možno použiť na hlbší reliéf, je skvelý na zobrazenie tehlových a kamenných múrov, chodníkov atď. Je potrebné poznamenať, že hlavný rozdiel medzi mapovaním paralaxy a mapovaním posunu spočíva v tom, že výpočty všetky sú na pixel a nie sú povrchné. To je dôvod, prečo má metóda názvy ako Virtual Displacement Mapping a Per-Pixel Displacement Mapping. Pozrite sa na obrázok, je to ťažké uveriť, ale kamene na chodníku sú tu len efekt pixel po pixeli:

Metóda vám umožňuje efektívne zobraziť detailné povrchy bez miliónov vrcholov a trojuholníkov, ktoré by boli potrebné pri implementácii tejto geometrie. Zároveň sú zachované vysoké detaily (okrem siluet / hrán) a výpočty animácií sú výrazne zjednodušené. Táto technika je lacnejšia ako použitie skutočnej geometrie a používa sa podstatne menej polygónov, najmä v prípadoch s veľmi malými detailmi. Algoritmus má mnoho aplikácií a je najvhodnejší pre kamene, tehly a podobne.

Ďalšou výhodou je, že výškové mapy sa môžu dynamicky meniť (vodná hladina s vlnami, diery po guľkách v stenách a oveľa viac). Nevýhodou tejto metódy je nedostatok geometricky správnych siluet (okrajov objektu), pretože algoritmus je pixel po pixeli a nejde o skutočné mapovanie posunu. Ale šetrí výkon v podobe zníženia záťaže na transformáciu, osvetlenie a animáciu geometrie. Šetrí video pamäť potrebnú na ukladanie veľkých objemov geometrických údajov. Táto technológia tiež ťaží z relatívne jednoduchej integrácie do existujúcich aplikácií a používania známych nástrojov používaných na bežné mapovanie v procese.

Táto technika už bola nedávno použitá v hrách v reálnom živote. Zatiaľ si vystačia s jednoduchým mapovaním paralaxy na základe statických výškových máp, bez sledovania lúčov a výpočtu priesečníkov. Tu je niekoľko príkladov toho, ako možno použiť mapovanie paralaxy v hrách:

Následné spracovanie

V širšom zmysle je post-spracovanie všetko, čo sa deje po hlavných krokoch zobrazovania. Inými slovami, následné spracovanie je akákoľvek zmena obrázka po jeho vykreslení. Post-processing je súbor nástrojov na vytváranie špeciálnych vizuálnych efektov a ich vytváranie sa vykonáva po dokončení hlavnej práce na vykreslení scény, to znamená, že pri vytváraní efektov následného spracovania sa používa hotový rastrový obrázok.

Jednoduchý príklad z fotografie: odfotili ste krásne jazero so zeleňou za jasného počasia. Obloha je veľmi svetlá a stromy sú príliš tmavé. Fotografiu načítate do grafického editora a začnete meniť jas, kontrast a ďalšie parametre pre oblasti obrázka alebo pre celý obrázok. Ale už nemáte možnosť meniť nastavenia fotoaparátu, robíte spracovanie hotového záberu. Toto je následné spracovanie. Alebo iný príklad: výber pozadia pri portrétnej fotografii a použitie filtra na rozostrenie na túto oblasť pre efekt hĺbky poľa s väčšou hĺbkou. To znamená, že keď zmeníte alebo opravíte rám v grafickom editore, robíte následné spracovanie. To isté sa dá urobiť v hre, v reálnom čase.

Existuje mnoho rôznych možností spracovania obrazu po vykreslení. Každý už asi videl v grafických editoroch množstvo takzvaných grafických filtrov. Presne toto sa nazýva postfiltre: rozostrenie, detekcia hrán, zaostrenie, šum, vyhladenie, reliéf atď. Pri aplikácii na 3D vykresľovanie v reálnom čase sa to robí takto - celá scéna sa vykreslí do špeciálnej oblasti, render cieľ a po hlavnom vykreslení sa tento obrázok dodatočne spracuje pomocou pixel shaderov a až potom sa zobrazí na obrazovke. Z postprocesingových efektov v hrách sa najčastejšie používajú,,. Existuje mnoho ďalších post-efektov: šum, záblesky, skreslenie, sépia atď.

Tu je niekoľko hlavných príkladov následného spracovania v herných aplikáciách:

Vysoký dynamický rozsah (HDR)

Vysoký dynamický rozsah (HDR) aplikovaný na 3D grafiku je vykresľovanie s vysokým dynamickým rozsahom. Podstatou HDR je popísať intenzitu a farbu skutočnými fyzikálnymi veličinami. Zvyčajným modelom na popis obrázka je RGB, keď sú všetky farby reprezentované ako súčet základných farieb: červená, zelená a modrá, s rôznou intenzitou vo forme možných celočíselných hodnôt od 0 do 255 pre každú, zakódované pomocou osem bitov na farbu. Pomer maximálnej intenzity k minimu, ktorú dokáže zobraziť konkrétny model alebo zariadenie, sa nazýva dynamický rozsah. Dynamický rozsah modelu RGB je teda 256: 1 alebo 100: 1 cd / m 2 (dva rády). Tento model na popis farby a intenzity sa bežne označuje ako nízky dynamický rozsah (LDR).

Možné hodnoty LDR pre všetky prípady zjavne nestačia, človek vidí oveľa väčší rozsah, najmä pri nízkej intenzite osvetlenia a RGB model je v takýchto prípadoch príliš obmedzený (a pri vysokých intenzitách tiež). Dynamický rozsah ľudského videnia je od 10 -6 do 10 8 cd / m 2, to znamená 10 000 000 000 000 : 1 (14 rádov). Nemôžeme vidieť celý rozsah súčasne, ale rozsah viditeľný pre oko v danom čase je približne 10 000: 1 (štyri rády). Zrak sa prispôsobuje hodnotám z inej časti rozsahu osvetlenia postupne pomocou takzvanej adaptácie, ktorú možno ľahko opísať situáciou s vypínaním svetla v miestnosti v noci - oči vidia spočiatku veľmi málo, ale časom sa prispôsobia zmeneným svetelným podmienkam a uvidia oveľa viac. ... To isté sa stane, keď zmeníte tmavé prostredie späť na svetlé.

Dynamický rozsah modelu popisu RGB teda nestačí na to, aby predstavoval obrazy, ktoré je človek schopný vidieť v skutočnosti, tento model výrazne znižuje možné hodnoty intenzity svetla v hornej a dolnej časti rozsahu. Najbežnejším príkladom uvádzaným v záberoch HDR je obraz zatemnenej miestnosti s oknom do svetlej ulice počas slnečného dňa. S modelom RGB môžete získať buď bežné zobrazenie toho, čo je mimo okna, alebo len to, čo je vo vnútri miestnosti. Hodnoty nad 100 cd / m 2 sú vo všeobecnosti orezané v LDR, čo sťažuje správne zobrazenie jasných svetiel nasmerovaných priamo do fotoaparátu pri 3D vykresľovaní.

Samotné zariadenia na zobrazovanie údajov sa zatiaľ nedajú vážne vylepšiť a má zmysel opustiť LDR vo výpočtoch, môžete použiť skutočné fyzikálne hodnoty intenzity a farby (alebo lineárne úmerné) a zobraziť maximum, čo je možné na monitor. Podstatou zobrazenia HDR je používať hodnoty intenzity a farby v reálnych fyzikálnych veličinách alebo lineárne úmerné a používať nie celé čísla, ale čísla s pohyblivou rádovou čiarkou s vysokou presnosťou (napríklad 16 alebo 32 bitov). To odstraňuje obmedzenia modelu RGB a dramaticky zvyšuje dynamický rozsah obrazu. Potom je však možné zobraziť akýkoľvek HDR obraz na akomkoľvek zobrazovacom médiu (rovnaký RGB monitor) s najvyššou možnou kvalitou pomocou špeciálnych algoritmov.

Vykresľovanie HDR vám umožňuje zmeniť expozíciu po vykreslení obrázka. Umožňuje simulovať efekt adaptácie ľudského zraku (prechod zo svetlých otvorených priestorov do tmavých miestností a naopak), umožňuje fyzikálne správne osvetlenie a je tiež jednotným riešením pre aplikáciu postprocesingových efektov (odlesky, svetlice, rozkvet, pohybová neostrosť). Algoritmy spracovania obrazu, korekcia farieb, gama korekcia, rozmazanie pohybu, rozkvet a ďalšie metódy následného spracovania sa lepšie vykonávajú v reprezentácii HDR.

V aplikáciách 3D vykresľovania v reálnom čase (väčšinou v hrách) sa vykresľovanie HDR začalo používať len nedávno, pretože si vyžaduje výpočet a podporu cieľa vykresľovania vo formátoch s pohyblivou rádovou čiarkou, ktoré boli najskôr dostupné iba na video čipoch s podporou DirectX 9. Zvyčajná cesta vykresľovania HDR v hrách: vykreslenie scény do vyrovnávacej pamäte s pohyblivou rádovou čiarkou, následné spracovanie obrazu v rozšírenom rozsahu farieb (zmena kontrastu a jasu, vyváženie farieb, efekty odleskov a rozmazania pohybu, odlesk objektívu a ako), aplikovanie mapovania tónov na výstup konečného obrazu HDR na zobrazovacie zariadenie LDR. Niekedy sa mapy prostredia používajú vo formátoch HDR, pre statické odrazy na objektoch je veľmi zaujímavé využitie HDR pri simulácii dynamických lomov a odrazov, na to sa dajú použiť aj dynamické mapy vo formátoch s pohyblivou rádovou čiarkou. K tomu môžete pridať ďalšie svetelné mapy, vopred vypočítané a uložené vo formáte HDR. Veľa z vyššie uvedeného sa urobilo napríklad v Half-Life 2: Lost Coast.

HDR rendering je veľmi užitočný pre komplexné následné spracovanie vyššej kvality ako bežné metódy. Rovnaký kvet bude vyzerať realistickejšie pri výpočte v modeli zobrazenia HDR. Napríklad, ako sa to robí v hre Far Cry od Cryteku, používa štandardné techniky vykresľovania HDR: použitie filtrov kvetov od spoločnosti Kawase a operátora mapovania tónov Reinharda.

Bohužiaľ, v niektorých prípadoch môžu herní vývojári skrývať pod názvom HDR práve Bloom filter vypočítaný v bežnom rozsahu LDR. A hoci väčšina toho, čo sa v hrách s vykresľovaním HDR práve robí, je kvalitnejší rozkvet, výhody vykresľovania HDR sa neobmedzujú len na tento post-efekt, je to len najjednoduchšie.

Ďalšie príklady vykresľovania HDR v aplikáciách v reálnom čase:


Tónové mapovanie je proces konverzie rozsahu jasu HDR na rozsah LDR zobrazený výstupným zariadením, ako je monitor alebo tlačiareň, pretože výstup obrázkov HDR na tieto zariadenia si bude vyžadovať konverziu dynamického rozsahu a gamutu modelu HDR na zodpovedajúcu dynamickú LDR. rozsah, najčastejšie RGB. Predsa len, rozsah jasov prezentovaný v HDR je veľmi široký, ide o niekoľko rádov absolútneho dynamického rozsahu naraz, v jednej scéne. A rozsah, ktorý je možné reprodukovať na bežných výstupných zariadeniach (monitory, televízory), je len asi dva rády dynamického rozsahu.

Konverzia HDR na LDR sa nazýva mapovanie tónov a je stratové a napodobňuje vlastnosti ľudského videnia. Tieto algoritmy sa bežne označujú ako príkazy mapovania tónov. Operátori kategorizujú všetky hodnoty jasu obrazu do troch rôznych typov: tmavý, stredný a svetlý. Na základe posúdenia jasu stredných tónov sa upraví celkové osvetlenie, prerozdelia sa hodnoty jasu pixelov scény tak, aby sa dostali do výstupného rozsahu, tmavé pixely sa zosvetlia a svetlé stmavia. Potom sa najjasnejšie pixely na obrázku upravia podľa rozsahu výstupného zariadenia alebo modelu výstupného zobrazenia. Nasledujúci obrázok ukazuje najjednoduchšiu konverziu obrazu HDR na rozsah LDR, lineárnu transformáciu a zložitejší operátor tónového mapovania sa aplikuje na fragment v strede, ktorý funguje tak, ako je opísané vyššie:

Je vidieť, že len s použitím nelineárneho mapovania tónov získate maximum detailov v obraze a ak HDR prevediete na LDR lineárne, tak sa veľa drobností jednoducho stratí. Neexistuje jediný správny algoritmus mapovania tónov; existuje niekoľko operátorov, ktoré poskytujú dobré výsledky v rôznych situáciách. Tu je dobrý príklad dvoch rôznych vyhlásení o mapovaní tónov:

Spolu s vykresľovaním HDR sa v hrách v poslednej dobe používa mapovanie tónov. Bolo možné voliteľne simulovať vlastnosti ľudského zraku: strata ostrosti v tmavých scénach, prispôsobenie sa novým svetelným podmienkam pri prechodoch z veľmi jasných do tmavých oblastí a naopak, citlivosť na zmeny kontrastu, farby... Takto sa imitácia schopnosti videnia prispôsobiť sa vo Far Cry vyzerá. Prvá snímka obrazovky ukazuje obrázok, ktorý hráč vidí, ako sa práve mení z tmavej miestnosti na jasne osvetlený otvorený priestor, a druhá zobrazuje rovnaký obrázok niekoľko sekúnd po adaptácii.

Bloom

Bloom je jedným z filmových post-processingových efektov, ktoré rozjasňujú najjasnejšie časti obrazu. Ide o efekt veľmi jasného svetla, ktorý sa prejavuje vo forme žiary okolo svetlých plôch, po aplikácii Bloom filtra takéto plochy nedostanú len dodatočný jas, svetlo z nich (halo) čiastočne ovplyvňuje tmavšie priľahlé oblasti. na svetlé povrchy v ráme. Najjednoduchší spôsob, ako to ukázať, je príklad:

V 3D Bloom grafike je filter vyrobený pomocou dodatočného postprocesingu – zmiešaním snímky rozmazanej rozostrovacím filtrom (celý snímok alebo jeho jednotlivé svetlé oblasti, filter sa zvyčajne aplikuje niekoľkokrát) a pôvodného snímku. Jeden z najčastejšie používaných algoritmov po filtrovaní rozkvetu v hrách a iných aplikáciách v reálnom čase:

  • Scéna sa vykreslí do framebufferu, intenzita žiary objektov sa zapíše do alfa kanála buffera.
  • Framebuffer sa skopíruje do špeciálnej textúry na spracovanie.
  • Rozlíšenie textúry sa zníži napríklad 4-násobne.
  • Vyhladzovacie filtre (rozostrenie) sa na obrázok aplikujú niekoľkokrát na základe údajov o intenzite zaznamenaných v alfa kanáli.
  • Výsledný obrázok sa zmieša s pôvodným rámom vo framebufferi a výsledok sa zobrazí na obrazovke.

Podobne ako iné typy následného spracovania, aj Bloom sa najlepšie používa pri vykresľovaní vo vysokom dynamickom rozsahu (HDR). Ďalšie príklady spracovania finálneho obrazu pomocou Bloomového filtra z 3D aplikácií v reálnom čase:

Pohybový efekt

Pohybová neostrosť vzniká na fotografiách a filmoch v dôsledku pohybu objektov v zábere počas expozičného času záberu, keď je uzávierka objektívu otvorená. Na snímke nasnímanej fotoaparátom (fotka, film) sa nezobrazuje okamžitá snímka s nulovým trvaním. V dôsledku technologických obmedzení rám zobrazuje určitý časový úsek, počas ktorého sa môžu objekty v ráme posunúť o určitú vzdialenosť, a ak sa tak stane, zobrazia sa všetky polohy pohybujúceho sa objektu počas otvorenej uzávierky objektívu. na ráme ako rozmazaný obraz pozdĺž pohybového vektora ... Stáva sa to, ak sa objekt pohybuje vzhľadom na fotoaparát alebo je fotoaparát relatívne k objektu a množstvo rozmazania nám dáva predstavu o veľkosti rýchlosti objektu.

V trojrozmernej animácii sa v každom danom časovom okamihu (snímka) objekty nachádzajú na určitých súradniciach v trojrozmernom priestore, podobne ako virtuálny fotoaparát s nekonečne vysokou rýchlosťou uzávierky. Výsledkom je, že pri pohľade na rýchlo sa pohybujúce objekty nedochádza k rozmazaniu podobnému tomu, ktoré získa fotoaparát a ľudské oko. Vyzerá to neprirodzene a nereálne. Zvážte jednoduchý príklad: niekoľko gúľ sa otáča okolo nejakej osi. Tu je obrázok toho, ako by tento pohyb vyzeral s rozmazaním a bez neho:

Z obrazu bez rozmazania sa nedá ani povedať, či sa gule pohybujú alebo nie, zatiaľ čo rozmazanie pohybu dáva jasnú predstavu o rýchlosti a smere pohybu objektov. Mimochodom, nedostatok rozmazania pohybu je tiež dôvodom, prečo sa pohyb v hrách pri 25-30 snímkach za sekundu javí trhaný, hoci filmy a videá vyzerajú skvele pri rovnakých parametroch snímkovej frekvencie. Na kompenzáciu nedostatku rozmazania pohybu je žiaduca buď vysoká snímková frekvencia (60 snímok za sekundu alebo viac), alebo použitie dodatočných metód spracovania obrazu na emuláciu efektu rozmazania pohybu. Používa sa na zlepšenie plynulosti animácie a zároveň na efekt fotografického a filmového realizmu.

Najjednoduchším algoritmom rozmazania pohybu pre aplikácie v reálnom čase je použitie údajov z predchádzajúcich snímok animácie na vykreslenie aktuálnej snímky. Existujú však aj efektívnejšie a modernejšie metódy rozmazania pohybu, ktoré nevyužívajú predchádzajúce snímky, ale sú založené na pohybových vektoroch objektov v snímke, pričom do procesu vykresľovania pridávajú len jeden ďalší krok následného spracovania. Efekt rozostrenia môže byť buď na celú obrazovku (zvyčajne sa vykonáva v postprocese), alebo pre jednotlivé, najrýchlejšie sa pohybujúce objekty.

Možné aplikácie efektu rozmazania pohybu v hrách: všetky pretekárske hry (na vytvorenie efektu veľmi vysokej rýchlosti pohybu a na použitie pri sledovaní televíznych záznamov), športové hry (rovnaké záznamy a v hre samotnej môže rozmazanie byť aplikovaný na veľmi rýchlo sa pohybujúce predmety, ako je lopta alebo puk), bojové hry (rýchle pohyby zbraní na blízko, rúk a nôh), mnoho ďalších hier (počas trojrozmerných scén na motore v hre). Tu je niekoľko príkladov post efektov rozmazania pohybu z hier:

Hĺbka ostrosti (DOF)

Hĺbka ostrosti je v skratke rozmazanie objektov v závislosti od ich polohy vzhľadom na ohnisko fotoaparátu. V skutočnom živote, na fotografiách a vo filmoch, nevidíme všetky predmety rovnako jasne, je to spôsobené zvláštnosťou štruktúry oka a štruktúrou optiky fotoaparátov a filmových kamier. Foto a kino optika má určitú vzdialenosť, objekty nachádzajúce sa v takejto vzdialenosti od fotoaparátu sú zaostrené a na obrázku vyzerajú ostro a objekty ďalej od fotoaparátu alebo blízko neho vyzerajú naopak rozmazane, ostrosť sa postupne znižuje s rastúcou alebo klesajúcou vzdialenosťou ...

Ako ste uhádli, toto je fotografia, nie render. V počítačovej grafike je každý objekt vykresleného obrazu dokonale čistý, pretože šošovky a optika nie sú vo výpočtoch napodobňované. Preto, aby sa dosiahol realistický obraz a film, musia sa použiť špeciálne algoritmy, ktoré niečo podobné urobia pre počítačovú grafiku. Tieto techniky simulujú efekt rôzneho zaostrenia na predmety v rôznych vzdialenostiach.

Jednou z bežných techník vykresľovania v reálnom čase je zmiešanie pôvodnej snímky a jej rozmazanej verzie (viacnásobné prechody filtra rozostrenia) na základe údajov o hĺbke pre pixely v obrázku. V hrách existuje viacero využití DOF efektu, napríklad sú to herné videá na engine hry, replaye v športových a závodných hrách. Príklady hĺbky ostrosti v reálnom čase:

Úroveň detailov (LOD)

Úroveň detailov v 3D aplikáciách je metóda, ktorá znižuje zložitosť vykresľovania snímky, znižuje celkový počet polygónov, textúr a iných zdrojov v scéne a vo všeobecnosti znižuje jej zložitosť. Jednoduchý príklad: model hlavnej postavy pozostáva z 10 000 polygónov. V prípadoch, keď sa na spracovávanej scéne nachádza v blízkosti kamery, je dôležité, aby boli použité všetky polygóny, ale vo veľmi veľkej vzdialenosti od kamery bude vo výslednom obraze zaberať len niekoľko pixelov a nie je bod pri spracovaní všetkých 10 000 polygónov. Možno v tomto prípade na približne rovnaké zobrazenie modelu budú stačiť stovky polygónov, prípadne aj pár polygónov a špeciálne pripravená textúra. V súlade s tým má pri stredných vzdialenostiach zmysel použiť model pozostávajúci z viacerých trojuholníkov ako najjednoduchší model a menej ako ten najzložitejší.

Metóda LOD sa zvyčajne používa pri modelovaní a vykresľovaní 3D scén, pričom sa využíva niekoľko úrovní zložitosti (geometrickej alebo inej) pre objekty v pomere k vzdialenosti od nich ku kamere. Túto techniku ​​často používajú vývojári hier na zníženie počtu polygónov v scéne a na zlepšenie výkonu. V blízkosti fotoaparátu sa používajú modely s maximom detailov (počet trojuholníkov, veľkosť textúry, zložitosť textúrovania), pre čo najvyššiu kvalitu obrazu a naopak, keď sú modely odstránené z fotoaparátu, modely s menším počtom trojuholníky sa používajú na zvýšenie rýchlosti vykresľovania. Zmena zložitosti, najmä počtu trojuholníkov v modeli, môže nastať automaticky na základe jedného 3D modelu maximálnej zložitosti, prípadne na základe niekoľkých vopred pripravených modelov s rôznou úrovňou detailov. Použitím modelov s menším množstvom detailov na rôzne vzdialenosti sa zníži odhadovaná zložitosť vykresľovania, takmer bez degradácie celkových detailov obrazu.

Metóda je účinná najmä vtedy, ak je počet objektov na scéne veľký a nachádzajú sa v rôznych vzdialenostiach od fotoaparátu. Vezmite si napríklad športovú hru, ako je hokejový alebo futbalový simulátor. Modely postáv s nízkym poly sa používajú, keď sú ďaleko od fotoaparátu a pri priblížení sú modely nahradené inými s veľkým počtom polygónov. Tento príklad je veľmi jednoduchý a ukazuje podstatu metódy založenej na dvoch úrovniach detailu modelu, ale nikto sa neobťažuje vytvoriť niekoľko úrovní detailov, aby efekt zmeny úrovne LOD nebol príliš viditeľný, takže detaily postupne „rásť“, keď sa objekt približuje.

Okrem vzdialenosti od kamery môžu byť pre LOD dôležité aj ďalšie faktory - celkový počet objektov na obrazovke (keď je v zábere jedna alebo dve postavy, potom sa používajú zložité modely a keď 10-20, prepnúť na jednoduchšie) alebo počet snímok za sekundu (sú nastavené limity hodnôt FPS, pri ktorých sa mení úroveň detailov, napríklad pri FPS pod 30 znižujeme zložitosť modelov na obrazovke, a pri 60, naopak, zvýšiť). Ďalšími možnými faktormi ovplyvňujúcimi úroveň detailov sú rýchlosť pohybu objektu (raketu v pohybe budete mať sotva čas zvážiť, ale slimáka - ľahko), dôležitosť postavy z herného hľadiska (vezmite si rovnaký futbal - pre model hráča, ktorý ovládate, môžete použiť zložitejšiu geometriu a textúry, vidíte to najbližšie a najčastejšie). Všetko závisí od túžob a schopností konkrétneho vývojára. Hlavné je to nepreháňať, otravné sú časté a citeľné zmeny v úrovni detailov.

Pripomínam, že úroveň detailov sa nemusí nevyhnutne týkať len geometrie, metódu možno použiť aj na šetrenie iných zdrojov: pri textúrovaní (hoci video čipy už používajú mipmapping, niekedy má zmysel meniť textúry za chodu iným s rôznymi detailmi), osvetľovacie techniky (blízke objekty sú osvetlené pomocou zložitého algoritmu a vzdialené - pomocou jednoduchého), technika textúrovania (komplexné mapovanie paralaxy sa používa na blízkych povrchoch a normálne mapovanie sa používa na vzdialených) atď. .

Nie je také jednoduché ukázať príklad z hry, na jednej strane sa LOD do určitej miery používa takmer v každej hre, na druhej strane nie vždy sa to dá názorne ukázať, inak by to nemalo zmysel. v samotnom LOD.

Ale v tomto príklade je stále jasné, že najbližší model auta má maximálne detaily, ďalšie dve alebo tri autá sú tiež veľmi blízko tejto úrovni a všetky vzdialené majú viditeľné zjednodušenia, tu sú len tie najvýznamnejšie: žiadne spätné zrkadlá, ŠPZ, stierače a pod. doplnková svetelná výbava. A z najvzdialenejšieho modelu nie je na ceste ani tieň. Toto je algoritmus úrovne detailov v akcii.

Globálne osvetlenie

Je ťažké simulovať realistické osvetlenie scény, každý lúč svetla v skutočnosti sa opakovane odráža a láme, počet týchto odrazov nie je obmedzený. A pri 3D vykresľovaní počet odrazov silne závisí od možností návrhu, akýkoľvek výpočet scény je zjednodušeným fyzikálnym modelom a výsledný obraz sa len blíži k realizmu.

Algoritmy osvetlenia možno rozdeliť do dvoch modelov: priame alebo lokálne osvetlenie a globálne osvetlenie (priame alebo lokálne osvetlenie a globálne osvetlenie). Lokálny model osvetlenia využíva výpočet priameho osvetlenia, svetla zo svetelných zdrojov do prvého priesečníka svetla s nepriehľadným povrchom, nezohľadňuje sa vzájomná interakcia objektov. Hoci sa to takýto model snaží kompenzovať pridaním pozadia alebo rovnomerného (okolitého) osvetlenia, ide o najjednoduchšiu aproximáciu, veľmi zjednodušené osvetlenie zo všetkých nepriamych lúčov svetelných zdrojov, ktoré špecifikuje farbu a intenzitu osvetlenia objektov v neprítomnosti. priamych svetelných zdrojov.

Rovnaké sledovanie lúčov vypočítava osvetlenie povrchov iba priamymi lúčmi zo svetelných zdrojov a každý povrch, aby bol viditeľný, musí byť priamo osvetlený svetelným zdrojom. Na dosiahnutie fotorealistických výsledkov to nestačí, okrem priameho osvetlenia je potrebné počítať aj so sekundárnym osvetlením lúčmi odrazenými od iných plôch. V skutočnom svete sa lúče svetla niekoľkokrát odrážajú od povrchov, až kým úplne nezhasnú. Slnečné svetlo prechádzajúce oknom osvetľuje celú miestnosť, hoci lúče nemôžu priamo dosiahnuť všetky povrchy. Čím je zdroj svetla jasnejší, tým viackrát sa odrazí. Farba odrazovej plochy ovplyvňuje aj farbu odrazeného svetla, napríklad červená stena spôsobí červenú škvrnu na susednom bielom objekte. Tu je jasný rozdiel, výpočet bez a so zohľadnením sekundárneho osvetlenia:

V modeli globálneho osvetlenia, globálneho osvetlenia, je osvetlenie vypočítané s prihliadnutím na vplyv objektov na seba, zohľadňujú sa viacnásobné odrazy a lomy svetelných lúčov od povrchov objektov, žieraviny a podpovrchový rozptyl. Tento model vám umožňuje získať realistickejší obraz, ale komplikuje proces a vyžaduje podstatne viac zdrojov. Existuje niekoľko algoritmov globálneho osvetlenia, my sa rýchlo pozrieme na rádiozitu (výpočet nepriameho osvetlenia) a fotónové mapovanie (výpočet globálneho osvetlenia na základe fotónových máp vopred vypočítaných pomocou sledovania). Existujú aj zjednodušené metódy na simuláciu nepriameho osvetlenia, ako je zmena celkového jasu scény v závislosti od počtu a jasu svetelných zdrojov v nej alebo použitie veľkého počtu bodových svetiel umiestnených okolo scény na simuláciu odrazeného svetla, ale stále toto je ďaleko od skutočného algoritmu. GI.

Algoritmus rádiozity je proces výpočtu sekundárnych odrazov svetelných lúčov z jedného povrchu na druhý, ako aj z prostredia na predmety. Lúče zo svetelných zdrojov sú sledované, kým ich sila neklesne pod určitú úroveň alebo kým lúče nedosiahnu určitý počet odrazov. Toto je bežná GI technika, výpočty sa zvyčajne robia pred vykreslením a výsledky výpočtu možno použiť na vykresľovanie v reálnom čase. Základné myšlienky rádiozity vychádzajú z fyziky prenosu tepla. Povrchy predmetov sú rozdelené na malé oblasti nazývané záplaty a predpokladá sa, že odrazené svetlo sa rovnomerne rozptýli vo všetkých smeroch. Namiesto výpočtu každého lúča pre svetlá sa používa technika spriemerovania, ktorá rozdeľuje svetlá do polí na základe energetických úrovní, ktoré produkujú. Táto energia je úmerne rozdelená medzi povrchové škvrny.

Ďalšou metódou na výpočet globálneho osvetlenia, ktorú navrhol Henrik Wann Jensen, je metóda fotónového mapovania. Fotonické mapovanie je ďalší algoritmus globálneho osvetlenia so sledovaním lúčov, ktorý sa používa na simuláciu interakcie svetelných lúčov s objektmi v scéne. Algoritmus počíta sekundárne odrazy lúčov, lom svetla cez priehľadné povrchy, rozptýlené odrazy. Táto metóda spočíva vo výpočte osvetlenia bodov na povrchu v dvoch priechodoch. Prvým je priame sledovanie svetelných lúčov so sekundárnymi odrazmi, ide o predbežný proces, ktorý sa vykonáva pred hlavným vykresľovaním. Táto metóda vypočítava energiu fotónov smerujúcich zo zdroja svetla k objektom v scéne. Keď fotóny dosiahnu povrch, priesečník, smer a energia fotónu sú uložené vo vyrovnávacej pamäti nazývanej fotónová mapa. Fotonické mapy je možné uložiť na disk pre neskoršie použitie, aby sa nemuseli vykresľovať každý snímok. Odrazy fotónov sa počítajú až do zastavenia práce po určitom počte odrazov alebo pri dosiahnutí určitej energie. V druhom vykresľovaní sa vypočíta osvetlenie pixelov scény priamymi lúčmi, pričom sa vezmú do úvahy údaje uložené vo fotónových mapách, energia fotónu sa pripočíta k energii priameho osvetlenia.

Výpočty globálneho osvetlenia, ktoré využívajú veľký počet sekundárnych odrazov, trvajú oveľa dlhšie ako výpočty priameho osvetlenia. Existujú techniky hardvérového výpočtu rádiového mesta v reálnom čase, ktoré využívajú možnosti najnovších generácií programovateľných video čipov, ale zatiaľ by scény, pre ktoré sa počíta globálne osvetlenie v reálnom čase, mali byť celkom jednoduché a mnohé zjednodušenia sú vytvorené v algoritmoch.

Čo sa ale používa už dlho, je statické vopred vypočítané globálne osvetlenie, ktoré je prijateľné pre scény bez zmeny polohy svetelných zdrojov a veľkých objektov silne ovplyvňujúcich osvetlenie. Koniec koncov, výpočet globálneho osvetlenia nezávisí od polohy pozorovateľa, a ak sa poloha takýchto objektov v scéne a parametre zdrojov osvetlenia v scéne nezmenia, potom predtým vypočítané hodnoty osvetlenia môže byť použité. Toto sa používa v mnohých hrách, kde sa ukladajú údaje o výpočte GI vo forme svetelných máp.

Existujú tiež prijateľné algoritmy na simuláciu dynamického globálneho osvetlenia. Napríklad existuje taká jednoduchá metóda na použitie v aplikáciách v reálnom čase na výpočet nepriameho osvetlenia objektu v scéne: zjednodušené vykreslenie všetkých objektov so zníženými detailmi (okrem toho, pre ktorý sa počíta osvetlenie) do kockatá mapa s nízkym rozlíšením (možno ju použiť aj na zobrazenie dynamických odrazov na povrchu objektu), potom filtrovanie textúry (niekoľko prechodov filtra rozostrenia) a aplikovanie údajov z vypočítanej textúry na osvetlenie tohto objektu ako doplnok k priamemu osvetleniu. V prípadoch, keď je dynamický výpočet príliš náročný, si vystačíte so statickými mapami rádiozity. Príklad z hry MotoGP 2, ktorý jasne ukazuje priaznivý účinok aj takejto jednoduchej napodobeniny GI:



"itemprop =" obrázok ">

"Čo sú to shadery?" Je to veľmi častá otázka zvedavých hráčov a začínajúcich vývojárov hier. V tomto článku vám poviem o týchto hrozných shaderoch prehľadným a zrozumiteľným spôsobom.

Počítačové hry považujem za motor pokroku smerom k fotorealistickým obrazom v počítačovej grafike, povedzme si teda, čo sú to „shadery“ v kontexte videohier.

Predtým, ako sa objavili prvé grafické akcelerátory, všetku prácu pri vykresľovaní snímok videohry odviedol chudobný centrálny procesor.

Kreslenie rámu je vlastne celkom rutinná práca: treba zobrať „geometriu“ – polygonálne modely (svet, postava, zbraň atď.) a vyrastrovať. Čo je rasterizácia? Celý 3D model pozostáva z najmenších trojuholníkov, ktoré rasterizér premení na pixely (čiže „rastrovať“ znamená zmeniť na pixely). Po rastrovaní zoberte textúrne dáta, parametre osvetlenia, hmly atď. a vypočítajte každý výsledný pixel rámca hry, ktorý sa zobrazí hráčovi.

Centrálna procesorová jednotka (CPU - Central Processing Unit) je teda príliš chytrý chlap na to, aby ho prinútil robiť takúto rutinu. Namiesto toho je logické prideliť nejaký druh hardvérového modulu, ktorý odľahčí CPU, aby mohol vykonávať dôležitejšiu intelektuálnu prácu.

Takýmto hardvérovým modulom je grafický akcelerátor alebo grafická karta (GPU - Graphics Processing Unit). Teraz CPU pripraví dáta a zaťaží kolegu rutinnou prácou. Ak vezmeme do úvahy, že GPU už nie je len jeden kolega, ale zástup prisluhovačov-jadier, potom sa s takouto prácou vyrovná naraz.

Zatiaľ sme ale nedostali odpoveď na hlavnú otázku: Čo sú to shadery? Počkaj, už sa k tomu dostávam.

Pekná, zaujímavá grafika blízka fotorealizmu vyžadovala od vývojárov grafických kariet implementáciu mnohých algoritmov na hardvérovej úrovni. Tiene, svetlá, svetlá a tak ďalej. Tento prístup - s implementáciou algoritmov v hardvéri sa nazýva "Fixed pipeline alebo pipeline" a tam, kde sa vyžaduje kvalitná grafika, sa už nenachádza. Jeho miesto zaujal Programmable Pipeline.

Požiadavky hráčov „Poď, prines dobré grafónium! prekvapenie! “, tlačil vývojárov hier (a výrobcov grafických kariet) k čoraz zložitejším algoritmom. Zatiaľ pre nich v určitom bode nie je dostatok hardwarových algoritmov.

Teraz je čas, aby sa grafické karty stali inteligentnejšími. Bolo prijaté rozhodnutie umožniť vývojárom programovať bloky GPU do ľubovoľných potrubí, ktoré implementujú rôzne algoritmy. To znamená, že vývojári hier, grafickí programátori boli teraz schopní písať programy pre grafické karty.

A teraz sme sa konečne dostali k odpovedi na našu hlavnú otázku.

"Čo sú to shadery?"

Shader (anglicky shader - tieňovací program) je program pre grafickú kartu, ktorý sa používa v trojrozmernej grafike na určenie konečných parametrov objektu alebo obrazu, môže obsahovať popis absorpcie a rozptylu svetla, mapovanie textúr, odraz a lom, tieňovanie, povrchový posun atď., mnoho ďalších parametrov.

Čo sú to shadery? Napríklad, môžete získať tento efekt, je to vodný shader aplikovaný na guľu.

Grafický kanál

Výhodou programovateľného potrubia oproti jeho predchodcovi je, že teraz môžu programátori vytvárať svoje vlastné algoritmy sami a nemusia používať pevne zapojené možnosti.

Najprv boli grafické karty vybavené niekoľkými špecializovanými procesormi, ktoré podporujú rôzne sady inštrukcií. Shadery boli rozdelené do troch typov podľa toho, ktorý procesor ich bude vykonávať. Potom sa však grafické karty začali vybavovať univerzálnymi procesormi, ktoré podporujú inštrukčné sady pre všetky tri typy shaderov. Pre popis účelu shadera sa zachovalo rozdelenie shaderov na typy.

Okrem grafických úloh s takýmito inteligentnými grafickými kartami bolo možné vykonávať všeobecné výpočty (nesúvisiace s počítačovou grafikou) na GPU.

Prvýkrát sa plnohodnotná podpora shaderov objavila vo grafických kartách série GeForce 3, ale začiatky boli implementované v GeForce256 (vo forme Register Combiners).

Typy tieňovačov

V závislosti od štádia potrubia sú shadery rozdelené do niekoľkých typov: vertex, fragment (pixel) a geometrický. A v najnovších typoch potrubí sú aj tessellation shadery. Nebudeme podrobne rozoberať grafický kanál, stále uvažujem o tom, že o tom napíšem samostatný článok pre tých, ktorí sa rozhodnú študovať shadery a grafické programovanie. Napíšte do komentárov, ak máte záujem, budem vedieť, či sa oplatí strácať čas.

Vertex shader

Vertex shadery robia animácie postáv, trávy, stromov, vytvárajú vlny na vode a mnoho ďalších vecí. Vo vrcholovom shaderi má programátor prístup k údajom súvisiacim s vrcholmi, napríklad: súradnice vrcholu v priestore, súradnice jeho textúry, jeho farba a normálny vektor.

Geometrický shader

Geometrické shadery sú schopné vytvárať novú geometriu a možno ich použiť na vytváranie častíc, úpravu detailov modelu za chodu, vytváranie siluet a ďalšie. Na rozdiel od predchádzajúceho vrcholu sú schopné spracovať nielen jeden vrchol, ale aj celé primitívum. Primitívom môže byť úsečka (dva vrcholy) a trojuholník (tri vrcholy), a ak existujú informácie o susedných vrcholoch (anglicky priľahlosť) pre trojuholníkové primitívum, možno spracovať až šesť vrcholov.

Pixel shader

Pixel shadery vykonávajú mapovanie textúr, osvetlenie a rôzne efekty textúr, ako je odraz, lom, hmla, Bump Mapping atď. Pixel shadery sa používajú aj na post efekty.

Pixel shader pracuje s bitmapovými rezmi a textúrami – spracováva údaje spojené s pixelmi (napríklad farbu, hĺbku, súradnice textúry). Pixel shader sa používa v poslednej fáze grafického potrubia na vytvorenie fragmentu obrazu.

Na čo píšu shadery?

Spočiatku mohli byť shadery napísané v jazyku podobnom assembleru, ale neskôr existovali jazyky shaderov na vysokej úrovni podobné jazyku C, ako napríklad Cg, GLSL a HLSL.

Takéto jazyky sú oveľa jednoduchšie ako C, pretože úlohy vyriešené s ich pomocou sú oveľa jednoduchšie. Typový systém v takýchto jazykoch odráža potreby grafických programátorov. Preto poskytujú programátorovi špeciálne dátové typy: matice, samplery, vektory atď.

RenderMan

Všetko, o čom sme hovorili vyššie, súvisí s grafikou v reálnom čase. Existuje však grafika, ktorá nie je v reálnom čase. Aký je rozdiel - realtime - real time, teda tu a teraz - dať 60 snímok za sekundu v hre, to je proces v reálnom čase. Ale vykreslenie zložitého rámca pre špičkovú animáciu na niekoľko minút nie je v reálnom čase. Podstata je v čase.

Napríklad grafiku takej kvality ako v najnovších animovaných filmoch štúdia Pixar nedokážeme dostať v reálnom čase. Veľmi veľké renderovacie farmy počítajú svetelné simulácie pomocou úplne odlišných algoritmov, sú veľmi drahé, ale poskytujú takmer fotorealistické obrázky.

Super realistická grafika v hre Sand Piper

Pozrite sa napríklad na túto roztomilú karikatúru, zrnká piesku, vtáčie perie, vlny, všetko vyzerá neuveriteľne reálne.

* Videá je možné zakázať na Youtube, ak sa neotvoria, google pixar sandpiper - krátka karikatúra o odvážnom pieskomilovi je veľmi roztomilá a nadýchaná. Dotkne sa a ukáže, aká skvelá môže byť počítačová grafika.

Tak toto je RenderMan od Pixaru. Stal sa prvým programovacím jazykom shaderov. Rozhranie RenderMan API je de facto štandardom pre profesionálne vykresľovanie a používa sa vo všetkých prácach Pixar aj mimo neho.

Užitočná informácia

Teraz už viete, čo sú shadery, no okrem shaderov existujú aj ďalšie veľmi zaujímavé témy v oblasti vývoja hier a počítačovej grafiky, ktoré vás určite zaujmú:

  • je technika na vytváranie úžasných efektov v moderných videohrách. Prehľadný článok a video s návodmi na vytváranie efektov v Unity3d
  • - Ak uvažujete o rozvoji videohier ako profesionálnej kariéry alebo koníčka, tento článok obsahuje skvelý súbor odporúčaní „kde začať“, „aké knihy čítať“ atď.

Ak máš nejaké otázky

Ako obvykle, ak máte ešte nejaké otázky, opýtajte sa ich v komentároch, vždy odpoviem. Za každé milé slovo alebo opravu chýb by som bol veľmi vďačný.

Tento tutoriál vám pomôže nainštalovať shadery v Minecraft a tým vylepšiť herný svet pridaním dynamických tieňov, hluku vetra a trávy, realistickej vody a oveľa viac.

Okamžite treba poznamenať, že shadery zaťažujú systém pomerne silne, a ak máte slabú alebo integrovanú grafickú kartu, odporúčame zdržať sa inštalácie tohto modu.

Inštalácia pozostáva z dvoch fáz, najprv musíte nainštalovať mod na shadery a potom k nemu ďalšie balíky shaderov

KROK #1 - Inštalácia modu pre shadery

  1. Stiahnite si a nainštalujte Java
  2. Inštalácia OptiFine HD
    alebo Shadersmod;
  3. Výsledný archív rozbalíme na ľubovoľné miesto;
  4. Spustite súbor jar, pretože je inštalatér;
  5. Program vám ukáže cestu k hre, ak je všetko správne, kliknite na Áno, Ok, Ok;
  6. Ísť do .minecraft a vytvorte tam priečinok shaderpacky;
  7. Ideme do spúšťača a v riadku vidíme nový profil s názvom „ShadersMod“, ak nie, vyberte ho ručne.
  8. Ďalej si musíte stiahnuť shaderpacky

KROK č. 2 - Inštalácia shaderpacku

  1. Stiahnite si shaderpack, ktorý vás zaujíma (zoznam na konci článku)
  2. Stlačte klávesy WIN + R
  3. Ísť do .minecraft / shaderpacky... Ak taký priečinok neexistuje, vytvorte ho.
  4. Presuňte alebo extrahujte archív shadera do .minecraft / shaderpacky... Cesta by mala vyzerať takto: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [.fsh a .vsh súbory vnútri]
  5. Spustite Minecraft a choďte Nastavenia> Shaders... Tu uvidíte zoznam dostupných shaderov. Vyberte požadované
  6. V nastaveniach shadera povoľte „tweakBlockDamage“, vypnite „CloudShadow“ a „OldLighting“

Neuveriteľné Shaders Sonic Ether
Shadery Sildur
Shaders Chocapic 13's
sensi277 "s yShaders
Shaders MrMeep_x3's
Naelego's Cel Shaders
Shadery RRe36
DeDelnerove CUDA Shadery
bruceatsr44 "s Acid Shaders
Shadery Beed 28's
Ziipzaapov balík Shader Pack
Shaders robobo1221's
Shadery dvv16's
Super shadery Stazza85
hoo00's Shaders pack B
Mávajúce rastliny Regi24
MrButternuss ShaderPack
Úžasná grafika DethRaid na Nitro Shaderoch
Edi "s Shader ForALLPc" s
CrankerManov TME Shaders
Kadir Nck Shader (pre skate702)
Werrusovi Shaders
Life Nexus Shaders od Knewtonwako
Shaderpack CYBOX
CrapDeShoes CloudShade Alpha
Shader AirLoocke42
CaptTatsu BSL Shaders
Shadery Trilitonu
ShadersMcOfficial "s Bloominx Shaders (Chocapic13" Shaders)
dotModded's Continuum Shaders
Lunar Shaders Qwqx71" (shader chocapic13" s)

Navrhnuté na vykonávanie pomocou procesorov grafických kariet (GPU). Shadery sú zostavené v jednom zo špecializovaných programovacích jazykov (pozri) a zostavené do pokynov pre GPU.

Aplikácia

Pred použitím shaderov sa využívalo procedurálne generovanie textúr (používané napríklad v hre Unreal na vytváranie animovaných textúr vody a ohňa) a multitexturing (na ktorom bol založený shader jazyk použitý v hre Quake 3). Tieto mechanizmy neposkytovali rovnakú flexibilitu ako shadery.

S príchodom rekonfigurovateľných grafických potrubí bolo možné vykonávať matematické výpočty (GPGPU) na GPU. Najznámejšie mechanizmy GPGPU sú nVidia CUDA, Microsoft DirectCompute a open source OpenCL.

Typy tieňovačov

Vertexové shadery

Vertex shader pracuje s údajmi spojenými s vrcholmi mnohostenov, napríklad so súradnicami vrcholu (bodu) v priestore, so súradnicami textúry, s farbou vrcholu, s vektorom tangenty, s binormálnym vektorom, s normálnou vektor. Vertex shader možno použiť na zobrazenie a transformáciu perspektívy vrcholov, generovanie súradníc textúr, výpočet osvetlenia atď.

Vzorový kód pre vertex shader v jazyku:

vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3

Geometrické shadery

Geometrický shader, na rozdiel od vertex shaderu, dokáže spracovať nielen jeden vrchol, ale aj celé primitívum. Primitívom môže byť úsečka (dva vrcholy) a trojuholník (tri vrcholy), a ak existujú informácie o susedných vrcholoch (anglicky priľahlosť) pre trojuholníkové primitívum, možno spracovať až šesť vrcholov. Geometry shader je schopný generovať primitívy za behu (bez použitia centrálneho procesora).

Shadery geometrie boli prvýkrát použité na grafických kartách série Nvidia 8.

Pixelové (fragmentové) shadery

Pixel shader pracuje s bitmapovými rezmi a textúrami – spracováva údaje spojené s pixelmi (napríklad farbu, hĺbku, súradnice textúry). Pixel shader sa používa v poslednej fáze grafického potrubia na vytvorenie fragmentu obrazu.

Vzorový kód pre pixel shader v jazyku:

ps.1.4 texld r0, t0 mul r0, r0, v0

Výhody a nevýhody

výhody:

  • schopnosť zostaviť ľubovoľné algoritmy (flexibilita, zjednodušenie a zníženie nákladov na vývojový cyklus programu, zvýšenie zložitosti a realizmu renderovaných scén);
  • zvýšená rýchlosť vykonávania (v porovnaní s rýchlosťou vykonávania rovnakého algoritmu vykonávaného na centrálnom procesore).

Nevýhody:

  • potreba naučiť sa nový programovací jazyk;
  • existenciu rôznych sád pokynov pre GPU od rôznych výrobcov.

Programovacie jazyky

Veľký počet shader programovacích jazykov bolo vytvorených, aby vyhovovali rôznym potrebám trhu (počítačová grafika má mnoho oblastí použitia).

Jazyky na písanie shaderov zvyčajne poskytujú programátorovi špeciálne dátové typy (matice, samplery, vektory atď.), Súpravu vstavaných premenných a konštánt (na interakciu so štandardnou funkčnosťou 3D API).

Profesionálne stvárnenie

Nasledujú shader programovacie jazyky, ktoré sú zamerané na dosiahnutie maximálnej kvality vykresľovania. V takýchto jazykoch sú vlastnosti materiálov opísané pomocou abstrakcií. To umožňuje ľuďom, ktorí nemajú špeciálne programovacie schopnosti a nepoznajú špecifiká hardvérových implementácií, písať kód. Umelci môžu napríklad napísať tieto shadery, aby poskytli „správny vzhľad“ (mapovanie textúry, umiestnenie svetla atď.).

Spracovanie takýchto shaderov je zvyčajne dosť náročné na zdroje: vytváranie fotorealistických obrázkov si vyžaduje veľa výpočtového výkonu. Väčšinu výpočtov zvyčajne vykonávajú veľké počítačové klastre alebo systémy blade.

RenderMan Programovací jazyk shaderov, implementovaný v softvéri Pixar RenderMan, bol prvým programovacím jazykom shaderov. Rozhranie API RenderMan, vyvinuté Robom Cookom a popísané v špecifikácii rozhrania RenderMan, je de facto štandardom pre profesionálne vykresľovanie, ktorý sa používa v celej práci Pixaru. OSL OSL - Ing. Open Shading Language je shader programovací jazyk vyvinutý spoločnosťou Sony Pictures Imageworks a podobný jazyk. Používa sa v proprietárnom programe „Arnold“, ktorý vyvinula „Sony Pictures Imageworks“ a je určený na vykresľovanie, a vo voľnom programe Blender, ktorý je určený na vytváranie trojrozmernej počítačovej grafiky. Rendering v reálnom čase GLSL GLSL otvorené GL S hading L jazyk) je shader programovací jazyk opísaný v štandarde OpenGL a založený na verzii jazyka opísanom v štandarde ANSI C. Jazyk podporuje väčšinu funkcií ANSI C, podporuje dátové typy často používané pri práci s trojrozmernou grafikou (vektory, matice). Slovo „shader“ v GLSL označuje nezávisle zostavenú jednotku napísanú v tomto jazyku. Slovo "program" sa vzťahuje na kolekciu skompilovaných shaderov, ktoré sú navzájom prepojené. Cg (angl. C pre g rafika) je shader programovací jazyk vyvinutý spoločnosťou nVidia spolu so spoločnosťou Microsoft. Jazyk je podobný jazyku a jazyku HLSL, ktorý vyvinula spoločnosť Microsoft a je súčasťou DirectX 9... Jazyk používa typy „int“, „float“, „half“ (číslo s pohyblivou rádovou čiarkou 16 bitov). Jazyk podporuje funkcie a štruktúry. Jazyk má zvláštne optimalizácie vo forme „zbalených polí“ (