Vyhodnocování osvětlovacího modelu v každém bodě, který je vykreslován na obrazovce, je zdlouhavé, a proto bylo vyvinuto několik metod, které umožňují provést podrobný výpočet osvětlovacího modelu pouze pro několik bodů na povrchu tělesa a odvodit z nich barevné odstíny ostatních zobrazovaných bodů.

Tyto metody shrnujeme pod společný název stínování (shading).

Pomocí stínování lze odlišit případné křivosti a zaoblení ploch a docílit tak přirozeného vzhledu prostorových objektů přesto, že řada výpočtů týkajících se zpracování světla byla zjednodušena či vynechána.

Některé druhy stínování dokonce umožňují opticky vyhladit povrchy, které jsou modelovány sítí rovinných plošek, takže přestanou být znatelné drobné hraniční zlomy.

09 - Stínování krychle

Obrázek: Rozdíl mezi vrženým stínem a stínováním

Ačkoliv je stínování spjato se zpracováním světla, nezabývá se nalezením a kresbou vržených stínů (shadows)!

Konstantní stínování

Metoda známá též jako flat shading.

Tato metoda je velmi rychlá, jednoduchá a používá se pro zobrazování rovinných ploch. Předpokládá, že každá plocha má jen jedinou normálu. Není-li normála implicitně obsažena v datech prostorového modelu, lze ji u konvexních rovinných plošek určit jako výsledek, který je správně zorientován tak, aby ukazoval do vnějšího poloprostoru. Podle normály je vypočítána jedna barva, která je při rasterizaci plochy přiřazena všem jejím pixelům.

Konstantní stínování je používáno tam, kde je třeba docílit vysoké rychlosti kresby.

Pro kresby mnohostěnů je tento způsob stínování postačující a úspěšně znázorňuje umístění a natočení těles v prostoru. U obecnějších těles je konstantní odstín plošek negativním jevem, protože místo zkvalitnění obrázku zdůrazňuje, že oblý povrch je ve skutečnosti jen aproximován skupinou plošek, jak je vidět na následujícím obrázku.

09 - Ukázka konstantního stínování

Obrázek: Konstantní stínování

Pro obecná tělesa byly proto vyvíjeny metody spojitého barevného stínování. Jsou založeny na určování odstínu barvy bodu v ploše (obecně v prostorovém polygonu) ze znalosti hodnot ve vrcholech této plochy. Známe-li v každém vrcholu jeho barvu či normálu, dokážeme tyto hodnoty vypočítat tzv. bilineární interpolací pro každý vnitřní bod plochy.

Při stínování pomocí bilineární interpolace vybarvujeme plochu po řádcích. Lineární interpolací mezi vrcholy určíme potřebné hodnoty na hranách, další lineární interpolací pak hodnoty uvnitř vybarvovaného řádku.

Gouraudovo spojité stínování

Takzvaná metoda interpolace barvy byla navržená H. Gouraudem.

Tato metoda je vhodná pro stínování matných povrchů. Byla navržena zejména pro tělesa, jejichž povrch je aproximován množinou rovinných plošek. Pro činnost algoritmu je důležitá znalost barev všech vrcholů zpracovávané plochy.

Nejprve z normál několika sousedících ploch určíme normálu v každém vrcholu plochy. Jednou z možností je aproximace normál sousedních stěn. Barvu vrcholu určíme z normály v tomto vrcholu a to podle daného osvětlovacího modelu.

09 - Normály ve vrcholech

Obrázek: Aproximace normál sousedních stěn

Údaje o normálách ve vrcholech bývají někdy součástí geometrického popisu tělesa!

K rozhodnutí, které normály ploch zařadíme do výpočtu, nám pomůže znalost typů hran obsažených v modelu tělesa. Správná hraniční reprezentace by měla u každé hrany udržovat informaci o tom, zda je hranou ostrou (tedy skutečnou), nebo pouze pomocnou (tedy spojující dvě záplaty). Při výpočtu normály pomocí součtu vektorů pak budeme zpracovávat jen ty plochy, které jsou spolu spojeny pomocnými hranami. Pokud bychom do výpočtu zahrnuli i hrany ostré, vznikl by optický dojem, že válec na obrázku má zaoblenou podstavu.

09 - Ostré a pomocné hrany

Obrázek: Ostré a pomocné hrany tělesa

Poté, co máme vypočítány barevné odstíny ve vrcholech ploch, můžeme vypočítat barevné odstíny vnitřních bodů plochy metodou tzv. bilineární interpolace. Proto se Gouraudovo stínování také nazývá interpolací barvy.

Bilineární interpolace barvy

Pro každý rozkladový řádek plochy stanovíme barvy v koncových bodech úseku (VA a VB) interpolací barev z vrcholů plochy. Potom celý vodorovný úsek vybarvíme odstíny získanými lineární interpolací barev mezi krajními body VA a VB.

09 - Bilineární interpolace

Obrázek: Princip bilineární interpolace barvy

Při implementaci lineární interpolace barvy podle uvedených vztahů se používá modifikovaný algoritmus DDA, který jsme používali pro rasterizaci úsečky.

V současné době je proto Gouraudovo stínování standardní metodou používanou v grafických akcelerátorech.

Gouraudova metoda zajišťuje plynulé stínování křivých povrchů tak, že aproximace povrchů ploškami není zřetelná. Přesto ani tyto obrázky ještě neposkytují zcela věrný obraz reálných objektů – interpolace samotného odstínu barvy totiž nemůže způsobit místní zvýšení jasu na rovinné plošce, která nahrazuje zakřivenou plochu orientovanou kolmo na dopadající světelný paprsek. Tato metoda zahlazuje barevné rozdíly u místních nerovností povrchu, jak je vidět na následujícím obrázku.

09 - Ukázka Gauraudova stínování

Obrázek: Gouraudovo stínování

Phongovo spojité stínování

Takzvaná metoda interpolace normály byla navržena Bui-Tuong Phongem. Jeho jméno se tak objevuje v počítačové literatuře ve dvou souvislostech – jako jedna z variant empirického osvětlovacího modelu a jako metoda stínování povrchů těles.

Také tato metoda je určena k plynulému (spojitému) stínování těles, jejichž povrch je tvořen množinou rovinných ploch.

Také tato metoda vychází ze znalosti normálových vektorů ve vrcholech stínované plochy. Z nich však nejsou pouze vypočítány barevné odstíny ve vrcholech, jako tomu bylo u Gouraudova stínování, nýbrž jsou použity k určení normálových vektorů ve vnitřních bodech plochy bilineární interpolací. Phongovo stínování je tedy založeno na interpolaci normálových vektorů (a ne barvy!). Normály jsou interpolovány současně při rasterizaci plochy a z nich je vyhodnocením, ve kterém bereme v úvahu všechny složky světla osvětlovacího modelu, určen odstín barvy každého pixelu.

Časové nároky algoritmu ve srovnání s Gouraudovým stínováním vzrostou, neboť osvětlovací model je vyhodnocován pro každý pixel.

Na následujícím obrázku je ukázán rozdíl mezi Gouraudovým a Phongovým stínováním. V situaci, kdy jsou světelné paprsky kolmé na určitou plošku, vzhled plošky se výrazně mění v závislosti na použité metodě stínování. Normály mají v bodech A a B odlišné směry.

09 - Porovnání Gouraudova a Phongova stínování

Obrázek: Porovnání Gouraudova a Phongova stínování

U Gouraudova stínování jsou z těchto normál odvozeny tytéž barevné odstíny a celá oblast mezi vrcholy A a B je vyplněna barvou téže intenzity a ploška vypadá jako rovinná. U Phongova stínování dochází při interpolaci normál k jejich postupnému naklánění a tedy i ke správnému zvětšení velikosti jasu uprostřed oblasti mezi vrcholy A a B.

Gouraudovo stínování tedy vyniká rychlostí výpočtu, ale nedociluje tak kvalitního vzhledu obrázku jako stínování Phongovo. Zcela nevhodné je jeho použití v dynamických scénách, kdy dochází v průběhu natáčení plošek k viditelným jasovým změnám na povrchu.

09 - Srovnání stínovacích metod

Obrázek: Srovnání metod stínování