光照是3D游戲中一個(gè)必不可少的部分疆液,場(chǎng)景氛圍的渲染需要光照來(lái)表現(xiàn):
上面是巫師3中的夜景,如果沒(méi)有光的畫整個(gè)表現(xiàn)力將會(huì)降低很大的一個(gè)層次疾渴,這一節(jié)我們將了解光照的形成過(guò)程以及各個(gè)光照模型睬捶。
一奶赠、光源:
1.光形成圖像的過(guò)程
先來(lái)了解一下光線從產(chǎn)生到形成我們眼中圖像的過(guò)程:
這當(dāng)中涉及到光的反射、折射熙尉,最后光進(jìn)入人眼联逻,形成了圖像,這就是光形成圖像的過(guò)程检痰。
2.光源的相關(guān)要素
1.矢量:
光源是一個(gè)矢量包归,他具體位置和方向,例如Unity中的方向光铅歼、點(diǎn)光源公壤,都具備矢量的性質(zhì)。
2.量化:
下面是維基百科中關(guān)于光強(qiáng)的介紹
輻照度:輻照度表示各種頻率輻射的總量椎椰。物理學(xué)者時(shí)常也會(huì)分開(kāi)檢驗(yàn)輻射頻譜的每一單獨(dú)頻率厦幅。假設(shè)對(duì)于入射于曲面的輻射做這動(dòng)作,則稱這輻射為光譜輻照度(spectral irradiance)慨飘,國(guó)際單位制的單位為W/m2确憨。在光學(xué)和激光物理學(xué)中,輻照度也被叫做光強(qiáng)瓤的。
地面上一塊平面的總輻照度等于“直接輻照度”與“漫輻照度”的代數(shù)和休弃,光強(qiáng)與光和物體表面的夾角有關(guān),具體會(huì)在下面介紹堤瘤。
3.光的吸收與散射
光線發(fā)射出來(lái)與物體相交后玫芦,會(huì)有兩個(gè)結(jié)果,一個(gè)是散射
另一個(gè)是吸收
本辐。
- 散射:只改變光線方向桥帆,而不改變光線密度和顏色医增。散射根據(jù)光線改變后的方向分為兩種,若光線散射到物體內(nèi)部的現(xiàn)象則稱為折射老虫,而散射到物體外部的現(xiàn)象則稱為反射叶骨。
- 吸收:只改變光線的密度和顏色,而不改變光線方向祈匙。
從上圖中我們可以看到光從發(fā)射到與物體表面相交后的各種情況忽刽,光線有的被吸收有的被反射有的發(fā)生了折射。其中的藍(lán)色光線表示漫反射夺欲,而黃色光線表示高光反射跪帝。在光照模型中我們會(huì)使用不同部分來(lái)表示光線的這幾種情況:
- 高光反射(Specular):表示物體表現(xiàn)是如何直接反射光線的
- 漫反射(Diffuse):表示光線如何被折射及吸收后反射的
通常用出射度表示出射光線的數(shù)量和方向,出射度與輻照度之間是存在線性關(guān)系的些阅。
4.著色
著色指的是根據(jù)材質(zhì)屬性伞剑、光源屬性,使用一個(gè)公式去計(jì)算沿某個(gè)觀察方向的光線出射度的過(guò)程市埋,這個(gè)公式我們也將之稱為光照模型黎泣。
5.各向異性與各向同性
各向異性 (anisotropy ) 與 均向性 相反,是指在不同方向具有不同行為的性質(zhì)缤谎,也就是其行為與方向有關(guān)抒倚。如在物理學(xué)上,沿著材料做不同方向的量測(cè)坷澡,若會(huì)出現(xiàn)不同行為托呕,通常稱該材料具有某種“ 各向異性 ” ,這樣的材料表面稱為各向異性表面( anisotropic surface )频敛。
光照模型中也存在著各向同性和各向異性的區(qū)別镣陕,例如Lambert漫反射模型是各向同性的,無(wú)論我們從哪個(gè)方向進(jìn)行觀察姻政,物體表面的光照表現(xiàn)都是不變的呆抑,而Phong光照模型中的高光反射則是各向異性的,物體表面的光照表現(xiàn)會(huì)隨著觀察角度的變化而變化汁展。
二鹊碍、光照模型
現(xiàn)實(shí)世界的光照是非常復(fù)雜的,若要準(zhǔn)確的模擬食绿,整體計(jì)算量會(huì)非常的大侈咕,這在游戲渲染中是不現(xiàn)實(shí)的,而光照模型則提供了一種性價(jià)比較高的方案器紧,它是一種經(jīng)驗(yàn)?zāi)P?/strong>耀销,是對(duì)真實(shí)場(chǎng)景進(jìn)行理想化和簡(jiǎn)化后的模型,可以模擬光從發(fā)射到與物體相交再到人眼中的效果铲汪。
計(jì)算機(jī)圖形學(xué)第一定律:如果它看來(lái)是對(duì)的熊尉,那么它就是對(duì)的
現(xiàn)實(shí)世界中的光照罐柳,分為兩種直接光照和間接光照:
直接光照:表示直接從光源發(fā)射出來(lái)照射到物體表面后,光線經(jīng)過(guò)物體表面的一次反射后直接進(jìn)入攝像機(jī)
間接光照:表示光線從光源發(fā)射出來(lái)后狰住,經(jīng)過(guò)不止一次的物體反射后進(jìn)入攝像機(jī)
標(biāo)準(zhǔn)光照模型
光照模型有不同種類张吉,而游戲引擎中往往只使用一個(gè)光照模型,我們稱之為標(biāo)準(zhǔn)光照模型催植。一般光照模型會(huì)包含以下幾個(gè)要素:
- 自發(fā)光(Emission):用于描述當(dāng)給定一個(gè)方向時(shí)肮蛹,一個(gè)表面本身會(huì)向該方向發(fā)射多少輻射量。
- 環(huán)境光(Ambient):在現(xiàn)實(shí)世界中無(wú)論多么黑暗创南,世界都會(huì)有一些光亮(月光伦忠、遠(yuǎn)處的光)在照亮物體,環(huán)境光就是用于模擬無(wú)論什么情況都會(huì)給物體顏色的這種情況稿辙。
- 漫反射(Diffuse):模擬一個(gè)發(fā)光物體對(duì)物體的方向性影響缓苛,面向光的一面會(huì)比另一面更亮。
- 高光(Specular):模擬有光澤物體表面上的亮點(diǎn)邓深,其顏色更傾向于光的顏色而不是物體表面的顏色。
標(biāo)準(zhǔn)光照模型只關(guān)心直接光照笔刹,下面說(shuō)一下標(biāo)準(zhǔn)光照模型的歷史芥备。
1.Lambert模型
Lambert是理想的漫反射模型,他表現(xiàn)的材質(zhì)較為均勻舌菜,不能反映粗糙度帶來(lái)的變化萌壳。
同等數(shù)量的光照射的面積越小,單位表面積收到的光的能量越多日月,這個(gè)原則也構(gòu)成了Lambert定律:
Lambert定律:反射光照的強(qiáng)度與表面法線和光源方向夾角的余弦值成正比
因此Lambert對(duì)應(yīng)的公式為:
C(result) = n · i · (C(light)·C(diffuse))
其中n向量表示表面法線袱瓮,i向量表示光與表面交點(diǎn)指向光源的向量,C(light)表示光的顏色爱咬,C(diffuse)表示漫反射的系數(shù)尺借。
2.Phong(馮氏光照模型)(1975)
馮氏光照模型引入了高光來(lái)增強(qiáng)渲染真實(shí)感,從下圖可以看到精拟,他引入了觀察者視角這一參數(shù)燎斩,反射向量R與視角向量V的夾角決定了高光的強(qiáng)度。
Phong = Ambient(環(huán)境光)+ Diffuse(漫反射) + Specular(高光)
從上圖可以看到蜂绎,Phong氏光照模型由三個(gè)部分組成:環(huán)境光栅表、漫反射、高光反射师枣。其中的Diffuse在上面已經(jīng)講過(guò)了怪瓶,而Specular(高光反射)則是一個(gè)與用戶視線相關(guān)的值,通過(guò)反射光線的向量與視線方向的點(diǎn)積來(lái)影響高光的值践美,如果反射光線與視線方向的夾角越小洗贰,則高光的作用越大找岖。同時(shí)還加入了一個(gè)發(fā)光值(Shiness),來(lái)控制高光擴(kuò)散程度哆姻。下面是Phong模型的數(shù)學(xué)展示圖宣增。
C(Specular) = (C(light)·C(Specular))·pow(max(0, V·R), shiness)
其中C(light)表示光的顏色,C(Specular)表示高光反射的系數(shù)矛缨,shiness則表示發(fā)光值爹脾。下面看下不同的發(fā)光值對(duì)Phong的影響,可以看到發(fā)光值越大箕昭,散射得越少灵妨,高光點(diǎn)越小。
Phong模型是在片段著色器中實(shí)現(xiàn)的落竹,而在早期的光照著色器中泌霍,開(kāi)發(fā)者在著色器中實(shí)現(xiàn)馮氏光照,這種模型Gouraud模型
述召,下面是這兩者的區(qū)別朱转。
- Phong模型:在片段著色器中實(shí)現(xiàn),效果好积暖,效率相對(duì)低
- Gouraud模型:在頂點(diǎn)著色器中實(shí)現(xiàn)藤为,效果差,效率相對(duì)高
3.Blinn-Phong(1977)
Phong模型效果不錯(cuò)夺刑,性能也較高缅疟,但是,如果光源在靠近視野的位置的話就會(huì)出現(xiàn)反射向量與視線向量的夾角大于90度遍愿,從上面的Specular公式可以知道存淫,Phong模型不允許兩向量的點(diǎn)積值小于0,也就是不允許他們的夾角大于90度沼填。
上面這種情況會(huì)導(dǎo)致鏡面區(qū)域邊緣迅速減弱并截止桅咆,如下圖遠(yuǎn)處的暗處:
1977年James F. Blinn引入了Blinn-Phong著色,它擴(kuò)展了我們目前所使用的Phong著色坞笙。Blinn-Phong模型很大程度上和Phong是相似的轧邪,不過(guò)它稍微改進(jìn)了Phong模型,使之能夠克服我們所討論到的問(wèn)題羞海。
Blinn-Phong中引入了半程向量這一概念忌愚,半程向量h是視線向量與光線方向向量的和歸一化后的結(jié)果,將這個(gè)值與表面法線進(jìn)行點(diǎn)乘得到結(jié)果却邓。
h = normalize(lightdir + viewdir)
C(Specular) = (C(light)·C(Specular))·pow(max(0, h·n), shiness)
引入半程向量來(lái)計(jì)算鏡面反射后硕糊,我們?cè)僖膊粫?huì)遇到Phong著色的截止問(wèn)題了,下面是對(duì)比圖:
可以看到截止的問(wèn)題已經(jīng)消失了,整個(gè)過(guò)渡更加的真實(shí)简十。
Unity實(shí)現(xiàn)對(duì)應(yīng)光照模型
To be continued...
參考
[1]https://zh.wikipedia.org/wiki/輻照度
[2]http://www.cnblogs.com/mengdd/archive/2013/08/05/3238123.html
[3]http://learnopengl-cn.readthedocs.io/zh/latest/02%20Lighting/02%20Basic%20Lighting/