Stínování v počítačové grafice je obraz pro vnímání hloubky v trojrozměrných modelech nebo ilustracích využívajících různé úrovně temnoty [1] .
Stínování se používá v malbě k zobrazení úrovní tmavosti na papíře nanesením inkoustu nebo tužky hustěji nebo s tmavším odstínem pro tmavé oblasti a méně hustým nebo světlejším odstínem pro světlé oblasti. Existují různé metody stínování, včetně šrafování, kdy jsou do mřížky nakresleny kolmé čáry s různou blízkostí, které zastíní oblast. Čím blíže jsou čáry, tím je oblast tmavší. Stejně tak čím dále jsou čáry od sebe, tím je oblast světlejší.
Světelné vzory, jako jsou objekty, které mají světla a stíny, pomáhají vytvářet iluzi hloubky na papíře. [2]
V počítačové grafice se stínováním rozumí proces změny barvy objektu/povrchu/polygonu ve 3D scéně na základě faktorů, jako je (ale nejen) úhel povrchu ke světlům, vzdálenost od světel, úhel ke kameře a materiál (např. distribuční funkce obousměrný odraz) pro vytvoření fotorealistického efektu. Stínování se provádí během procesu vykreslování programem zvaným shader.
Stínování mění barvy tváří ve 3D modelu na základě úhlu povrchu světelného zdroje nebo světelných zdrojů.
První obrázek níže ukazuje okraje rámu, ale všechny mají stejnou barvu. Také zde byly nakresleny okrajové linie, díky nimž je obraz lépe vidět.
Druhý obrázek je stejný model, zobrazený bez okrajových čar. Je těžké říct, kde jedna tvář postavy končí a kde začíná druhá.
Třetí obrázek má zapnuté stínování, díky čemuž je obrázek realističtější a lépe vidět postavu.
Zastínění závisí také na použitém osvětlení. Obvykle se při vykreslování scény používá několik různých metod osvětlení, aby bylo vykreslení realističtější. Pro dosažení různých efektů se používají různé typy světelných zdrojů.
Ambientní osvětleníOkolní zdroj světla je všesměrový zdroj světla s pevnou intenzitou a pevnou barvou, který působí na všechny objekty ve scéně stejně. Při vykreslování se všechny objekty ve scéně rozjasní se zadanou intenzitou a barvou. Tento typ světelného zdroje se používá hlavně k tomu, aby scéně poskytl základní pohled na různé objekty v ní. Jedná se o nejjednodušší typ osvětlení, který lze implementovat a modeluje, jak se světlo může mnohokrát rozptylovat nebo odrážet a vytvářet jednotný efekt.
Okolní osvětlení lze zkombinovat s okolní okluzí a ukázat, jak je každý bod ve scéně exponován, což ovlivňuje množství okolního světla, které může odrážet. To vytváří rozptýlené, nesměrové osvětlení v celé scéně, které nevrhá tvrdé stíny, ale vytváří stínované, uzavřené a chráněné oblasti. Výsledek je obvykle vizuálně podobný zataženému dni.
Směrové osvětleníSměrový zdroj světla osvětluje všechny předměty rovnoměrně z daného směru jako světlo oblasti nekonečné velikosti a nekonečné vzdálenosti od scény.
Bodové osvětleníSvětlo vychází z jednoho bodu a šíří se všemi směry.
Osvětlení projektoruModely světlometů . Světlo vychází z jednoho bodu a šíří se směrem ven v kuželu.
Osvětlení v letadleSvětlo pochází z malé oblasti v jedné rovině. Realističtější model než bodový zdroj světla.
Objemové osvětleníSvětlo vycházející z malého objemu, uzavřeného prostoru, osvětlující předměty v tomto prostoru.
Stínování je interpolováno na základě toho, jak úhel těchto světel dosáhne k objektům ve scéně. Samozřejmě tato světla mohou být a často jsou ve scéně kombinována. Renderer poté interpoluje, jak by se tato světla měla kombinovat, a vytvoří 2D obraz, který se podle toho zobrazí na obrazovce.
Teoreticky jsou dva rovnoběžné povrchy osvětleny stejným množstvím ze vzdáleného zdroje světla, jako je slunce. I když je jedna plocha dále, vaše oko vidí více na stejném místě, takže osvětlení vypadá stejně.
Levý obrázek nepoužívá redukci vzdálenosti. Všimněte si, že barvy na předních stranách obou polí jsou stejné. Zdá se, že existuje nepatrný rozdíl v tom, kde se tyto dvě tváře setkávají, ale jedná se o optický klam způsobený vertikálním okrajem pod místem, kde se tyto dvě tváře setkávají.
Správný obraz využívá zmenšení vzdálenosti. Všimněte si, jak je přední strana předního boxu jasnější než přední strana zadního boxu. Také povrch podlahy tmavne, když se vzdaluje.
Tento efekt zmenšení vzdálenosti vytváří obrazy, které vypadají realističtěji.
Zkrácení vzdálenosti lze vypočítat několika způsoby:
Při výpočtu jasu povrchu v době vykreslování náš model osvětlení vyžaduje, abychom znali normálu povrchu. 3D model je však obvykle popsán pomocí polygonové sítě, která může uložit normálu povrchu pouze v omezeném počtu bodů, obvykle buď ve vrcholech nebo plochách polygonu, nebo obojí. Chcete-li tento problém vyřešit, můžete použít jednu z několika metod interpolace.
Rovinné stínováníZde se barva vypočítá pro jeden bod na každém mnohoúhelníku (obvykle první vrchol v mnohoúhelníku, ale někdy se pro trojúhelníkové sítě používá těžiště) na základě normálního povrchu mnohoúhelníku a předpokladu, že všechny polygony jsou rovinné. Poté se na libovolném místě barva interpoluje obarvením všech bodů na mnohoúhelníku stejně jako bod, pro který byla barva vypočtena, čímž se každému mnohoúhelníku získá jednotná barva (podobná interpolaci nejbližšího souseda ). Obvykle se tato technika používá pro vysokorychlostní vykreslování, kde jsou pokročilejší techniky stínování příliš výpočetně nákladné. V důsledku plošného stínování jsou všechny vrcholy polygonu vybarveny stejnou barvou, což umožňuje rozlišit sousední polygony. Zrcadlová světla se s rovinným stínováním nevykreslují dobře: pokud má reprezentativní vrchol velkou zrcadlovou složku, je tento jas vykreslen rovnoměrně po celé ploše. Pokud zrcadlová oblast nespadá do reprezentativního bodu, je zcela přeskočena. Zrcadlová složka proto obvykle není zahrnuta do výpočtu rovinného stínování.
Hladké stínováníNa rozdíl od rovinného stínování, kde se barvy mění na okrajích mnohoúhelníku, plynulé stínování mění barvu z pixelu na pixel, což má za následek hladký barevný přechod mezi dvěma sousedními polygony. Obvykle se hodnoty nejprve vypočítají ve vrcholech a poté se k výpočtu hodnot pixelů mezi vrcholy polygonů použije bilineární interpolace.
Mezi typy hladkého stínování patří:
Guro stínováníMnohoúhelníky, složitější než trojúhelníky, mohou mít také různé barvy specifikované pro každý vrchol. V těchto případech může být základní logika stínování složitější.
Problémy