Ambient occlusion

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Ambient occlusion (zastínění okolím) je metoda stínování užívaná v počítačové 3D grafice. Pomáhá modelům pro výpočet lokálního osvětlení dodat realistický dojem díky tomu, že započítává tlumení světla zastíněním. Ambient occlusion napodobuje skutečné chování světelného záření, zvláště na plochách, které považujeme za matné.

Na rozdíl od lokálních metod, jako je Phongovo stínování, ambient occlusion je globální metoda – tedy osvětlení je v každém bodě funkcí ostatní geometrie 3D scény. Je to ale jen velmi hrubé napodobení metod úplného globálního osvětlení. Jemný vzhled, který ambient occlusion vytváří při použití samo o sobě, je podobný osvětlení předmětů při zatažené obloze.

Ambient occlusion je obvykle počítáno pomocí paprsků, které necháme z plochy všemi směry vyzařovat. Paprsky, které zasáhnou pozadí obrázku (čili oblohu), tuto plochu osvětlí, paprsky zasahující cokoli jiného na osvětlení nemají vliv. Tedy ve výsledku místa obklopená velkým množstvím dalších objektů jsou vykreslena jako tmavší, zatímco místa s málo objekty na viditelné straně se zobrazí světlejší.

Ambient occlusion je podobné jako stínování dostupnosti (accessibility shading), které určuje vzhled podle toho, jak snadno se mohou různé prvky (např. světlo, nečistoty atp.) zobrazované plochy dotknout. V průmyslové animaci je s oblibou užíváno, protože je poměrně jednoduché a účinné. Profesionálové jej někdy označují jako “nebeské světlo” (sky light).

Model stínování ambient occlusion je příhodný tím, že umožňuje lépe poznat prostorový tvar zobrazovaných předmětů. To dokládá dokument,[1] jehož autoři na základě experimentů na lidském vnímání soudí, že hloubku rozlišujeme lépe při rovnoměrné oblačnosti než při přímém osvětlení.

Ambient occlusion
Jen difúzní osvětlení
Kombinace ambient occlusion a difúzního osvětlení

Osvětlení A_p v bodu p plochy s normálou N může být vypočítáno integrací viditelnostní funkce podle průmětu prostorového úhlu přes celou polokouli \omega:


A_p = \frac{1}{\pi} \int_{\Omega} V_{p,\omega} ( N \cdot \omega ) \, d\omega

kde V_{p,\omega} je viditelnostní funkce v bodě p: z definice nulová, pokud je bod p ve směru \omega zakryt, jinak má hodnotu 1. Tento integrál bývá v praxi aproximován mnoha způsoby: nejvíce přímočarý přístup má asi metoda Monte Carlo, při které zkoušíme, zda náhodné paprsky vyzařované z bodu p dopadnou na nějakou plochu ve scéně. Jiná možnost (vhodnější pro hardwarovou akceleraci) je vykreslení výhledu z bodu p, kdy celou scénu zobrazíme černě na bílém pozadí. Výsledkem je pak průměr vykresleného obrázku (vážený funkcí cosinus). To je příklad přístupu „sbíráním“ čili „zevnitř ven“, zatímco jiné (například použití hloubkové mapy) používají přístup „tříštěním“ neboli „zvenku dovnitř“.

Vedle hodnoty ambient occlusion je často ještě stanoven vektor N_b (skloněná normála, bent normal), který má směr jako průměr nezastíněných paprsků. Tento vektor lze použít k vyhledání dopadajícího světla v mapě prostředí (environment map), což napodobuje metodu osvětlení pomocí obrázku. Nicméně, v některých případech směr tohoto vektoru nebude odpovídat převažujícímu směru dopadajícího světla, například zde:

Náčrtek výpočtu

V tomto případě může světlo dosáhnout bodu p jedině zleva nebo zprava. Vektor N_b ovšem směřuje průměrem těchto dvou směrů, a to je bohužel přesně směrem k překážce.

Související články[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. "Depth discrimination from shading under diffuse lighting", M. S. Langer and H. H. Buelthoff, Perception. 29 (6) 649-660, 2000.

V tomto článku byl použit překlad textu z článku Ambient occlusion na anglické Wikipedii.

Externí odkazy[editovat | editovat zdroj]