Phongův osvětlovací model

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

Phongův osvětlovací model je empirický (na fyzice nezaložený) osvětlovací model pro výpočet odraženého světla z povrchu nějakého objektu. Využívá se v počítačové grafice k vykreslování trojrozměrných scén. Jeho snahou je vykreslit dané těleso co nejrealističtěji, avšak za rozumnou dobu. Ačkoliv tento model není fyzikálně zcela přesný, výsledky, které podává, jsou natolik zdařilé, že se Phongův model v počítačové grafice široce využívá již několik desítek let, zejména pak pro svou rychlost našel uplatnění v real-time grafice. Jeho nevýhodou je, že nedokáže simulovat některé optické jevy globálního osvětlení, jako např. kaustiky ("prasátka").

Často bývá nesprávně zaměňován s Phongovým stínováním.

Historie[editovat | editovat zdroj]

Phongův model byl navržen v roce 1973 vietnamským vědcem Bui Tuong Phongem v rámci jeho disertační práce [1][2] na univerzitě v Utahu.

Popis[editovat | editovat zdroj]

Označení vektorů použitých ve vyhodnocení Phongova osvětlovacího modelu.

Realistického vzhledu při vykreslování trojrozměrných scén dosáhl Phong stanovením, že se odraz skládá ze tří světelných složek:

Okolní (ambientní) světlo (Ambient light) C_a[editovat | editovat zdroj]

Okolní světlo udává intenzitu té části světla, která na těleso dopadá rovnoměrně ze všech směrů se stejnou intenzitou, jinými slovy označuje všesměrové konstantní osvětlení. Napodobuje tedy sekundární odražené a rozptýlené světlo vznikající mnohonásobnými odrazy od ostatních těles. Tomuto osvětlení se říká také globální. Okolní světlo zajišťuje, aby povrchy odvrácené od světelných zdrojů nebyly zcela černé, sama o sobě však nestačí pro vytvoření vzhledu trojrozměrné scény. Čím větší je její hodnota, tím větší je celková světlost scény.

Odraz ambientního světla je určen vztahem C_a = I_a k_a,

kde I_a označuje intenzitu okolního osvětlení scény a k_a\in(0,1) je odrazivý koeficient materiálu objektu určující schopnost povrchu odrážet okolní světlo. Jeho nulová hodnota znamená, že se ambientní složka od povrchu vůbec neodráží a naopak pro hodnotu jedna, že se světlo od povrchu odráží zcela.

Tato veličina bývá v empirických modelech konstantní pro celou scénu a proto přispívá stejným množstvím osvětlení všem objektům ve scéně.

Difúzní světlo (Diffuse light) C_d[editovat | editovat zdroj]

Difúzní složka udává intenzitu té části světla, která se od matného povrchu tělesa rovnoměrně odráží do všech směrů a její použití již vytváří trojrozměrný vzhled ve scéně. Je invariantní vůči směru pohledu, protože difúzní povrch odráží světlo rovnoměrně do všech směrů. Množství odraženého světla C_d závisí na směru dopadu světla L. Čím více se směr dopadu blíží normále povrchu N, tím větší je množství odraženého světla. Tento jev popisuje Lambertův zákon.

Difúzní složku vypočítáme podle vztahu C_d = I_d k_d (N \cdot L),

kde I_d označuje intenzitu difúzního osvětlení scény, k_d\in(0,1) je podobně jako u okolního světla odrazivý koeficient materiálu, N je normála povrchu v místě dopadu paprsku a L je příchozí směr, odkud dopadá na povrch světlo. Operátor \cdot značí skalární součin vektorů. Jestliže (N \cdot L)\leq 0, znamená to, že je povrch odvrácený od světla a difúzní složka C_d je tudíž nulová.

Lesklé světlo (Specular light) C_s[editovat | editovat zdroj]

Lesklá složka udává intenzitu té části světla, která se od tělesa odráží převážně v jednom směru podle zákona odrazu.

Lesklou složku vypočítáme podle vztahu C_s = I_s k_s (V \cdot R)^n,

kde I_s označuje intenzitu odlesků, k_s\in(0,1) je odrazivý koeficient určující míru zastoupení odražené lesklé složky v celkovém odraženém světle, V je směr, odkud povrch pozorujeme a R je světlo odražené na povrchu podle zákonu odrazu. Je určeno vztahem R=2(N\cdot L)N-L Operátor \cdot opět značí skalární součin vektorů a Phongův exponent n \in (0, \infty) určuje ostrost zrcadlového odrazu (jinými slovy míru lesklosti). Čím je n vyšší, tím jsou odlesky na povrchu tělesa menší, ale intenzivnější.

Světelné složky Phongova osvětlovacího modelu

Celková intenzita odrazu C je pak dána vzorcem C = C_a + C_d + C_s, který slovy říká, že celkový odraz se skládá z ambientní, difúzní a lesklé složky.

Takto definovaný Phongův model ale není fyzikálně korektní, protože nesplňuje základní požadavky na vlastnosti BRDF. Porušuje symetrii a taktéž pro něj neplatí zákon zachování energie.

Fyzikálně korektní Phongův osvětlovací model[editovat | editovat zdroj]

Schéma v radiometrickém názvosloví ilustrující chování světla po dopadu světla na nějaký povrch.

Potřeba vykreslovat počítačovou grafiku nejenom hezky, ale také fyzikálně korektně, vedla k výzkumu [3], jak na tom stávající světelné modely jsou, zaměříme-li se na ně z radiometrického pohledu. Fyzikálně korektní model by měl splňovat vlastnosti dvousměrové distribuční funkce odrazu (BRDF), která slouží k matematickému popisu odrazivých vlastností povrchu v určitém bodě.

Model nejprve uvedeme v radiometrickém názvosloví. Jak je patrné z následující rovnice, vynechali jsme ambientní složku odrazu. Ta se v původním modelu snaží napodobovat globální osvětlení konstantním osvětlením scény, což ale není fyzikálně korektní.

L_o(\omega_o)=L_i(\omega_i)(k_d\, cos\,\theta_i + k_s\, cos^n\,\theta_r)

Přehled změny pojmenování jednotlivých prvků
Radiometrické názvosloví Původní Phongův model Význam
L_o(\omega_o) C odpovídá celkové vyzářené záři (radianci) L_o v odchozím směru \omega_o
L_i(\omega_i) I_d = I_s značí jednotnou intenzitu příchozího světla ze směru \omega_i
cos\,\theta_i N\cdot L skalární součin normálového vektoru a vektoru určující směr přicházejícího světla
cos^n\,\theta_r (V\cdot R)^n skalární součin vektoru odraženého paprsku a vektoru určující směr k pozorovateli, n značí Phongův exponent


Podělením rovnice L_o(\omega_o)=L_i(\omega_i)(k_d\, cos\,\theta_i + k_s\, cos^n\,\theta_r) faktory cos\,\theta_i a L_i(\omega_i) (které jsou součástí integrandu rovnice odrazu a tudíž by se neměly vyskytovat v BRDF) získáme analytické vyjádření BRDF, jež odpovídá původnímu osvětlovacímu Phongovu modelu, které označíme f_r^{PhongOrig} [4]

f_r^{PhongOrig} = k_d + k_s \frac{cos^n \,\theta_r}{cos \theta_i}

Můžeme si povšimnout, že rovnice nesplňuje základní požadavky na vlastnosti BRDF – není symetrická (nesplňuje podmínku reciprocity) vůči svým parametrům \omega_i a \omega_o a rovněž pro ni neplatí ani zákon zachování energie (např. pro k_d > \pi by takto definovaná BRDF odpovídala povrchu, který odráží více světelné energie, než na něj dopadá).

Podmínku reciprocity splníme odstraněním \frac{1}{cos\, \theta_i}, což je jediný člen, který není symetrický vůči záměně příchozí a odchozího směru \omega_i a \omega_o. Máme tedy f_r^{Phong} = k_d + k_s\, cos^n\, \theta_r

Aby BRDF zachovávala energii, musí být její hemisféricko-směrová odrazivost ≤ 1. Spočítáme-li hemisféricko-směrovou odrazivost pro f_r^{Phong} (za předpokladu, že odchozí směr je roven normále povrchu, tj. \omega_o = n)

\rho(\omega_o) |_{\omega_o=n} = \int_{\Omega} (k_d + k_s\, cos^n\, \theta_r) cos\, \theta_i \, d \omega_i = k_d\pi + k_s \frac{2\pi}{n+2}

vidíme, že difúzní složka má odrazivost \rho_d = k_d\pi a lesklá \rho_s = k_s \frac{2\pi}{n+2}. Pro zachování energie stačí přidat podmínku, že \rho_d + \rho_s \leq 1.

Nyní z předchozích vzorců vyjádříme k_d a k_s

k_d = \frac {\rho_d}{\pi}

k_s =\rho_s \frac {n+2}{2\pi}

a po dosazení do f_r^{Phong} získáváme fyzikálně korektní BRDF Phongova modelu f_r^{PhongCorrect}

f_r^{PhongCorrect} = \frac {\rho_d}{\pi} + \frac {\rho_s(n+2)cos^n\, \theta_r}{2\pi}

Stále se však jedná o empirickou BRDF funkci.

Reference[editovat | editovat zdroj]

  1. Bui Tuong Phong, Illumination of Computer-Generated Images, Department of Computer Science, University of Utah, UTEC-CSs-73-129, July 1973.
  2. Bui Tuong Phong, "Illumination for Computer Generated Pictures," Comm. ACM, Vol 18(6): 311–317, June 1975.
  3. Making Shaders More Physically Plausible – Robert R. Lewis (1993)
  4. Poznámky z předmětu Počítačová grafika III – 4. přednáška, Čestmír Houška