Fonga atstarošanas modelis

**Fonga atstarošanas modelis** (tiek saukts arī par **Fonga izgaismojumu** vai **Fonga apgaismojumu**) ir empīrisks modelis lokālai virsmas punktu izgaismošanai. 3D datorgrafikā to dažreiz sauc par "Fonga ēnojumu", ja modelis tiek izmantots ar tāda paša nosaukuma interpolācijas metodi, kā arī pikseļu ēnotājos vai citviet, kur apgaismošanas aprēķinu var nodēvēt par "ēnošanu".

## Vēsture
Fonga atstarošanas modeli izstrādāja Bujs Tongs Fongs Jūtas universitātē, kas to publicēja 1975. gadā savā doktora disertācijā. Modelis tika publicēts kopā ar metodi, ar kuru aprēķināt interpolāciju katram atsevišķam pikselim, kas ticis rasterizēts no daudzstūru virsmas modeļa; interpolācijas metodi sauc par Fonga ēnojumu. Fonga metodes tika uzskatītas par radikālām, kad viņš ar tām nāca klajā, taču kopš tā laika tās ir kļuvušas par *de facto* pamata ēnošanas metodēm daudzām renderēšanas lietotnēm. Fonga metodes ir kļuvušas populāras, pateicoties iedarbīgam skaitļošanas laikam, renderējot katru pikseli.

## Apraksts
Fonga atstarojums ir empīrisks modelis lokālai izgaismošanai. Tas apraksta veidu, kā virsma atstaro gaismu kā rupju virsmu izkliedētu atstarojumu kombinācijā ar spīdīgu virsmu spoguļatstarojumu. Modelis ir balstīts uz Fonga novērojumu, ka spīdīgām virsmām ir neliela izmēra, spēcīgs spīdums, kamēr matētām virsmām ir lieli spīdumi, kas izkliedējas daudz pakāpeniskāk. Modelī ir arī *ambientas* gaismas termins, kas raksturo gaismu, kura ir izkliedēta pa visu ainu.

Katram gaismas avotam ainā ir definētas divas intensitātes kompenentes (kas bieži tiek izteiktas kā RGB vērtības), i_\text{s} un i_\text{d}, kas respektīvi atbilst gaismas avota spoguļatstarojumam un izkliedētajam atstarojumam. Apzīmējums i_\text{a} regulē ambiento apgaismojumu; to mēdz aprēķināt kā visu gaismas avotu izstarojumu summu.

Katram ainas *materiālam* tiek definēti sekojošie parametri:

: k_\text{s}, kas ir spoguļatstarojuma konstante, ienākošās gaismas spoguļatstarojuma attiecība,
: k_\text{d}, kas ir izkliedētā atstarojuma konstante, ienākošās gaismas izkliedētā atstarojuma attiecība (Lamberta atstarojums),
: k_\text{a}, kas ir ambientā atstarojuma konstante, visu ainā norenderēto punktu ambientā atstarojuma attiecība, un
: \alpha, kas ir spīdīguma konstante attiecīgajam materiālam, kura ir lielāka gludām un spoguļveidīgām virsmām. Kad šī konstante ir liela, tad spoguļatstarojuma spīdums ir neliels.

Turklāt ir arī šādi parametri:

: \text{lights}, kas ir visu gaismas avotu kopa,
: \hat{L}_m, kas ir virziena vektors no punkta uz virsmas pret gaismas avotu (m apzīmē gaismas avotu),
: \hat{N}, kas ir virsmas normāle punktam uz virsmas,
: \hat{R}_m, kas ir virziens tādam gaismas staram, kurš perfekti atstarotu gaismu no attiecīgā punkta uz virsmas, un
: \hat{V}, kas ir virziens, kurš ir pavērsts pret skatītāju (piemērs varētu būt virtuālā kamera).

Fonga modelis arī nodrošina vienādojumu, lai aprēķinātu izgaismojumu katram virsmas punktam I_\text{p}:

: I_\text{p} = k_\text{a} i_\text{a} + \sum_{m\;\in\;\text{lights}} (k_\text{d} (\hat{L}_m \cdot \hat{N}) i_{m,\text{d}} + k_\text{s} (\hat{R}_m \cdot \hat{V})^{\alpha}i_{m,\text{s}}).

kur virziena vektors \hat{R}_mtiek aprēķināts kā \hat{L}_m atstarojums uz virsmas, kura tiek aprakstīta ar virsmas normāli \hat{N} , izmantojot

: \hat{R}_m = 2(\hat{L}_m\cdot \hat{N})\hat{N} - \hat{L}_m

un kur jumtiņi apzīmē, ka vektori ir normalizēti. Skatītāja virziens (\hat{V}) neietekmē izkliedētā atstarojuma intensitāti (i_\text{d}). Spoguļatstarojuma intensitāte (i_\text{s}) ir liela tikai tad, kad skatītāja virziens (\hat{V}) ir līdzens ar atstarojuma virzienam \hat{R}_m. To līdzenumu mēra izrēķinot kosīnusu pakāpē \alpha no leņķa starp virzieniem. Kosīnuss leņķim starp normalizētajiem vektoriem \hat{R}_m un \hat{V}  ir vienāds ar to vektoru skalāro reizinājumu. Kad \alpha ir liels, jeb gandrīz spoguļveida atstarojumos, tad spoguļatstarojuma spīdums būs mazs, jo jebkuram skatupunktam, kas nav līdzens ar atstarojumu, kosīnuss būs mazāks par to, kurš strauji pietuvojas nullei, kad tā pakāpe tiek palielināta.

Lai gan augstākesošā formula ir pieņemts veids, kā atspoguļot Fonga atstarojuma modeli, katru no virsmu veidiem būtu jāiekļauj tikai tad, ja tās vektoru skalārais reizinājums ir pozitīvs. (Kā arī, spoguļatstarojumu jāiekļauj tikai tad, ja izkliedētā atstarojuma skalārais reizinājums ir pozitīvs.)

Kad krāsu atspoguļo kā RGB vērtības, kā to mēdz darīt datorgrafikā, šis vienādojums parasti tiek modelēts atsevišķi katrai krāsas kanāla intensitātei, izmantojot dažādas atstarojuma konstantes  k_\text{a}, k_\text{d} and k_\text{s} katram krāsas kanālam.

## Izmantošana
Fonga atstarošanas modeli bieži lieto kopā ar Fonga ēnotāju, lai ēnotu virsmas 3D datorgrafikas programmās. Tam ir arī citi pielietojumi, piemēram, tas ir ticis pielietots, lai modelētu siltuma starojumu *Pioneer* zondēs, tādā veidā mēģinot izskaidrot Pioniera anomāliju.

## Atsauces