V úvodním dílu naší minisérie o grafické pipeline jsme si popsali to, jakým způsobem funguje počítačová hra a její herní smyčka. Řekli jsme si, jak je ve funkci Draw této smyčky voláno 3D API, které z důvodu zajištění kompatibility různorodých grafických karet tvoří jakousi mezivrstvu mezi aplikací a samotným hardware grafické karty. Víme také, že těmto voláním se říká Draw Calls a společně těmito volání musejí být dodány také veškeré parametry, které jednoznačně popisují objekt k vykreslení. Těmito parametry jsou jednak geometrická data, tedy souřadnice všech vertexů primitiv, které daný objekt tvoří a definují tak jeho pozici ve 3D prostoru, ale také parametry, jako jsou textury a shadery, které zase určují jeho finální vzhled.
Zatímco textury (2D obrázky) nám určují obsah povrchu (základní vzhled) objektu, shadery pak tomuto povrchu dodají charakteristické vlastnosti, jako je matnost, lesklost atd. Ale co jsou to vůbec shadery?
Shadery jsou jednoduché programy, které však neběží na procesoru PC, ale přímo na grafické kartě a jejích výpočetních jednotkách. Kromě již zmíněných vykreslovacích shaderů, tedy „Pixel shader“, které mají na starosti výpočty finální barvy každého pixelu, existují i další typy shaderů, jako je třeba „Vertex shader“, který má na starosti manipulaci s vertexy, nebo „Compute shader“, který zase provádí nějaké výpočty nezávislé na 3D pipeline (nejčastěji post-processing efekty).
My tu samozřejmě žádné shadery programovat nebudeme, nám bude stačit, pokud budeme vědět, že shadery jsou psány (programovány) v jazyku vyšší úrovně podobném jazyku C. U DirectX se tento jazyk nazývá HLSL (High Level Shader Language) a u OpenGL zase GLSL (OpenGL Shader Language).
Poznámka:
V DirectX jsou shadery rovnou překompilovány z HLSL do jazyka nižší úrovně IL (Intermediate Language), tedy do jakéhosi na platformě nezávislého jazyka (bytecode), se kterým sice grafická karta stále neumí pracovat, ale jsou zde prováděny první nízkoúrovňové optimalizace kódu. Díky IL je také možné psát shadery i v jiných jazycích nežli HLSL, pokud tento jazyk disponuje překladačem do IL. Obdobné je to u Mantle, kde se využívá AMDIL a Vulkan, kde se zase využívá SPIR-V.
Myslím, že nemá cenu se tím nějak dále podrobněji zaobírat. Kdo má zájem, může si problematiku kolem shaderů prostudovat z jiných zdrojů. Nám stačí vědět to základní, tedy, že shadery jsou vlastně programy běžící na výpočetních jednotkách grafické karty a z tohoto důvodu bude potřeba je také někdy později převést (zkompilovat) z jazyka vyšší úrovně, do strojového jazyka, kterému právě ta naše konkrétní grafická karta rozumí.
Suma, sumárum, počítačová hra nám do 3D API dodala Draw Calls se všemi parametry, které budeme potřebovat k pozdějšímu vykreslení objektů na monitor počítače a o tom, co se s těmito Draw Calls v 3D API děje dále, bude pojednávat příští kapitola. My se dnes podíváme asi na to nejrozšířenější herní 3D API, tedy MS DirectX.