Co jsou shadery ve hře? Jak nainstalovat shadery na Minecraft? Co odpovídají shadery.

S globální informatizací se do našeho světa dostalo obrovské množství nesrozumitelných termínů. Vypořádat se se všemi není tak snadné, jak se na první pohled zdá. Mnoho z nich má podobný název, mnoho z nich má širokou funkčnost. Je čas zjistit, co je shader, odkud pochází, k čemu slouží a co to je.

Optimalizátor

S největší pravděpodobností jste vášnivým hráčem Minecraftu, a proto jste přišli zjistit, co to je. Hned je třeba poznamenat, že koncept „shaderu“ je z této hry klidně oddělen a může od ní „žít“ odděleně. Stejně jako mody. Proto se nevyplatí tyto dva pojmy těsně spojovat.

Obecně platí, že shader pochází z programování, objevil se jako asistent specialistů. Asi bude hlasité nazývat tento nástroj optimalizátorem, ale ve hrách skutečně zlepšuje obraz. Takže když už jste zhruba začali chápat, co to je, přejděme k přesnému výkladu.

Výklad

Co je to shader? kterou provádějí procesory grafických karet. Tyto nástroje jsou vyvinuty ve speciálním jazyce. V závislosti na účelu to může být různé. Poté jsou shadery podmíněně převedeny na instrukce pro procesory grafického akcelerátoru.

aplikace

Je třeba hned říci, že aplikace jako celek je předurčena účelem. Programy jsou zabudovány do procesorů grafických karet, což znamená, že pracují na parametrech objektů a obrázků trojrozměrné grafiky. Mohou provádět různé úkoly, včetně práce s odrazem, lomem, ztmavením, smykovými efekty atd.

Předpoklad

Lidé se dlouho snažili zjistit, co je to shader. Ještě před těmito programy dělali vývojáři vše ručně. Proces vytváření obrazu z některých objektů nebyl automatizovaný. Než se hra zrodila, provedli si rendering sami vývojáři. Pracovali s algoritmem, skládali jej pro různé úkoly. Takže tam byly návody na nanášení textur, video efektů atp.

Některé procesy byly samozřejmě stále zabudovány do práce grafických karet. Takové algoritmy by mohli používat vývojáři. Nepodařilo se jim však uložit své algoritmy na grafickou kartu. Nestandardní instrukce mohl provádět CPU, který byl pomalejší než GPU.

Příklad

Abychom pochopili rozdíl, stojí za to podívat se na několik příkladů. Je zřejmé, že ve hře může být rendering hardware a software. Všichni si například pamatujeme slavný Quake 2. Voda ve hře by tedy mohla být jen modrým filtrem, pokud jde o hardwarové vykreslování. Softwarovým zásahem se ale objevila sprška vody. Je to stejný příběh s CS 1.6. Hardwarové vykreslování poskytlo pouze bílý záblesk, zatímco softwarové vykreslování přidalo pixelovanou obrazovku.

Přístup

Bylo tedy jasné, že je nutné takové problémy řešit. Grafické akcelerátory začaly rozšiřovat počet algoritmů, které byly mezi vývojáři oblíbené. Ukázalo se, že není možné „nacpat“ všechno. Bylo nutné otevřít přístup specialistům na grafické karty.

Než existovaly hry jako „Minecraft“ s mody a shadery, vývojáři dostali příležitost pracovat s bloky GPU v potrubích, které mohly být zodpovědné za různé pokyny. Tak se staly známé programy s názvem „shader“. Pro jejich vytvoření byly speciálně vyvinuty programovací jazyky. Grafické karty se tedy začaly načítat nejen standardní „geometrií“, ale také pokyny pro procesor.

Když byl takový přístup možný, začaly se otevírat nové možnosti programování. Specialisté mohli řešit matematické problémy na GPU. Tyto výpočty se staly známými jako GPGPU. Tento proces vyžadoval speciální nástroje. Od nVidia CUDA, Microsoft DirectCompute a frameworku OpenCL.

Typy

Čím více lidí se dozvědělo, co jsou shadery, tím více informací o nich a jejich schopnostech bylo odhaleno. Zpočátku měly akcelerátory tři procesory. Každý byl zodpovědný za svůj vlastní typ shaderu. Postupem času byly nahrazeny univerzálním. Každý měl určitou sadu instrukcí, které měly tři typy shaderů najednou. Přes sjednocení díla se popis každého typu dochoval dodnes.

Typ Vertex pracoval s vrcholy tvarů, které mají mnoho tváří. Zahrnuje mnoho nástrojů. Mluvíme například o souřadnicích textury, vektorech tečných, binormálních nebo normálních.

Geometrický typ pracoval nejen s jedním vrcholem, ale i s celým primitivem. Pixel byl navržen pro zpracování fragmentů bitmapových ilustrací a textur obecně.

Ve hrách

Pokud hledáte shadery pro "Minecraft 1.5.2", pak s největší pravděpodobností chcete jen vylepšit obraz ve hře. Aby to bylo možné, programy procházely „oheňovými, vodními a měděnými trubkami“. Shadery byly testovány a vylepšovány. V důsledku toho se ukázalo, že tento nástroj má výhody a nevýhody.

Velkou výhodou je samozřejmě jednoduchost při sestavování různých algoritmů. Jedná se o flexibilitu a znatelné zjednodušení v procesu vývoje hry, a tedy o snížení nákladů. Výsledné virtuální scény se stávají komplexnějšími a realističtějšími. Také samotný vývojový proces se mnohonásobně zrychlí.

Z nedostatků stojí za zmínku pouze to, že se budete muset naučit jeden z programovacích jazyků a také vzít v úvahu, že na různých modelech grafických karet jsou umístěny různé sady algoritmů.

Instalace

Pokud jste našli shader pack pro Minecraft, musíte pochopit, že v jeho instalaci je mnoho úskalí. Navzdory již slábnoucí popularitě této hry, její věrní fanoušci stále zůstávají. Ne každý má rád grafiku, zvláště v roce 2017. Někteří si myslí, že díky shaderům se jim to podaří vylepšit. Teoreticky je toto tvrzení správné. V praxi toho ale moc nezměníte.

Ale pokud stále hledáte způsoby na "Minecraft 1.7", pak v první řadě buďte opatrní. Samotný proces není složitý. Navíc spolu s jakýmkoli stažitelným souborem je návod k jeho instalaci. Hlavní věc je zkontrolovat verze hry a shaderu. Jinak optimalizátor selže.

Na internetu je mnoho míst, kde si takový nástroj můžete nainstalovat a stáhnout. Dále musíte archiv rozbalit do libovolné složky. Zde najdete soubor "GLSL-Shaders-Mod-1.7-Installer.jar". Po spuštění se vám ukáže cesta ke hře, pokud je správná, pak odsouhlaste všechny následující pokyny.

Poté musíte přesunout složku „shaderpacks“ do „.minecraft“. Nyní, když spustíte launcher, budete muset přejít do nastavení. Zde, pokud byla instalace správná, se objeví řádek "Shaders". Z celého seznamu si můžete vybrat požadovaný balíček.

Pokud potřebujete shadery pro Minecraft 1.7.10, pak stačí najít shaderpack požadované verze a udělat totéž. Nestabilní verze lze nalézt na internetu. Někdy je třeba vyměnit, přeinstalovat a hledat vhodný. Je lepší se podívat na recenze a vybrat ty nejoblíbenější.

Úvod

Svět 3D grafiky včetně her je plný termínů. Pojmy, které nemají vždy jedinou správnou definici. Někdy se stejné věci nazývají odlišně a naopak, stejný efekt lze v nastavení hry nazvat „HDR“, „Bloom“, „Glow“, poté „Postprocessing“. Většina lidí, z toho, že se vývojáři chlubí tím, co zabudovali do svého grafického enginu, je zmatená, co tím vlastně myslí.

Tento článek vám má pomoci pochopit, co některá z těchto slov, nejčastěji používaných v takových případech, znamenají. V rámci tohoto článku nebudeme hovořit o všech pojmech 3D grafiky, ale pouze o těch, které se v posledních letech rozšířily jako charakteristické rysy a technologie používané v herních grafických enginech a jako názvy pro grafické nastavení moderních her. . Pro začátek vřele doporučuji se s ním seznámit.

Pokud vám něco v tomto článku a v Alexandrových článcích není jasné, pak má smysl začít od prvního, str. Tyto články jsou již samozřejmě poněkud zastaralé, ale základní, nejdůležitější a nejdůležitější údaje tam jsou. Promluvíme si s vámi o pojmech „na vyšší úrovni“. Měli byste mít základní znalosti o 3D grafice v reálném čase a struktuře grafického potrubí. Na druhou stranu nečekejte matematické vzorce, akademickou přesnost a příklady kódu – o tom tento článek vůbec není. Podmínky

Seznam pojmů popsaných v článku:

Shader

Shader v širokém slova smyslu je program pro vizuální definování povrchu objektu. Může se jednat o popis osvětlení, texturování, následného zpracování atd. Shadery vyrostly z Cookových stínových stromů a Perlinova jazyka pro streamování pixelů. RenderMan Shading Language je nyní nejznámější. Programovatelné shadery byly poprvé představeny v RenderMan společnosti Pixar, který definuje několik typů shaderů: shadery světelného zdroje, povrchové shadery, displacement shadery, volume shadery , imager shadery. Tyto shadery jsou nejčastěji softwarově spouštěny univerzálními procesory a nemají plnou hardwarovou implementaci. Později mnoho výzkumníků popsalo jazyky podobné RenderMan, ale byly již navrženy pro hardwarovou akceleraci: systém PixelFlow (Olano a Lastra), Quake Shader Language (používaný id Software v grafickém enginu hry Quake III, který popisoval multi-pass rendering) atd. Peercy a jeho kolegové vyvinuli techniku ​​pro spouštění programů se smyčkami a podmínkami na tradičních hardwarových architekturách pomocí několik vykreslovacích průchodů. Shadery RenderMan se rozpadly na několik Počet průchodů, které byly zkombinovány ve framebufferu. Později se objevily jazyky, které vidíme hardwarově akcelerované v DirectX a OpenGL. Takto byly shadery přizpůsobeny pro grafické aplikace v reálném čase.

Dřívější video čipy nebyly programovatelné a prováděly pouze předem naprogramované akce (pevná funkce), například osvětlovací algoritmus byl pevně zafixován v hardwaru a nebylo možné nic změnit. Poté výrobci video čipů postupně zaváděli do svých čipů prvky programovatelnosti, zprvu to byly velmi slabé schopnosti (NV10, známá jako NVIDIA GeForce 256, již uměla některé primitivní programy), které nedostaly softwarovou podporu v Microsoft DirectX API, ale od té doby se možnosti neustále rozšiřují. Další krok byl pro NV20 (GeForce 3) a NV2A (videočip používaný v herní konzoli Microsoft Xbox), které se staly prvními čipy s hardwarovou podporou pro shadery DirectX API. Verze Shader Model 1.0 / 1.1, která se objevila v DirectX 8, byla velmi omezená, každý shader (zejména u pixelových) mohl být relativně malý a kombinovat velmi omezenou sadu instrukcí. Později byl Shader Model 1 (zkráceně SM1) vylepšen o Pixel Shaders 1.4 (ATI R200), který nabízel větší flexibilitu, ale měl také příliš omezené možnosti. Tehdejší shadery byly psány v tzv. assembleru, který je blízký jazyku assembleru pro procesory pro všeobecné použití. Jeho nízká úroveň přináší určité potíže pro porozumění kódu a programování, zvláště když je programový kód velký, protože má daleko k eleganci a strukturovanosti moderních programovacích jazyků.

Verze Shader Model 2.0 (SM2), která se objevila v DirectX 9 (který byl podporován videočipem ATI R300, který se stal prvním GPU s podporou shader modelu verze 2.0), výrazně rozšířila možnosti real-time shaderů, nabízí delší a složitější shadery a výrazně rozšířenou sadu instrukcí. Byla přidána možnost provádět výpočty s plovoucí desetinnou čárkou v pixel shaderech, což bylo také zásadní vylepšení. DirectX 9, tváří v tvář schopnostem SM2, také představil jazyk pro stínování na vysoké úrovni (HLSL), který je velmi podobný jazyku C. A efektivní kompilátor, který převádí programy HLSL do nízkoúrovňového, hardwarově přívětivého kódu. Navíc je k dispozici několik profilů pro různé hardwarové architektury. Nyní může vývojář napsat jeden kód shaderu HLSL a zkompilovat jej pomocí DirectX do optimálního programu pro videočip nainstalovaný uživatelem. Poté byly vydány čipy od NVIDIA, NV30 a NV40, které vylepšily možnosti hardwarových shaderů o krok dále, přidaly ještě delší shadery, možnost dynamických přechodů ve vertexových a pixel shaderech, možnost načítat textury z vertex shaderů atd. nebyly, očekávají se koncem roku 2006 v DirectX 10 ...

Obecně lze říci, že shadery přidaly do grafického potrubí spoustu nových možností pro transformaci a osvětlení vrcholů a individuální zpracování pixelů tak, jak to vývojáři každé konkrétní aplikace chtějí. A přesto ještě nebyly možnosti hardwarových shaderů v aplikacích plně odhaleny, a jak se jejich schopnosti zvyšují s každou novou generací hardwaru, brzy uvidíme úroveň těch RenderMan shaderů, které se kdysi zdály pro akcelerátory videoher nedosažitelné. V modelech shaderů v reálném čase podporovaných hardwarovými akcelerátory videa jsou zatím definovány pouze dva typy shaderů: a (v definici rozhraní DirectX 9 API). DirectX 10 slibuje, že k nim bude v budoucnu přidáno.

Vertex Shader

Vertex shadery jsou programy spouštěné video čipy, které provádějí matematické operace s vrcholy (vertex, tvoří 3D objekty ve hrách), jinými slovy poskytují možnost spouštět programovatelné algoritmy pro změnu parametrů vrcholů a jejich osvětlení (T&L - Transformace a osvětlení)... Každý vrchol je definován několika proměnnými, například poloha vrcholu ve 3D prostoru je určena souřadnicemi: x, y a z. Vrcholy mohou být také popsány barevnými charakteristikami, souřadnicemi textury a podobně. Vertex shadery v závislosti na algoritmech mění tato data v průběhu své práce, například při výpočtu a zápisu nových souřadnic a/nebo barev. To znamená, že vstupní data vertex shaderu jsou data o jednom vrcholu geometrického modelu, který je právě zpracováván. Obvykle se jedná o prostorové souřadnice, normály, barevné složky a souřadnice textury. Výsledná data prováděného programu slouží jako vstup pro další část pipeline, rasterizer provede lineární interpolaci vstupních dat pro povrch trojúhelníku a pro každý pixel provede odpovídající pixel shader. Velmi jednoduchý a drsný (ale doufám, že jasný) příklad: vertex shader umožňuje vzít 3D kouli objekt a pomocí vertex shaderu z něj vytvořit zelenou krychli :).

Před příchodem video čipu NV20 měli vývojáři dva způsoby, buď použít své vlastní programy a algoritmy, které mění parametry vrcholů, ale pak by všechny výpočty prováděl CPU (softwarové T&L), nebo spoléhat na pevné algoritmy ve videočipech s podporou transformace hardwaru a osvětlení (hardwarové T&L). Úplně první model shaderu DirectX znamenal velký krok vpřed od pevných funkcí pro transformaci a osvětlení vrcholů k plně programovatelným algoritmům. Bylo například možné spustit algoritmus skinování zcela na video čipech a předtím byla jedinou možností jejich provedení na univerzálních centrálních procesorech. Nyní, se schopnostmi výrazně vylepšenými od dob výše zmíněného čipu NVIDIA, můžete s vertexy dělat hodně pomocí vertex shaderů (snad kromě jejich tvorby) ...

Příklady toho, jak a kde se používají vertex shadery:

Pixel Shader

Pixel shadery jsou programy spouštěné videočipem během rastrování pro každý pixel obrazu, provádějí vzorkování textur a/nebo matematické operace s hodnotou barvy a hloubky (Z-buffer) pixelů. Všechny instrukce pixel shaderu se provádějí pixel po pixelu po dokončení transformace geometrie a osvětlení. V důsledku své práce pixel shader vytváří konečnou hodnotu barvy pixelu a hodnotu Z pro další fázi grafického potrubí, prolnutí. Nejjednodušší příklad pixel shaderu, který lze uvést: banální multitexturing, pouhé smíchání dvou textur (například difuzní a lightmap) a uložení výsledku výpočtu na pixel.

Před příchodem video čipů s hardwarovou podporou pixel shaderů měli vývojáři pouze příležitosti pro konvenční multitexturing a alfa blending, což výrazně omezovalo možnosti mnoha vizuálních efektů a neumožňovalo dělat mnoho z toho, co je nyní k dispozici. A pokud by s geometrií šlo udělat něco jiného programově, tak s pixely - ne. Dřívější verze DirectX (až do 7.0 včetně) vždy prováděly všechny výpočty vertikálně a v nejnovějších verzích nabízely extrémně omezenou funkčnost pro osvětlení na pixel (pamatujte na EMBM - mapování nerovností prostředí a DOT3). Pixel shadery umožnily osvětlit jakýkoli povrch pixel po pixelu pomocí vývojářsky naprogramovaných materiálů. Pixel shadery 1.1 (ve smyslu DirectX), které se objevily v NV20, uměly nejen multitexturování, ale také mnohem více, ačkoli většina her používajících SM1 jednoduše používala tradiční multitexturing na většině povrchů a spouštěla ​​složitější pixel shadery pouze na části plochy. povrchy, pro vytváření různých speciálních efektů (každý ví, že voda je stále nejčastějším příkladem použití pixel shaderů ve hrách). Nyní, poté, co se objevily SM3 a video čipy, které je podporují, se schopnosti pixel shaderů rozrostly tak, že s jejich pomocí dokonce umožňují raytracing, i když s určitými omezeními.

Příklady použití pixel shaderů:

Procedurální textury

Procedurální textury jsou textury popsané matematickými vzorci. Takové textury nezabírají místo ve video paměti, jsou vytvářeny pixel shaderem „za běhu“, každý z jejich prvků (texel) je získán jako výsledek provádění odpovídajících příkazů shaderu. Nejběžnější procedurální textury: různé druhy hluku (například fraktální hluk), dřevo, voda, láva, kouř, mramor, oheň atd., tedy takové, které lze poměrně jednoduchým způsobem matematicky popsat. Procedurální textury také umožňují používat animované textury pouze s mírnou úpravou matematických vzorců. Například takto vyrobené mraky vypadají docela slušně jak v dynamice, tak ve statice.

Mezi výhody procedurálních textur patří také neomezená míra detailů pro každou texturu, prostě nedojde k pixelizaci, textura je vždy generována ve velikosti potřebné k jejímu zobrazení. Animovaný je také velký zájem, s jeho pomocí můžete dělat vlny na vodě, aniž byste použili předem vypočítané animované textury. Dalším plusem takových textur je, že čím více se jich v produktu používá, tím méně práce pro umělce (i když více pro programátory) s vytvářením běžných textur.

Procedurální textury se bohužel ve hrách ještě pořádně nevyužily, v reálných aplikacích je stále často jednodušší načíst běžnou texturu, objemy videopaměti rostou mílovými kroky, do nejmodernějších akcelerátorů už instalují 512 megabajtů vyhrazená video paměť, která je potřeba víc než si něco půjčovat. Navíc stále často dělají opak - pro urychlení matematiky v pixel shaderech se používají vyhledávací tabulky (LUT) - speciální textury obsahující předem vypočítané hodnoty získané jako výsledek výpočtů. Aby nepočítali několik matematických instrukcí pro každý pixel, jednoduše přečtou předem vypočítané hodnoty z textury. Ale čím dále, tím více by se měl důraz posunout směrem k matematickým výpočtům, vezměte stejnou novou generaci videočipů ATI: RV530 a R580, které mají 12 a 48 pixelové procesory na každé 4 a 16 texturových jednotek. Navíc pokud se bavíme o 3D texturách, protože pokud lze bez problémů umístit dvourozměrné textury do lokální paměti akcelerátoru, pak toho 3D textury vyžadují mnohem více.

Příklady procedurálních textur:

Bump Mapping / Specular Bump Mapping

Bumpmapping je technika pro simulaci nepravidelností (nebo modelování mikroreliéfu, jak chcete) na rovném povrchu bez velkých nákladů na výpočet a změn geometrie. Pro každý pixel na povrchu se provede výpočet osvětlení na základě hodnot ve speciální výškové mapě zvané bumpmap. Obvykle se jedná o 8bitovou černobílou texturu a hodnoty barev textury se nepřekrývají jako běžné textury, ale používají se k popisu drsnosti povrchu. Barva každého texelu určuje výšku odpovídajícího bodu reliéfu, vyšší hodnoty znamenají vyšší výšku nad původním povrchem a nižší hodnoty nižší. Nebo naopak.

Stupeň osvětlení bodu závisí na úhlu dopadu paprsků světla. Čím menší je úhel mezi normálou a paprskem světla, tím větší je osvětlení bodu na povrchu. To znamená, že pokud vezmete rovný povrch, pak budou normály v každém bodě stejné a osvětlení bude také stejné. A pokud je povrch nerovný (ve skutečnosti téměř všechny povrchy), pak se normály v každém bodě budou lišit. A osvětlení je jiné, v jednom okamžiku to bude více, v jiném - méně. Odtud princip bumpmappingu - pro modelování nepravidelností pro různé body polygonu se nastavují normály povrchu, které se berou v úvahu při výpočtu osvětlení na pixel. Výsledkem je získání přirozenějšího obrazu povrchu, mapování nerovností poskytuje povrchu více detailů, jako jsou hrbolky na cihlách, póry na kůži atd., aniž by se zvýšila geometrická složitost modelu, protože výpočty jsou prováděny na úrovni pixelů. Navíc při změně polohy světelného zdroje se osvětlení těchto nepravidelností mění správně.

Osvětlení vertexů je samozřejmě výpočetně mnohem jednodušší, ale vypadá to příliš nerealisticky, zvláště s geometrií s relativně nízkými poly, barevná interpolace pro každý pixel nemůže reprodukovat hodnoty větší, než jsou vypočítané hodnoty pro vertexy. To znamená, že pixely uprostřed trojúhelníku nemohou být jasnější než fragmenty poblíž vrcholu. V důsledku toho se oblasti s náhlými změnami osvětlení, jako jsou oslnění a světelné zdroje velmi blízko povrchu, fyzicky nezobrazí správně, a to bude patrné zejména v dynamice. Problém lze samozřejmě částečně vyřešit zvýšením geometrické složitosti modelu, jeho rozdělením na více vrcholů a trojúhelníků, ale osvětlení pixel po pixelu je nejlepší variantou.

Chcete-li pokračovat, musíte připomenout součásti osvětlení. Barva povrchového bodu se vypočítá jako součet okolních, difuzních a zrcadlových složek ze všech světelných zdrojů ve scéně (ideálně ze všech, často mnohými opomíjenými). Příspěvek k této hodnotě z každého světelného zdroje závisí na vzdálenosti mezi světelným zdrojem a bodem na povrchu.

Komponenty osvětlení:

Nyní k tomu přidáme nějaké mapování nerovností:

Jednotná (ambientní) složka osvětlení je aproximační, "počáteční" osvětlení pro každý bod scény, při kterém jsou všechny body osvětleny rovnoměrně a osvětlení nezávisí na dalších faktorech.
Difúzní složka světla závisí na poloze zdroje světla a na normále povrchu. Tato složka osvětlení je pro každý vrchol objektu jiná, což jim dodává objem. Světlo již nevyplňuje povrch stejným odstínem.
Spekulární složka osvětlení se projevuje odrazem světelných paprsků od povrchu. Pro jeho výpočet se kromě vektoru polohy zdroje světla a normály používají ještě dva vektory: vektor směru pohledu a vektor odrazu. Model zrcadlového osvětlení poprvé navrhl Phong Bui-Tong. Tyto záblesky výrazně zvyšují realističnost obrazu, protože vzácné skutečné povrchy neodrážejí světlo, takže zrcadlová složka je velmi důležitá. Zejména v pohybu, protože odlesky okamžitě ukazují změnu polohy kamery nebo samotného objektu. Později vědci přišli na jiné způsoby výpočtu této složky, složitější (Blinn, Cook-Torrance, Ward), s přihlédnutím k rozložení světelné energie, její absorpci materiály a rozptylu ve formě difúzní složky.

Specular Bump Mapping se tedy získá tímto způsobem:

A podívejme se na totéž na příkladu hry, Call of Duty 2:


První fragment obrázku je vykreslován zcela bez bumpmappingu (), druhý (vpravo nahoře) je bumpmapping bez zrcadlové složky, třetí je se zrcadlovou složkou normální velikosti, která se používá ve hře, a poslední , zprava dolů, s maximální možnou zrcadlovou složkou.

Pokud jde o první hardwarovou aplikaci, některé typy mapování nerovností (Emboss Bump Mapping) se začaly používat již v dobách grafických karet založených na čipech NVIDIA Riva TNT, ale techniky té doby byly extrémně primitivní a nebyly široce používány. Dalším známým typem byl Environment Mapped Bump Mapping (EMBM), ale pouze grafické karty Matrox měly v té době hardwarovou podporu v DirectX a opět bylo použití značně omezené. Pak se objevil Dot3 Bump Mapping a video čipy té doby (GeForce 256 a GeForce 2) vyžadovaly tři průchody, aby zcela provedly takový matematický algoritmus, protože jsou omezeny dvěma texturami používanými současně. Počínaje NV20 (GeForce3) bylo možné udělat totéž v jednom průchodu pomocí pixel shaderů. Dále více. Začali používat účinnější techniky jako např.

Příklady použití bumpmappingu ve hrách:


Displacement Mapping je metoda přidávání detailů do 3D objektů. Na rozdíl od bumpmappingu a dalších per-pixelových metod, kdy je výškovými mapami správně modelováno pouze osvětlení bodu, ale jeho poloha v prostoru se nemění, což dává pouze iluzi nárůstu složitosti povrchu, displacementové mapy umožňují získat skutečné komplexní 3D objekty z vrcholů a polygonů, bez omezení, které jsou vlastní metodám per-pixel. Tato metoda přemístí vrcholy trojúhelníků jejich normalizací o hodnotu založenou na hodnotách v mapách posunutí. Mapa posunutí je obvykle černobílá textura a hodnoty v ní se používají k určení výšky každého bodu na povrchu objektu (hodnoty lze uložit jako 8bitová nebo 16bitová čísla) , podobně jako bumpmap. Mapy přemístění se často používají (v tomto případě se také nazývají výškové mapy) k vytvoření terénu s kopci a údolími. Vzhledem k tomu, že terén je popsán pomocí dvourozměrné mapy přemístění, lze jej v případě potřeby poměrně snadno deformovat, protože by to vyžadovalo pouze úpravu mapy přemístění a vykreslení povrchu na jejím základě v dalším snímku.

Na obrázku je názorně znázorněna tvorba krajiny pomocí posunovacích map. Zpočátku byly použity 4 vrcholy a 2 polygony, ve výsledku se ukázal plnohodnotný kus krajiny.

Velkou výhodou překryvných map posunů není jen možnost přidávat detaily na povrch, ale téměř kompletní vytvoření objektu. Objekt s nízkým poly se vezme, rozdělí (rozdělí) na více vrcholů a polygonů. Vrcholy vytvořené mozaikováním jsou pak posunuty podél normály na základě hodnoty načtené v mapě posunutí. Skončíme u složitého 3D objektu z jednoduchého pomocí vhodné mapy přemístění:


Počet trojúhelníků vytvořených mozaikováním musí být dostatečně velký, aby zachytil všechny detaily definované mapou posunutí. Někdy se další trojúhelníky vytvářejí automaticky pomocí N-záplat nebo jiných metod. Mapy posunutí se nejlépe používají ve spojení s mapováním nerovností k vytvoření jemných detailů, kde je dostatečné osvětlení pixel po pixelu.

Mapování posunu bylo poprvé podporováno v DirectX 9.0. Toto byla první verze tohoto API, která podporovala techniku ​​mapování posunu. DX9 podporuje dva typy mapování posunutí, filtrované a předvzorkované. První metoda byla podporována zapomenutým videočipem MATROX Parhelia a druhá - ATI RADEON 9700. Filtrovaná metoda se liší v tom, že umožňuje použít mip-levels pro mapy posunů a aplikovat na ně trilineární filtrování. V této metodě je úroveň mip mapy přemístění vybrána pro každý vrchol na základě vzdálenosti od vrcholu ke kameře, to znamená, že úroveň detailů je vybrána automaticky. Tím se dosáhne téměř rovnoměrného rozdělení scény, když jsou trojúhelníky přibližně stejně velké.

Mapování posunutí lze v podstatě chápat jako techniku ​​komprese geometrie; používání map posunutí snižuje množství paměti potřebné pro konkrétní detail 3D modelu. Objemná geometrická data jsou nahrazena jednoduchými 2D texturami posunutí, obvykle 8bitovými nebo 16bitovými. To snižuje množství paměti a šířku pásma potřebné k doručení geometrických dat do GPU, což jsou některá z největších omezení dnešních systémů. Alternativně při stejné šířce pásma a požadavcích na úložiště umožňuje mapování posunu mnohem složitější geometrické 3D modely. Použití modelů mnohem méně složitých, kdy se místo desítek či stovek tisíc trojúhelníků používají jednotky tisíc, umožňuje i zrychlení jejich animace. Nebo jej vylepšete použitím složitějších komplexních algoritmů a technik, jako je simulace látek.

Další výhodou je, že pomocí map přemístění přemění složité polygonální 3D sítě na více 2D textur, které se snáze zpracovávají. Například pro organizaci můžete použít běžné mip-mapping k překrytí map přemístění. Namísto relativně složitých algoritmů pro kompresi trojrozměrných sítí můžete také použít obvyklé metody komprese textur, dokonce i podobných JPEG. A pro procedurální tvorbu 3D objektů můžete použít obvyklé algoritmy pro 2D textury.

Ale mapy přemístění mají také určitá omezení, nelze je použít ve všech situacích. Například hladké objekty, které neobsahují mnoho jemných detailů, budou lépe reprezentovány ve formě standardních sítí nebo jiných povrchů vyšší úrovně, jako jsou Bézierovy křivky. Na druhou stranu velmi složité modely, jako jsou stromy nebo rostliny, také není snadné znázornit pomocí mapy přemístění. Problémy jsou také s pohodlím jejich použití, to téměř vždy vyžaduje specializované nástroje, protože je velmi obtížné přímo vytvářet mapy přemístění (pokud nemluvíme o jednoduchých objektech, jako je krajina). Mnoho z inherentních problémů a omezení map posunutí je stejných jako ty, protože tyto dvě metody jsou v podstatě dvě různé reprezentace podobné myšlenky.

Jako příklad ze skutečných her uvedu hru, která využívá vzorkování textur z vertex shaderu, což je funkce, která se objevila ve videočipech NVIDIA NV40 a Shader Model 3.0. Vertex texturování lze aplikovat na jednoduchou metodu překrývání displacement map zcela prováděnou GPU, bez teselace (rozdělení na více trojúhelníků). Použití takového algoritmu je omezené, mají smysl pouze tehdy, jsou-li mapy dynamické, to znamená, že se budou v procesu měnit. Jedná se například o vykreslení velkých vodních ploch, které se provádí ve hře Pacific Fighters:


Normalmapping je vylepšená verze dříve popsané techniky bumpmappingu, její rozšířená verze. Bumpmapping byl vyvinut Blinnem již v roce 1978, kde jsou normály povrchu změněny touto metodou mapování terénu na základě informací z bump map. Zatímco bumpmapping mění pouze existující normálu pro povrchové body, normalmapping úplně nahrazuje normály načítáním jejich hodnot ze speciálně připravené normální mapy. Tyto mapy jsou obvykle textury s předem vypočítanými normálními hodnotami v nich uloženými, reprezentované jako barevné složky RGB (existují však i speciální formáty pro normální mapy, včetně těch s kompresí), na rozdíl od 8bitové černobílé výšky. mapy v bumpmappingu.

Obecně, stejně jako bump mapping, je to také „levná“ metoda pro přidávání detailů do modelů relativně nízké geometrické složitosti, bez použití reálnější geometrie, pouze pokročilejší. Jedním z nejzajímavějších využití této techniky je výrazné zvýšení detailů low-poly modelů pomocí normálních map získaných zpracováním stejného modelu vysoké geometrické složitosti. Normální mapy poskytují podrobnější popis povrchu než mapování nerovností a umožňují reprezentovat složitější tvary. Nápady na získávání informací z vysoce detailních objektů zazněly v polovině 90. let minulého století, tehdy šlo ale o využití pro. Později, v roce 1998, byly představeny nápady na přenos detailů ve formě normálních map z high-poly modelů na low-poly.

Normální mapy poskytují efektivnější způsob ukládání podrobných povrchových dat než pouhé použití velkého počtu polygonů. Jejich jediným vážným omezením je, že se příliš nehodí na velké detaily, protože běžné mapování ve skutečnosti nepřidává polygony ani nemění tvar objektu, pouze vytváří jeho zdání. Jedná se pouze o simulaci detailů na základě výpočtů osvětlení úrovně pixelů. Při extrémních polygonech objektu a velkých úhlech sklonu plochy je to velmi patrné. Nejrozumnějším způsobem použití normálního mapování je proto vytvořit model s nízkým poly dostatečně podrobným, aby zachoval základní tvar objektu, a použít normální mapy k přidání jemnějších detailů.

Normální mapy jsou obvykle generovány ze dvou verzí modelu, nízké a vysoké poly. Low poly model se skládá z minima geometrie, základních tvarů objektu a high poly model obsahuje vše, co potřebujete pro maximální detaily. Poté se pomocí speciálních utilit mezi sebou porovnají, vypočítá se rozdíl a uloží se do textury zvané normální mapa. Při jeho tvorbě lze navíc využít bump mapu pro velmi malé detaily, které nelze vymodelovat ani v high-poly modelu (póry kůže, jiné drobné prohlubně).

Normální mapy byly původně reprezentovány jako pravidelné RGB textury, kde barevné složky R, G a B (0 až 1) jsou interpretovány jako souřadnice X, Y a Z. Každý texel v normální mapě je reprezentován jako normála bodu povrchu. Normální mapy mohou být dvojího typu: se souřadnicemi v modelovém prostoru (obecný souřadnicový systém) nebo tečným prostorem (v ruštině je termín „tangentový prostor“, místní souřadnicový systém trojúhelníku). Častěji se používá druhá možnost. Když jsou normální mapy prezentovány v modelovém prostoru, pak musí mít tři složky, protože mohou být znázorněny všechny směry, a když jsou v místním souřadnicovém systému, tečném prostoru, pak si vystačíte se dvěma složkami a třetí získáte v pixelu. shader.

Moderní real-time aplikace stále výrazně převyšují předrenderovanou animaci v kvalitě obrazu, to se týká především kvality osvětlení a geometrické složitosti scén. Počet vrcholů a trojúhelníků vypočítaných v reálném čase je omezený. Proto jsou velmi důležité metody pro snížení množství geometrie. Před normálním mapováním bylo vyvinuto několik takových metod, ale low poly modely i s bumpmappingem jsou mnohem horší než složitější modely. I když má normální mapování několik nevýhod (nejzřetelnější - protože model zůstává low-poly, je to snadno vidět na jeho hranatých hranicích), výsledná kvalita vykreslování je znatelně lepší, takže geometrická složitost modelů je nízká. V poslední době je jasně vidět nárůst popularity této techniky a jejího použití ve všech populárních herních enginech. Je to dáno kombinací vynikající výsledné kvality a současného snížení nároků na geometrickou složitost modelů. Normální mapovací technika se nyní používá téměř všude, všechny nové hry ji používají v co nejširší míře. Zde je jen krátký seznam slavných počítačových her využívajících normální mapování: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. Všechny vypadají mnohem lépe než hry z minulosti, včetně použití mapových normálů.

Existuje pouze jeden negativní důsledek použití této techniky - zvýšení objemu textur. Normální mapa totiž silně ovlivňuje, jak bude objekt vypadat, a musí mít dostatečně velké rozlišení, takže požadavky na videopaměť a její šířku pásma jsou dvojnásobné (v případě nekomprimovaných normálních map). Nyní se však již vyrábějí grafické karty s 512 megabajty místní paměti, jejich šířka pásma neustále roste, kompresní metody byly vyvinuty speciálně pro normální mapy, takže tato malá omezení nejsou ve skutečnosti příliš důležitá. Efekt normálního mapování je mnohem větší, umožňuje použití relativně low-poly modelů, snižuje paměťové nároky na ukládání geometrických dat, zlepšuje výkon a poskytuje velmi slušný vizuální výsledek.

Parallax Mapping / Offset Mapping

Normální mapování, vyvinuté již v roce 1984, bylo následováno Relief Texture Mapping, které představili Olivera a Bishop v roce 1999. Je to technika mapování textur založená na informacích o hloubce. Metoda nenašla uplatnění ve hrách, ale svým nápadem přispěla k pokračování prací na mapování paralaxy a jeho zdokonalování. Kaneko představilo mapování paralaxy v roce 2001, což byla první účinná metoda vykreslování efektu paralaxy po pixelech. V roce 2004 Welsh demonstroval použití mapování paralaxy na programovatelných video čipech.

Tato metoda má snad nejrůznější názvy. Uvedu seznam těch, se kterými jsem se setkal: Parallax Mapping, Offset Mapping, Virtual Displacement Mapping, Per-Pixel Displacement Mapping. Pro stručnost je v článku použit první nadpis.
Paralaxní mapování je další alternativou k bump mappingu a normálním mapovacím technikám, která vám poskytuje ještě lepší vhled do detailů povrchu, přirozenější zobrazení 3D povrchů, také bez přílišné ztráty výkonu. Tato technika je podobná mapování posunu i normálnímu mapování zároveň, je někde mezi. Metoda je také navržena tak, aby zobrazovala více povrchových detailů, než má původní geometrický model. Je to podobné normálnímu mapování, ale rozdíl je v tom, že metoda deformuje mapování textur změnou souřadnic textury tak, že když se na povrch podíváte z různých úhlů, vypadá konvexně, ačkoli ve skutečnosti je povrch plochý a nemění se . Jinými slovy, Parallax Mapping je technika pro aproximaci efektu posunu povrchových bodů v závislosti na změně úhlu pohledu.

Tato technika posouvá souřadnice textury (proto se tato technika někdy nazývá offsetové mapování), takže povrch vypadá objemněji. Myšlenkou této metody je vrátit souřadnice textury bodu, kde vektor pohledu protíná povrch. To vyžaduje ray tracing (ray tracing) pro výškovou mapu, ale pokud nemá příliš mnoho měnících se hodnot ("smooth" nebo "smooth"), pak lze upustit od aproximace. Tato metoda je vhodná pro povrchy s plynule se měnícími výškami, bez chybného výpočtu průsečíků a velkých hodnot odsazení. Takový jednoduchý algoritmus se liší od normálního mapování pouze třemi instrukcemi pixel shaderu: dvěma matematickými instrukcemi a jedním dodatečným načtením z textury. Poté, co je vypočítána nová souřadnice textury, je dále použita ke čtení dalších vrstev textur: základní textura, normální mapa atd. Tato metoda mapování paralaxy na moderních video čipech je téměř stejně účinná jako konvenční mapování textur a jejím výsledkem je realističtější zobrazení povrchu než jednoduché normální mapování.

Ale použití konvenčního mapování paralaxy je omezeno na výškové mapy s malým rozdílem v hodnotách. "Strmé" nepravidelnosti jsou algoritmem zpracovávány nesprávně, objevují se různé artefakty, "plovoucí" textury atd. Bylo vyvinuto několik modifikovaných metod pro zlepšení techniky mapování paralaxy. Několik výzkumníků (Yerex, Donnelly, Tatarchuk, Policarpo) popsalo nové metody, které zlepšují počáteční algoritmus. Téměř všechny nápady jsou založeny na sledování paprsků v pixel shaderu k určení průsečíku detailů povrchu mezi sebou. Upravené techniky dostaly několik různých názvů: Parallax Mapping with Occlusion, Parallax Mapping with Distance Functions, Parallax Occlusion Mapping. Pro stručnost je všechny budeme nazývat Parallax Occlusion Mapping.

Metody mapování paralaxní okluze také zahrnují sledování paprsků pro určení výšek a zohlednění viditelnosti texelů. Při pohledu pod úhlem k povrchu se texely vzájemně blokují a s ohledem na to můžete přidat více hloubky efektu paralaxy. Výsledný obraz se stává realističtějším a takto vylepšené metody lze použít pro hlubší reliéf, je skvělý pro zobrazení cihlových a kamenných zdí, chodníků atd. Je třeba zvláště poznamenat, že hlavní rozdíl mezi Parallax Mapping a Displacement Mapping je v tom, že výpočty všechny jsou na pixel a nejsou povrchní. To je důvod, proč má metoda názvy jako Virtual Displacement Mapping a Per-Pixel Displacement Mapping. Podívejte se na obrázek, je to těžké uvěřit, ale kameny na chodníku jsou jen efekt pixel po pixelu:

Metoda umožňuje efektivně zobrazit detailní povrchy bez milionů vrcholů a trojúhelníků, které by byly potřeba při implementaci této geometrie. Zároveň jsou zachovány vysoké detaily (kromě siluet / hran) a výpočty animací jsou výrazně zjednodušeny. Tato technika je levnější než použití skutečné geometrie a používá se výrazně méně polygonů, zejména v případech s velmi malými detaily. Algoritmus má mnoho aplikací a nejlépe se hodí pro kameny, cihly a podobně.

Další výhodou je také to, že výškové mapy se mohou dynamicky měnit (vodní hladina s vlnami, díry po kulkách ve zdech a mnoho dalšího). Nevýhodou metody je nedostatek geometricky správných siluet (hran objektu), protože algoritmus je pixel po pixelu a nejedná se o skutečné mapování posunutí. Ale šetří výkon v podobě snížené zátěže na transformaci, osvětlení a animaci geometrie. Šetří video paměť potřebnou k ukládání velkých objemů geometrických dat. Výhodou této techniky je relativně jednoduchá integrace do existujících aplikací a použití známých utilit používaných pro normální mapování v procesu.

Tato technika již byla použita ve skutečných hrách poslední doby. Zatím si vystačí s jednoduchým mapováním paralaxy na základě statických výškových map, bez sledování paprsků a počítání průniků. Zde je několik příkladů, jak lze mapování paralaxy použít ve hrách:

Následné zpracování

V širokém smyslu je post-processing vše, co se děje po hlavních krocích zobrazování. Jinými slovy, následné zpracování je jakákoliv změna obrázku po jeho vykreslení. Post-processing je sada nástrojů pro vytváření speciálních vizuálních efektů a jejich tvorba se provádí po dokončení hlavní práce na vykreslování scény, to znamená, že při vytváření efektů post-processingu se používá již hotový rastrový obrázek.

Jednoduchý příklad z fotografie: vyfotili jste krásné jezero se zelení za jasného počasí. Obloha je velmi jasná a stromy jsou příliš tmavé. Fotografii načtete do grafického editoru a začnete měnit jas, kontrast a další parametry pro oblasti snímku nebo pro celý snímek. Už ale nemáte možnost měnit nastavení fotoaparátu, děláte zpracování hotového snímku. Toto je následné zpracování. Nebo jiný příklad: výběr pozadí v portrétní fotografii a použití filtru rozostření na tuto oblast pro efekt hloubky ostrosti s větší hloubkou. To znamená, že když změníte nebo opravíte snímek v grafickém editoru, provádíte následné zpracování. Totéž lze provést ve hře v reálném čase.

Existuje mnoho různých možností pro zpracování obrazu po vykreslení. Každý asi viděl v grafických editorech spoustu tzv. grafických filtrů. Přesně tomu se říká postfiltry: rozostření, detekce hran, doostření, šum, vyhlazení, reliéf atd. Při aplikaci na vykreslování 3D v reálném čase se to dělá takto - celá scéna je vykreslena do speciální oblasti, render cíl a po hlavním vykreslení je tento obrázek dodatečně zpracován pomocí pixel shaderů a teprve poté zobrazen na obrazovce. Z post-processingových efektů ve hrách se nejčastěji používají,,. Existuje mnoho dalších post efektů: šum, odlesk, zkreslení, sépie atd.

Zde je několik hlavních příkladů následného zpracování v herních aplikacích:

Vysoký dynamický rozsah (HDR)

Vysoký dynamický rozsah (HDR) použitý na 3D grafiku je vykreslování s vysokým dynamickým rozsahem. Podstatou HDR je popis intenzity a barvy reálnými fyzikálními veličinami. Obvyklým modelem pro popis obrázku je RGB, kdy jsou všechny barvy reprezentovány jako součet primárních barev: červená, zelená a modrá, s různou intenzitou ve formě možných celočíselných hodnot od 0 do 255 pro každou, zakódované pomocí osm bitů na barvu. Poměr maximální intenzity k minimu, které může zobrazit konkrétní model nebo zařízení, se nazývá dynamický rozsah. Dynamický rozsah modelu RGB je tedy 256: 1 nebo 100: 1 cd / m 2 (dva řády). Tento model pro popis barvy a intenzity se běžně označuje jako nízký dynamický rozsah (LDR).

Možné hodnoty LDR pro všechny případy zjevně nestačí, člověk je schopen vidět mnohem větší rozsah, zejména při nízké intenzitě světla, a RGB model je v takových případech (a při vysokých intenzitách také) příliš omezený. Dynamický rozsah lidského vidění je od 10 -6 do 10 8 cd/m 2, tedy 10 000 000 000 000:1 (14 řádů). Nemůžeme vidět celý rozsah současně, ale rozsah viditelný okem v daném okamžiku je přibližně 10 000: 1 (čtyři řády). Zrak se přizpůsobuje hodnotám z jiné části rozsahu osvětlení postupně pomocí tzv. adaptace, kterou lze snadno popsat situací s nočním zhasínáním světla v místnosti - oči vidí zpočátku velmi málo, ale postupem času se přizpůsobí změněným světelným podmínkám a vidí mnohem více. ... Totéž se stane, když změníte tmavé prostředí zpět na světlé.

Dynamický rozsah popisného modelu RGB tedy nestačí k reprezentaci obrazů, které je člověk schopen vidět ve skutečnosti, tento model výrazně snižuje možné hodnoty intenzity světla v horní a dolní části rozsahu. Nejběžnějším příkladem uváděným v materiálech HDR je obrázek zatemněné místnosti s oknem na světlé ulici za slunečného dne. S modelem RGB můžete získat buď normální zobrazení toho, co je za oknem, nebo pouze to, co je uvnitř místnosti. Hodnoty větší než 100 cd/m 2 v LDR jsou obecně oříznuty, což je důvod, proč je při 3D vykreslování obtížné správně zobrazit jasné zdroje světla nasměrované přímo do kamery.

Samotná zařízení pro zobrazování dat zatím nelze vážně vylepšit a má smysl opustit LDR ve výpočtech, můžete použít skutečné fyzikální hodnoty intenzity a barvy (nebo lineárně úměrné) a zobrazit maximum, co lze na obrazovka. Podstatou zobrazení HDR je používat hodnoty intenzity a barev v reálných fyzikálních veličinách nebo lineárně úměrné a používat nikoli celá čísla, ale čísla s plovoucí desetinnou čárkou s vysokou přesností (například 16 nebo 32 bitů). To odstraňuje omezení modelu RGB a dramaticky zvyšuje dynamický rozsah obrazu. Ale pak lze jakýkoli HDR obraz zobrazit na libovolném zobrazovacím médiu (stejný RGB monitor) s nejvyšší možnou kvalitou pomocí speciálních algoritmů.

Vykreslování HDR vám umožňuje změnit expozici poté, co jsme obrázek vyrenderovali. Umožňuje simulovat efekt adaptace lidského zraku (přechod ze světlých otevřených prostorů do tmavých místností a naopak), umožňuje fyzikálně správné osvětlení a je také jednotným řešením pro aplikaci post-processingových efektů (oslnění, světlice, květ , rozostření pohybu). Algoritmy zpracování obrazu, barevná korekce, gama korekce, rozmazání pohybu, květ a další metody následného zpracování se lépe provádějí v reprezentaci HDR.

V aplikacích pro vykreslování 3D v reálném čase (hlavně ve hrách) se vykreslování HDR začalo používat teprve nedávno, protože vyžaduje výpočty a podporu pro cíl vykreslování ve formátech s plovoucí desetinnou čárkou, které byly nejprve dostupné pouze na video čipech s podporou DirectX 9. Obvyklý způsob vykreslování HDR ve hrách: vykreslení scény do vyrovnávací paměti s plovoucí desetinnou čárkou, následné zpracování obrazu v rozšířeném barevném rozsahu (změna kontrastu a jasu, vyvážení barev, efekty odlesků a rozmazání pohybu, odlesk objektivu a podobně), aplikováním mapování tónů pro výstup konečného obrazu HDR na zobrazovací zařízení LDR. Někdy se používají mapy prostředí ve formátech HDR, pro statické odrazy na předmětech je velmi zajímavé využití HDR při simulaci dynamických lomů a odrazů, k tomu lze využít i dynamické mapy ve formátech s plovoucí desetinnou čárkou. K tomu můžete přidat další světelné mapy, předem vypočítané a uložené ve formátu HDR. Mnohé z výše uvedeného bylo provedeno například v Half-Life 2: Lost Coast.

Vykreslování HDR je velmi užitečné pro komplexní následné zpracování vyšší kvality než běžné metody. Stejný květ bude vypadat realističtěji při výpočtu v modelu zobrazení HDR. Například, jak se to dělá ve hře Far Cry od Cryteku, používá standardní techniky vykreslování HDR: použití filtrů květů poskytovaných Kawase a operátora mapování tónů Reinharda.

Bohužel v některých případech mohou herní vývojáři skrývat pod názvem HDR právě Bloomův filtr počítaný v obvyklém rozsahu LDR. A zatímco většina toho, co se právě teď dělá ve hrách s vykreslováním HDR, je nejkvalitnější rozkvět, výhody vykreslování HDR nejsou omezeny na tento post-efekt, je to jen nejjednodušší.

Další příklady vykreslování HDR v aplikacích v reálném čase:


Mapování tónů je proces převodu rozsahu jasu HDR na rozsah LDR zobrazený výstupním zařízením, jako je monitor nebo tiskárna, protože výstup obrázků HDR na ně bude vyžadovat převod dynamického rozsahu a gamutu modelu HDR na odpovídající dynamickou LDR. rozsah, nejčastěji RGB. Ostatně rozsah jasů prezentovaný v HDR je velmi široký, jde o několik řádů absolutního dynamického rozsahu najednou, v jedné scéně. A rozsah, který lze reprodukovat na běžných výstupních zařízeních (monitory, televizory), je pouze asi dva řády dynamického rozsahu.

Převod HDR na LDR se nazývá mapování tónů a je ztrátové a napodobuje vlastnosti lidského vidění. Tyto algoritmy se běžně označují jako příkazy mapování tónů. Operátoři kategorizují všechny hodnoty jasu obrazu do tří různých typů: tmavý, střední a jasný. Na základě posouzení jasu středních tónů se koriguje celkové osvětlení, přerozdělí se hodnoty jasu pixelů ve scéně tak, aby se dostaly do výstupního rozsahu, tmavé pixely se zesvětlí a světlé ztmaví. Potom se nejjasnější obrazové body v obrazu upraví na rozsah výstupního zařízení nebo modelu výstupního zobrazení. Následující obrázek ukazuje nejjednodušší převod HDR obrazu do rozsahu LDR, lineární transformaci a složitější operátor tónového mapování je aplikován na fragment ve středu, který funguje tak, jak je popsáno výše:

Je vidět, že pouze s použitím nelineárního mapování tónů získáte maximum detailů v obraze a pokud převedete HDR na LDR lineárně, tak se mnoho drobností jednoduše ztratí. Neexistuje jediný správný algoritmus mapování tónů, existuje několik operátorů, které poskytují dobré výsledky v různých situacích. Zde je dobrý příklad dvou různých příkazů mapování tónů:

Spolu s vykreslováním HDR se v poslední době ve hrách používá mapování tónů. Bylo možné volitelně simulovat vlastnosti lidského zraku: ztráta ostrosti v tmavých scénách, přizpůsobení se novým světelným podmínkám při přechodech z velmi jasných do tmavých oblastí a naopak, citlivost na změny kontrastu, barvy... Takto se imitace schopnosti vidění přizpůsobit se ve Far Cry vypadá. První snímek obrazovky ukazuje obrázek, který hráč vidí, jak se právě mění z temné místnosti do jasně osvětleného otevřeného prostoru, a druhý ukazuje stejný obrázek několik sekund po adaptaci.

Květ

Bloom je jedním z filmových efektů následného zpracování, které zesvětlí nejjasnější části obrazu. Jedná se o efekt velmi jasného světla, který se projevuje ve formě záře kolem světlých povrchů, po aplikaci Bloom filtru takové povrchy nejen dostávají dodatečný jas, světlo z nich (halo) částečně ovlivňuje tmavší oblasti sousedící s světlé plochy v rámu. Nejjednodušší způsob, jak to ukázat, je na příkladu:

V 3D Bloom grafice se filtr provádí pomocí dodatečného postprocessingu – smícháním snímku rozmazaného rozostřovacím filtrem (celý snímek nebo jeho jednotlivé světlé oblasti, filtr se obvykle aplikuje vícekrát) a původního snímku. Jeden z nejběžněji používaných algoritmů Bloom post-filtr ve hrách a dalších aplikacích v reálném čase:

  • Scéna je vykreslena do framebufferu, intenzita záře objektů je zapsána do alfa kanálu bufferu.
  • Framebuffer se zkopíruje do speciální textury pro zpracování.
  • Rozlišení textury je sníženo například 4násobně.
  • Anti-aliasingové filtry (rozostření) jsou na obraz aplikovány několikrát, na základě údajů o intenzitě zaznamenaných v alfa kanálu.
  • Výsledný obrázek je smíchán s původním snímkem ve framebufferu a výsledek je zobrazen na obrazovce.

Stejně jako ostatní typy post-processingu se Bloom nejlépe používá při vykreslování ve vysokém dynamickém rozsahu (HDR). Další příklady zpracování finálního obrazu pomocí Bloomova filtru z 3D aplikací v reálném čase:

Rozostření pohybu

Pohybová neostrost vzniká na fotografiích a filmech v důsledku pohybu objektů v záběru během expozičního času záběru, když je otevřená závěrka objektivu. Snímek pořízený fotoaparátem (fotografie, film) nezobrazuje snímek pořízený okamžitě s nulovou dobou trvání. Vzhledem k technologickým omezením rám ukazuje určitou dobu, během této doby se objekty v záběru mohou posunout o určitou vzdálenost, a pokud k tomu dojde, budou prezentovány všechny polohy pohybujícího se objektu během otevřené závěrky objektivu na rámu jako rozmazaný obraz podél pohybového vektoru... K tomu dochází, pokud se objekt pohybuje vzhledem ke kameře nebo je kamera vzhledem k objektu a množství rozmazání nám dává představu o velikosti rychlosti pohybu objektu.

V trojrozměrné animaci se v každém daném časovém okamžiku (snímku) objekty nacházejí na určitých souřadnicích v trojrozměrném prostoru, podobně jako virtuální kamera s nekonečně vysokou rychlostí závěrky. Výsledkem je, že při pohledu na rychle se pohybující objekty nedochází k rozmazání podobnému tomu, které získá fotoaparát a lidské oko. Vypadá to nepřirozeně a nereálně. Zvažte jednoduchý příklad: několik koulí se otáčí kolem nějaké osy. Zde je obrázek, jak by tento pohyb vypadal s rozmazáním a bez něj:

Z obrazu bez rozmazání nelze ani říci, zda se koule pohybují nebo ne, zatímco rozostření pohybu dává jasnou představu o rychlosti a směru pohybu objektů. Mimochodem, chybějící rozmazání pohybu je také důvodem, proč se pohyb ve hrách při 25–30 snímcích za sekundu zdá trhaný, ačkoli filmy a videa vypadají skvěle při stejných parametrech snímkové frekvence. Pro kompenzaci chybějícího pohybového rozmazání je žádoucí buď vysoká snímková frekvence (60 snímků za sekundu nebo vyšší), nebo použití dalších metod zpracování obrazu pro emulaci efektu pohybového rozmazání. To se používá pro zlepšení plynulosti animace a pro efekt fotografického a filmového realismu zároveň.

Nejjednodušším algoritmem rozostření pohybu pro aplikace v reálném čase je použití dat z předchozích snímků animace k vykreslení aktuálního snímku. Existují však efektivnější a modernější metody rozostření pohybu, které nevyužívají předchozí snímky, ale jsou založeny na pohybových vektorech objektů ve snímku, a také přidávají do procesu vykreslování jen jeden další krok následného zpracování. Efekt rozostření může být buď na celou obrazovku (obvykle se provádí v následném zpracování), nebo pro jednotlivé, nejrychleji se pohybující objekty.

Možné aplikace efektu motion blur ve hrách: všechny závodní hry (pro vytvoření efektu velmi vysoké rychlosti pohybu a pro použití při sledování televizních záznamů), sportovní hry (stejné záznamy a ve hře samotné může být rozmazání lze použít na velmi rychle se pohybující předměty, jako je míč nebo puk), bojové hry (rychlé pohyby zbraní na blízko, rukou a nohou), mnoho dalších her (během 3D scén na enginu ve hře). Zde je několik příkladů post efektů motion blur z her:

Hloubka ostrosti (DOF)

Hloubka ostrosti je ve zkratce rozmazání objektů v závislosti na jejich poloze vzhledem k ohnisku fotoaparátu. V reálném životě, na fotografiích a ve filmech, nevidíme všechny předměty stejně jasně, je to způsobeno zvláštností struktury oka a strukturou optiky fotoaparátů a filmových kamer. Foto a kino optika má určitou vzdálenost, objekty umístěné v takové vzdálenosti od fotoaparátu jsou zaostřené a na snímku vypadají ostře a objekty dále od fotoaparátu nebo blízko něj vypadají naopak rozmazaně, ostrost se postupně snižuje s rostoucí nebo klesající vzdáleností...

Jak asi tušíte, jedná se o fotografii, nikoli o render. V počítačové grafice je každý objekt vykresleného obrazu dokonale čistý, protože čočky a optika nejsou ve výpočtech napodobovány. Proto, aby se dosáhlo fotografického a filmového realismu, je třeba použít speciální algoritmy, které něco podobného provedou v počítačové grafice. Tyto techniky simulují účinek různého zaostření na předměty v různých vzdálenostech.

Jednou z běžných technik vykreslování v reálném čase je smíchání původního snímku a jeho rozmazané verze (vícenásobné průchody filtrem rozostření) na základě údajů o hloubce pro pixely v obrázku. Ve hrách má efekt DOF několik použití, například kinematografie na herním enginu, přehrávání ve sportovních a závodních hrách. Příklady hloubky ostrosti v reálném čase:

Úroveň detailů (LOD)

Úroveň detailů ve 3D aplikacích je metoda, jak snížit složitost vykreslování snímku, snížit celkový počet polygonů, textur a dalších zdrojů ve scéně a obecně snížit její složitost. Jednoduchý příklad: model hlavní postavy se skládá z 10 000 polygonů. V případech, kdy se na zpracovávané scéně nachází v blízkosti kamery, je důležité, aby byly použity všechny polygony, ale ve velmi velké vzdálenosti od kamery zabere ve výsledném snímku jen několik pixelů a nedochází k bod ve zpracování všech 10 000 polygonů. Možná, že v tomto případě budou stačit stovky polygonů, nebo dokonce pár polygonů a speciálně připravená textura pro přibližně stejné zobrazení modelu. V souladu s tím má na střední vzdálenosti smysl použít model skládající se z více trojúhelníků než nejjednodušší model a méně než nejsložitější.

Metoda LOD se obvykle používá při modelování a vykreslování 3D scén pomocí několika úrovní složitosti (geometrické nebo jiné) pro objekty v poměru ke vzdálenosti od nich ke kameře. Tuto techniku ​​často používají vývojáři her ke snížení počtu polygonů ve scéně a ke zlepšení výkonu. Při umístění v blízkosti fotoaparátu jsou použity modely s maximálním počtem detailů (počet trojúhelníků, velikost textur, složitost texturování), pro co nejvyšší kvalitu obrazu a naopak, když jsou modely z fotoaparátu odstraněny Pro zvýšení rychlosti vykreslování se používají modely s menším počtem trojúhelníků. Ke změně složitosti, zejména počtu trojúhelníků v modelu, může dojít automaticky na základě jednoho 3D modelu maximální složitosti, nebo třeba na základě několika předem připravených modelů s různou úrovní detailů. Použitím modelů s menším množstvím detailů na různé vzdálenosti se sníží odhadovaná složitost vykreslování, téměř bez zhoršení celkových detailů obrazu.

Metoda je zvláště účinná, pokud je počet objektů na scéně velký a nacházejí se v různých vzdálenostech od kamery. Vezměte si například sportovní hru, jako je hokejový nebo fotbalový simulátor. Modely postav s nízkým poly se používají, když jsou daleko od kamery a při přiblížení jsou modely nahrazeny jinými s velkým počtem polygonů. Tento příklad je velmi jednoduchý a ukazuje podstatu metody založené na dvou úrovních detailu modelu, ale nikdo se neobtěžuje vytvořit několik úrovní detailu, aby efekt změny úrovně LOD nebyl příliš patrný, takže detaily postupně "rostou", jak se objekt přibližuje.

Kromě vzdálenosti od kamery mohou být pro LOD důležité i další faktory - celkový počet objektů na obrazovce (když je v záběru jedna nebo dvě postavy, pak se používají složité modely, a když 10-20, přepnout na jednodušší) nebo počet snímků za sekundu (jsou nastaveny limity pro hodnoty FPS, při kterých se úroveň detailů mění, například při FPS pod 30 snižujeme složitost modelů na obrazovce a při 60 naopak zvýšit). Dalšími možnými faktory ovlivňujícími úroveň detailů jsou rychlost pohybu objektu (pravděpodobně nebudete mít čas uvažovat o raketě v pohybu, ale hlemýžď ​​- snadno), důležitost postavy z hlediska hry (vezměte stejný fotbal - pro model hráče, který ovládáte, můžete použít složitější geometrii a textury, vidíte to nejblíže a nejčastěji). Vše závisí na přáních a schopnostech konkrétního vývojáře. Hlavní je to nepřehánět, otravné jsou časté a znatelné změny v míře detailů.

Dovolte mi připomenout, že míra detailů se nemusí nutně týkat pouze geometrie, metodu lze použít i pro úsporu jiných zdrojů: při texturování (i když videočipy již používají mipmapping, někdy má smysl měnit textury za chodu jiným s různými detaily), osvětlovací techniky (blízké objekty jsou osvětleny pomocí složitého algoritmu a vzdálené - pomocí jednoduchého), techniky texturování (komplexní mapování paralaxy se používá na blízkých površích a normální mapování se používá na vzdálených) atd. .

Ukázat příklad ze hry není tak jednoduché, na jednu stranu se LOD do určité míry používá téměř v každé hře, na druhou stranu ne vždy se to podaří názorně ukázat, jinak by to nemělo smysl v samotném LOD.

Ale v tomto příkladu je stále jasné, že nejbližší model auta má maximum detailů, další dvě nebo tři auta jsou také velmi blízko této úrovni a všechna vzdálená mají viditelná zjednodušení, zde jsou jen ta nejvýznamnější: žádná zpětná zrcátka, SPZ, stěrače atd. přídavná světelná výbava. A od nejvzdálenějšího modelu není na silnici ani stín. Toto je algoritmus úrovně detailů v akci.

Globální osvětlení

Je obtížné simulovat realistické osvětlení scény, každý paprsek světla ve skutečnosti se opakovaně odráží a láme, počet těchto odrazů není omezen. A ve 3D vykreslování počet odrazů silně závisí na možnostech návrhu, jakýkoli výpočet scény je zjednodušeným fyzickým modelem a výsledný obraz se jen blíží realističnosti.

Algoritmy osvětlení lze rozdělit do dvou modelů: přímé nebo lokální osvětlení a globální osvětlení (přímé nebo lokální osvětlení a globální osvětlení). Lokální osvětlovací model využívá výpočet přímého osvětlení, světla ze světelných zdrojů do prvního průniku světla s neprůhlednou plochou, není zohledněna vzájemná interakce objektů. Tento model se to sice snaží kompenzovat přidáním pozadí nebo rovnoměrného (okolního) osvětlení, ale jedná se o nejjednodušší přiblížení, vysoce zjednodušené osvětlení ze všech nepřímých paprsků světelných zdrojů, které specifikuje barvu a intenzitu osvětlení objektů v nepřítomnosti přímé světelné zdroje.

Stejný ray tracing počítá osvětlení povrchů pouze přímými paprsky ze světelných zdrojů a každý povrch, aby byl viditelný, musí být přímo osvětlen světelným zdrojem. To k dosažení fotorealistických výsledků nestačí, kromě přímého osvětlení je nutné počítat i se sekundárním osvětlením paprsky odraženými od jiných povrchů. V reálném světě se paprsky světla několikrát odrážejí od povrchů, dokud zcela nezhasnou. Sluneční světlo procházející oknem osvětluje celou místnost, i když paprsky nemohou přímo dopadnout na všechny povrchy. Čím jasnější je zdroj světla, tím vícekrát se odrazí. Barva odrazné plochy ovlivňuje i barvu odraženého světla, například červená stěna způsobí červenou skvrnu na sousedním bílém předmětu. Zde je jasný rozdíl, výpočet bez a zohlednění sekundárního osvětlení:

V modelu globálního osvětlení je globální osvětlení, osvětlení počítáno se zohledněním vlivu objektů na sebe, jsou zohledněny vícenásobné odrazy a lomy světelných paprsků od povrchů objektů, žíraviny a podpovrchový rozptyl. Tento model umožňuje získat realističtější obrázek, ale komplikuje proces a vyžaduje podstatně více zdrojů. Existuje několik algoritmů globálního osvětlení, krátce se podíváme na radiozitu (výpočet nepřímého osvětlení) a fotonové mapování (výpočet globálního osvětlení na základě fotonových map předem vypočítaných pomocí trasování). Existují také zjednodušené metody pro simulaci nepřímého osvětlení, jako je změna celkového jasu scény v závislosti na počtu a jasu světelných zdrojů v ní nebo použití velkého počtu bodových světel umístěných kolem scény pro simulaci odraženého světla, ale přesto toto je daleko od skutečného algoritmu.

Algoritmus radiosity je proces výpočtu sekundárních odrazů světelných paprsků od jednoho povrchu k druhému, stejně jako od okolního prostředí k objektům. Paprsky ze světelných zdrojů jsou sledovány, dokud jejich síla neklesne pod určitou úroveň nebo dokud paprsky nedosáhnou určitého počtu odrazů. Toto je běžná technika GI, výpočty se obvykle provádějí před renderováním a výsledky výpočtu lze použít pro vykreslování v reálném čase. Základní myšlenky radiozity vycházejí z fyziky přenosu tepla. Povrchy objektů jsou rozděleny do malých oblastí nazývaných záplaty a předpokládá se, že odražené světlo je rozptýleno rovnoměrně do všech směrů. Namísto výpočtu každého paprsku pro světla se používá technika průměrování, která rozděluje světla do polí na základě energetických úrovní, které produkují. Tato energie je distribuována úměrně mezi povrchové skvrny.

Další metodou pro výpočet globálního osvětlení, kterou navrhl Henrik Wann Jensen, je metoda fotonového mapování. Fotonické mapování je další algoritmus globálního osvětlení se sledováním paprsků, který se používá k simulaci interakce světelných paprsků s objekty ve scéně. Algoritmus počítá sekundární odrazy paprsků, lom světla přes průhledné povrchy, rozptýlené odrazy. Tato metoda spočívá ve výpočtu osvětlení bodů na povrchu ve dvou průchodech. Prvním je přímé trasování světelných paprsků se sekundárními odrazy, jedná se o předběžný proces, který se provádí před hlavním renderováním. Tato metoda vypočítává energii fotonů jdoucích ze zdroje světla k objektům ve scéně. Když fotony dosáhnou povrchu, průsečík, směr a energie fotonu jsou uloženy ve vyrovnávací paměti zvané fotonová mapa. Fotonické mapy lze uložit na disk pro pozdější použití, takže se nemusí vykreslovat každý snímek. Odrazy fotonů se počítají, dokud se práce po určitém počtu odrazů nebo při dosažení určité energie nezastaví. Ve druhém renderovacím průchodu se vypočítá osvětlení pixelů scény přímými paprsky, přičemž se zohlední data uložená ve fotonových mapách, energie fotonu se přičte k energii přímého osvětlení.

Výpočty globálního osvětlení, které využívají velký počet sekundárních odrazů, trvají mnohem déle než výpočty přímého osvětlení. Existují techniky pro hardwarový výpočet rádiového města v reálném čase, které využívají schopnosti nejnovějších generací programovatelných video čipů, ale zatím by scény, pro které se počítá globální osvětlení v reálném čase, měly být poměrně jednoduché a bylo provedeno mnoho zjednodušení. v algoritmech.

Co se ale používá již delší dobu, je statické předem vypočítané globální osvětlení, které je přijatelné pro scény bez změny polohy světelných zdrojů a velkých objektů silně ovlivňujících osvětlení. Koneckonců, výpočet globálního osvětlení nezávisí na poloze pozorovatele, a pokud se poloha takových objektů ve scéně a parametry světelných zdrojů ve scéně nemění, mohou dříve vypočítané hodnoty osvětlení být použit. To se používá v mnoha hrách, kde se ukládají data výpočtu GI ve formě světelných map.

Existují také přijatelné algoritmy pro simulaci globálního osvětlení v dynamice. Například existuje taková jednoduchá metoda pro použití v aplikacích v reálném čase pro výpočet nepřímého osvětlení objektu ve scéně: zjednodušené vykreslování všech objektů se sníženými detaily (kromě toho, pro který se osvětlení počítá) na nízkou úroveň. -krychlová mapa rozlišení (lze ji také použít pro zobrazení dynamických odrazů na povrchu objektu), poté filtrovat tuto texturu (několik průchodů filtrem rozostření) a aplikovat data z vypočítané textury k osvětlení tohoto objektu jako doplněk k přímému osvětlení. V případech, kdy je dynamický výpočet příliš těžký, lze upustit od statických map radiozity. Ukázka ze hry MotoGP 2, která jasně ukazuje blahodárný účinek i takové jednoduché napodobeniny GI:



"itemprop =" obrázek ">

"Co jsou to shadery?" Je velmi častá otázka zvědavých hráčů a začínajících herních vývojářů. V tomto článku vám řeknu o těchto hrozných shaderech přehledným a srozumitelným způsobem.

Počítačové hry považuji za motor pokroku směrem k fotorealistickým obrázkům v počítačové grafice, pojďme si tedy povědět, co jsou to „shadery“ v kontextu videoher.

Než se objevily první grafické akcelerátory, veškerou práci s vykreslováním snímků videoher odvedl ubohý centrální procesor.

Kreslení rámečku je vlastně docela rutinní práce: je potřeba vzít "geometrii" - polygonální modely (svět, postava, zbraň atd.) a rastrovat. Co je Rasterize? Celý 3D model se skládá z nejmenších trojúhelníků, které rasterizér přemění na pixely (tedy „rastrovat“ znamená přeměnit na pixely). Po rasterizaci vezměte texturová data, parametry osvětlení, mlhy atd. a vypočítejte každý výsledný pixel snímku hry, který se zobrazí hráči.

Takže centrální procesorová jednotka (CPU - Central Processing Unit) je příliš chytrý chlap na to, aby ho přiměl dělat takovou rutinu. Místo toho je logické alokovat nějaký druh hardwarového modulu, který odlehčí CPU, aby mohl vykonávat důležitější intelektuální práci.

Takovým hardwarovým modulem je grafický akcelerátor nebo grafická karta (GPU - Graphics Processing Unit). Nyní CPU připraví data a nahraje kolegovi rutinní práci. Vzhledem k tomu, že GPU nyní není jen jeden kolega, je to zástup minijádrů, pak se s tímto druhem práce vypořádá najednou.

Zatím jsme ale nedostali odpověď na hlavní otázku: Co jsou to shadery? Počkej, dostávám se k tomu.

Pěkná, zajímavá grafika blízká fotorealismu vyžadovala od vývojářů grafických karet implementaci mnoha algoritmů na hardwarové úrovni. Stíny, světla, světla a tak dále. Tento přístup - s implementací algoritmů v hardwaru se nazývá "Fixed pipeline nebo pipeline" a tam, kde je vyžadována vysoce kvalitní grafika, se již nenachází. Jeho místo zaujal Programmable Pipeline.

Požadavky hráčů „pojď, přines dobré grafonium! překvapení! “, tlačil vývojáře her (a výrobce grafických karet) ke stále složitějším algoritmům. Zatím pro ně v určitém okamžiku neexistuje dostatek hardwarových algoritmů.

Nyní je čas, aby se grafické karty staly inteligentnějšími. Bylo učiněno rozhodnutí umožnit vývojářům programovat bloky GPU do libovolných kanálů, které implementují různé algoritmy. To znamená, že vývojáři her, grafičtí programátoři byli nyní schopni psát programy pro grafické karty.

A nyní jsme konečně dospěli k odpovědi na naši hlavní otázku.

"Co jsou to shadery?"

Shader (anglicky shader - stínovací program) je program pro grafickou kartu, který se používá v trojrozměrné grafice k určení konečných parametrů objektu nebo obrazu, může obsahovat popis absorpce a rozptylu světla, mapování textur, odraz a lom, stínování, povrchový posun atd. mnoho dalších parametrů.

Co jsou shadery? Například můžete získat tento efekt, jedná se o vodní shader aplikovaný na kouli.

Grafické potrubí

Výhodou programovatelného potrubí oproti jeho předchůdci je, že nyní mohou programátoři vytvářet své vlastní algoritmy a nepoužívat pevně zapojené sady možností.

Nejprve byly grafické karty vybaveny několika specializovanými procesory, které podporují různé sady instrukcí. Shadery byly rozděleny do tří typů podle toho, který procesor je bude provádět. Pak se ale grafické karty začaly vybavovat univerzálními procesory, které podporují instrukční sady pro všechny tři typy shaderů. Pro popis účelu shaderu bylo zachováno rozdělení shaderů na typy.

Kromě grafických úloh s takovými inteligentními grafickými kartami bylo možné provádět obecné výpočty (nesouvisející s počítačovou grafikou) na GPU.

Poprvé se plnohodnotná podpora shaderů objevila u grafických karet řady GeForce 3, ale začátky byly implementovány v GeForce256 (ve formě Register Combiners).

Typy shaderů

V závislosti na fázi potrubí jsou shadery rozděleny do několika typů: vertex, fragment (pixel) a geometrický. A v nejnovějších typech potrubí jsou i teselační shadery. Grafický pipeline nebudeme podrobně rozebírat, stále přemýšlím, zda o tom napsat samostatný článek pro ty, kteří se rozhodnou studovat shadery a grafické programování. Napište do komentářů, jestli máte zájem, budu vědět, jestli má cenu ztrácet čas.

Vertex shader

Vertex shadery dělají animace postav, trávy, stromů, vytvářejí vlny na vodě a mnoho dalších věcí. Ve vertex shaderu má programátor přístup k datům souvisejícím s vrcholy, například: souřadnice vrcholu v prostoru, jeho souřadnice textury, jeho barva a normální vektor.

Geometrický shader

Geometrické shadery jsou schopny vytvářet novou geometrii a lze je použít k vytváření částic, úpravě detailů modelu za běhu, vytváření siluet a dalším. Na rozdíl od předchozího vrcholu jsou schopny zpracovat nejen jeden vrchol, ale i celé primitivum. Primitivem může být segment (dva vrcholy) a trojúhelník (tři vrcholy), a pokud existují informace o sousedních vrcholech (anglicky adjacency) pro trojúhelníkové primitivum, lze zpracovat až šest vrcholů.

Pixel shader

Pixel shadery provádějí mapování textur, osvětlení a různé efekty textur, jako je odraz, lom, mlha, Bump Mapping atd. Pixel shadery se používají také pro post efekty.

Pixel shader pracuje s bitmapovými řezy a texturami – zpracovává data spojená s pixely (například barvu, hloubku, souřadnice textury). Pixel shader se používá v poslední fázi grafického potrubí k vytvoření fragmentu obrazu.

Na co píšou shadery?

Zpočátku mohly být shadery napsány v jazyce podobném assembleru, ale později se objevily jazyky shaderů na vysoké úrovni podobné jazyku C, jako jsou Cg, GLSL a HLSL.

Takové jazyky jsou mnohem jednodušší než C, protože úkoly řešené s jejich pomocí jsou mnohem jednodušší. Typový systém v těchto jazycích odráží potřeby grafických programátorů. Poskytují proto programátorovi speciální datové typy: matice, samplery, vektory atd.

RenderMan

Vše, co jsme probrali výše, souvisí s grafikou v reálném čase. Existuje však grafika, která není v reálném čase. Jaký je rozdíl - realtime - real time, tedy tady a teď - dát 60 snímků za sekundu ve hře, to je proces v reálném čase. Ale vykreslování složitého snímku pro špičkovou animaci na několik minut není v reálném čase. Podstata je v čase.

Například grafiku v takové kvalitě jako v nejnovějších animovaných filmech studia Pixar nemůžeme získat v reálném čase. Velmi velké renderovací farmy počítají světelné simulace pomocí zcela odlišných algoritmů, jsou velmi drahé, ale poskytují téměř fotorealistické obrázky.

Super realistická grafika v Sand Piper

Podívejte se například na tuto roztomilou karikaturu, zrnka písku, ptačí peří, vlny, všechno vypadá neuvěřitelně reálně.

* Videa lze zakázat na Youtube, pokud se neotevřou, google pixar sandpiper - krátký kreslený film o statečném jespákovi je velmi roztomilý a nadýchaný. Dotkne se a ukáže, jak skvělá může být počítačová grafika.

Tak tohle je RenderMan od Pixaru. Stal se prvním programovacím jazykem shaderů. Rozhraní RenderMan API je de facto standardem pro profesionální vykreslování, který se používá při veškeré práci Pixar i mimo ni.

Užitečné informace

Nyní víte, co jsou shadery, ale kromě shaderů existují i ​​další velmi zajímavá témata v oblasti vývoje her a počítačové grafiky, která vás jistě zaujmou:

  • je technika pro vytváření úžasných efektů v moderních videohrách. Přehledný článek a video s návody na vytváření efektů v Unity3d
  • - Pokud uvažujete o vývoji videoher, jako o profesionální kariéře nebo koníčku, tento článek obsahuje skvělou sadu doporučení „kde začít“, „jaké knihy číst“ atd.

Jestli máš nějaké dotazy

Jako obvykle, pokud máte ještě nějaké dotazy, zeptejte se je v komentářích, vždy odpovím. Za každé milé slovo nebo opravu chyb budu velmi vděčný.

Tento tutoriál vám pomůže nainstalovat shadery v Minecraftu a tím vylepšit herní svět přidáním dynamických stínů, hluku větru a trávy, realistické vody a mnoha dalšího.

Ihned je třeba poznamenat, že shadery zatěžují systém poměrně silně, a pokud máte slabou grafickou kartu nebo dokonce integrovanou, doporučujeme upustit od instalace tohoto modu.

Instalace se skládá ze dvou fází, nejprve musíte nainstalovat mod na shadery a poté k němu další shaderpacky

KROK # 1 - Instalace modu pro shadery

  1. Stáhněte a nainstalujte Javu
  2. Nainstalujte OptiFine HD
    nebo ShadersMod;
  3. Výsledný archiv rozbalíme na libovolné místo;
  4. Spusťte soubor jar, protože je instalatér;
  5. Program vám ukáže cestu ke hře, pokud je vše v pořádku, klikněte na Ano, Ok, Ok;
  6. Jít do .Minecraft a vytvořte tam složku shaderpacky;
  7. Jdeme do spouštěče a v řádku vidíme nový profil s názvem „ShadersMod“, pokud ne, vyberte jej ručně.
  8. Dále si musíte stáhnout shaderpacky

KROK # 2 - Instalace shaderpacku

  1. Stáhněte si shaderpack, který vás zajímá (seznam na konci článku)
  2. Stiskněte tlačítka WIN + R
  3. Jít do .minecraft / shaderpacky... Pokud taková složka neexistuje, vytvořte ji.
  4. Přesuňte nebo extrahujte archiv shaderu do .minecraft / shaderpacky... Cesta by měla vypadat takto: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shaders / [.fsh a .vsh soubory uvnitř]
  5. Spusťte Minecraft a jděte Nastavení> Shaders... Zde uvidíte seznam dostupných shaderů. Vyberte požadované
  6. V nastavení shaderu povolte „tweakBlockDamage“, vypněte „CloudShadow“ a „OldLighting“

Neuvěřitelné Shaders Sonic Ether
Shadery Sildur
Shadery Chocapic 13".
sensi277 "s yShaders
Shadery MrMeep_x3's
Naelego's Cel Shaders
Shadery RRe36
DeDelnerovy CUDA Shadery
bruceatsr44's Acid Shaders
Shadery Beed28".
Ziipzaapův Shader Pack
Shadery robobo1221's
Shadery dvv16".
Super shadery Stazza85
hoo00's Shaders pack B
Mávající rostliny Regi24
MrButternuss ShaderPack
Úžasná grafika DethRaid na Nitro Shaderech
Ediho Shader ForALLPc s
CrankerManovy TME Shaders
Kadir Nck Shader (pro skate702)
Werrusovy Shadery
Life Nexus Shaders společnosti Knewtonwako
CYBOX shaderpack
CrapDeShoes CloudShade Alpha
Shader AirLoocke42
BSL Shadery CaptTatsu
Shadery Trilitonu
ShadersMcOfficial "s Bloominx Shaders (Chocapic13" Shaders)
Continuum Shaders dotModded
Lunar Shaders Qwqx71" (shader chocapic13" s)

Navrženo pro spouštění procesory grafických karet (GPU). Shadery jsou zkompilovány v jednom ze specializovaných programovacích jazyků (viz) a zkompilovány do instrukcí pro GPU.

aplikace

Před použitím shaderů se používalo procedurální generování textur (používá se například ve hře Unreal k vytváření animovaných textur vody a ohně) a multitexturing (na kterém byl založen shader jazyk použitý v Quake 3). Tyto mechanismy neposkytovaly stejnou flexibilitu jako shadery.

S příchodem rekonfigurovatelných grafických kanálů bylo možné provádět matematické výpočty (GPGPU) na GPU. Nejznámější mechanismy GPGPU jsou nVidia CUDA, Microsoft DirectCompute a open source OpenCL.

Typy shaderů

Vertex shadery

Vrcholový shader pracuje s daty spojenými s vrcholy mnohostěnů, například se souřadnicemi vrcholu (bodu) v prostoru, se souřadnicemi textury, s barvou vrcholu, s vektorem tečny, s binormálním vektorem, s normálním vektor. Vertex shader lze použít pro zobrazení a transformaci perspektiv vrcholů, pro generování souřadnic textur, pro výpočet osvětlení atd.

Ukázkový kód pro vertex shader v jazyce:

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

Geometrické shadery

Geometrický shader, na rozdíl od vertexového, je schopen zpracovat nejen jeden vertex, ale i celé primitivum. Primitivem může být segment (dva vrcholy) a trojúhelník (tři vrcholy), a pokud existují informace o sousedních vrcholech (anglicky adjacency) pro trojúhelníkové primitivum, lze zpracovat až šest vrcholů. Geometry shader je schopen generovat primitiva za chodu (bez použití centrálního procesoru).

Geometry shadery byly poprvé použity na grafických kartách řady Nvidia 8.

Pixelové (fragmentové) shadery

Pixel shader pracuje s bitmapovými řezy a texturami – zpracovává data spojená s pixely (například barvu, hloubku, souřadnice textury). Pixel shader se používá v poslední fázi grafického potrubí k vytvoření fragmentu obrazu.

Ukázkový kód pro pixel shader v jazyce:

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

Výhody a nevýhody

výhody:

  • schopnost komponovat libovolné algoritmy (flexibilita, zjednodušení a snížení nákladů na vývojový cyklus programu, zvýšení složitosti a realističnosti renderovaných scén);
  • zvýšená rychlost provádění (ve srovnání s rychlostí provádění stejného algoritmu prováděného na centrálním procesoru).

Nevýhody:

  • potřeba naučit se nový programovací jazyk;
  • existence různých sad instrukcí pro GPU od různých výrobců.

Programovací jazyky

Bylo vytvořeno velké množství programovacích jazyků shaderů, aby vyhovovaly různým potřebám trhu (počítačová grafika má mnoho oblastí použití).

Jazyky pro psaní shaderů obvykle poskytují programátorovi speciální datové typy (matice, samplery, vektory atd.), sadu vestavěných proměnných a konstant (pro interakci se standardní funkčností 3D API).

Profesionální vykreslování

Následují shader programovací jazyky zaměřené na dosažení maximální kvality vykreslování. V takových jazycích jsou vlastnosti materiálů popsány pomocí abstrakcí. To umožňuje lidem, kteří nemají speciální programovací dovednosti a neznají specifika hardwarových implementací, psát kód. Umělci mohou například tyto shadery napsat, aby poskytly „správný vzhled“ (mapování textury, umístění světla atd.).

Obvykle je zpracování takových shaderů poměrně náročné na zdroje: vytváření fotorealistických obrázků vyžaduje hodně výpočetního výkonu. Obvykle většinu výpočtů provádějí velké počítačové clustery nebo blade systémy.

RenderMan Programovací jazyk shaderů implementovaný v softwaru RenderMan společnosti Pixar byl prvním programovacím jazykem pro shadery. RenderMan API, vyvinuté Robem Cookem a popsané ve specifikaci rozhraní RenderMan, je de facto standardem pro profesionální vykreslování, používaným v celé práci Pixaru. OSL OSL - eng. Open Shading Language je shader programovací jazyk vyvinutý společností Sony Pictures Imageworks a podobný jazyk. Používá se v proprietárním programu "Arnold", vyvinutém "Sony Pictures Imageworks" a určeném pro renderování, a ve volném programu Blender, určeném pro vytváření trojrozměrné počítačové grafiky. Vykreslování v reálném čase GLSL GLSL otevřené GL S hading L jazyk) je shader programovací jazyk popsaný ve standardu OpenGL a založený na verzi jazyka popsaného ve standardu ANSI C. Jazyk podporuje většinu funkcí ANSI C, podporuje datové typy často používané při práci s trojrozměrnou grafikou (vektory, matice). Slovo „shader“ v GLSL označuje nezávisle zkompilovanou jednotku napsanou v tomto jazyce. Slovo "program" odkazuje na kolekci kompilovaných shaderů propojených dohromady. Cg (angl. C pro G rafika) je shader programovací jazyk vyvinutý společností nVidia společně se společností Microsoft. Jazyk je podobný jazyku a jazyku HLSL vyvinutému společností Microsoft a obsaženém v DirectX 9... Jazyk používá typy „int“, „float“, „half“ (číslo s plovoucí desetinnou čárkou 16 bitů). Jazyk podporuje funkce a struktury. Jazyk má zvláštní optimalizace ve formě „balených polí“ (