圖形學(xué)學(xué)習(xí)筆記(二)Phong光照模型(上)
什么是Phong模型?
????Phong光照模型是20世紀(jì)70年代被提出的一種渲染逼真圖像的方法,模型的提出者是越南出生的計(jì)算機(jī)圖形學(xué)研究員Bui Tuong Phong(1942-1975),他提出的近似方法實(shí)現(xiàn)了較逼真的圖像。

????Phong模型在當(dāng)今硬件性能下已顯得無法滿足高質(zhì)量真實(shí)圖像的要求,由于其渲染高性價(jià)比,今天被廣泛應(yīng)用于一些非真實(shí)感的渲染。
????在Phong模型中,我們希望達(dá)到以下三個(gè)目標(biāo):
實(shí)時(shí)顯示三維對(duì)象的動(dòng)態(tài)彩色圖片。實(shí)時(shí)顯示系統(tǒng)能夠以每秒至少30幀的速率生成圖片。
由光滑曲面制成的物體的表示。
消除或衰減數(shù)字采樣技術(shù)的影響。
隱藏曲面算法
????曲面對(duì)于著色有巨大的影響,在著色中,一般采用以下兩種方法描述我們的對(duì)象:
使用數(shù)學(xué)方程定義曲面。
平面多邊形的曲面逼近。
在當(dāng)時(shí)的硬件條件下,數(shù)學(xué)方程即使只考慮二次曲面,使用這種模型的實(shí)時(shí)顯示系統(tǒng)的實(shí)現(xiàn)也過于昂貴與復(fù)雜。因此我們采用第二種方法,使用平面多邊形來逼近曲面。而第二個(gè)方法又帶來了兩個(gè)新的問題:輪廓邊緣問題與多邊形真實(shí)著色問題。
????本文主要討論后者,主要提及了畫家算法和深度緩沖算法
畫家算法
????畫家算法就是首先繪制距離較遠(yuǎn)的場(chǎng)景,然后用繪制距離較近的場(chǎng)景覆蓋較遠(yuǎn)的部分。
畫家算法首先將場(chǎng)景中的多邊形根據(jù)深度進(jìn)行排序,然后按照深度從大到小順序進(jìn)行描繪。
比如下面的場(chǎng)景,深度順序背景、山、草地、數(shù)目,所以先繪制背景,再繪制山,然后繪制草地,最后繪制數(shù)目。然而,在描述以下的圖形位置關(guān)系時(shí),會(huì)失效。

深度緩沖算法
????
深度緩沖的算法過程如下:
1.首先分配一個(gè)數(shù)組buffer,數(shù)組的大小為像素的個(gè)數(shù),數(shù)據(jù)中的每個(gè)數(shù)據(jù)都表示深度,初始深度值為無窮大
2. 隨后遍歷每個(gè)三角形上的每個(gè)像素點(diǎn)[x,y],如果該像素點(diǎn)的深度值z(mì)<zbuffer[x,y]中的值,則更新zbuffer[x,y]值為該點(diǎn)深度值z(mì),并更新該像素點(diǎn)[x,y]的顏色為該三角形上像素點(diǎn)上的顏色。

多邊形著色
????當(dāng)平面多邊形用于對(duì)象建模時(shí),通常通過使用多邊形的法向量對(duì)對(duì)象進(jìn)行著色。多邊形上每個(gè)點(diǎn)的陰影是多邊形的陰影系數(shù)與多邊形法線與入射光方向之間的角度余弦的乘積。是材料相對(duì)于入射波長(zhǎng)的反射系數(shù),i是入射角。
????
此著色僅提供真實(shí)物理效果的非常粗略的近似值。它不允許材質(zhì)的任何鏡面反射,即材質(zhì)通過其外表面的反射生成高光的能力,以及觀察者的位置,這一點(diǎn)被忽略。然而,這種方法的一個(gè)更嚴(yán)重的缺點(diǎn)是,使用它顯示平滑曲面時(shí)效果不佳。余弦定律規(guī)則適用于用平面正確建模的對(duì)象,例如長(zhǎng)方體、建筑物等,但不適用于平滑曲面,例如汽車車身。

該論文使用如下幾種措施對(duì)真實(shí)感進(jìn)行彌補(bǔ)
Warnock提出,隨著光源和物體之間的距離,反射光的的強(qiáng)度降低來恢復(fù)深度感覺,同時(shí)將著色函數(shù)拆分成為兩個(gè)函數(shù)的總和,一項(xiàng)為正常的余弦定律,另一項(xiàng)用于鏡面反射光,例如,在空間中不同位置的相同平行面將以不同的強(qiáng)度進(jìn)行著色,直接面向光源的面比稍微遠(yuǎn)離入射光的相鄰面更亮。
Newell和Sancha提出了一些關(guān)于創(chuàng)建透明度和亮點(diǎn)的想法。通過在現(xiàn)實(shí)世界中的觀察,他們發(fā)現(xiàn)高光不僅由入射光源產(chǎn)生,而且由場(chǎng)景中其他對(duì)象的反射光產(chǎn)生;這在由高反射或透明材料制成的物體的情況下尤其如此。在Newell-Sancha模型中,曲面近似于平面多邊形。不幸的是,由于無法在任何單個(gè)多邊形的表面上改變光強(qiáng)度,生成高光的能力受到嚴(yán)重限制。

Gouraud開發(fā)了一種陰影曲面的算法。使用他的算法,由面片表示的曲面由多邊形平面面近似。Gouraud計(jì)算這些面中每個(gè)面的每個(gè)頂點(diǎn)處的曲面曲率信息。根據(jù)曲率計(jì)算并保留陰影強(qiáng)度。例如,可以使用余弦定律等式計(jì)算每個(gè)頂點(diǎn)的陰影強(qiáng)度,其中i是入射光與該頂點(diǎn)處表面法線之間的角度。顯示曲面時(shí),此著色強(qiáng)度沿對(duì)象相鄰頂點(diǎn)對(duì)之間的邊線性插值。

表面上某一點(diǎn)處的陰影也是沿著掃描線的陰影的線性插值,該掃描線位于邊緣的中間部分之間,平面穿過掃描線。這種非常簡(jiǎn)單的方法在整個(gè)表面上提供了連續(xù)的陰影漸變,這在大多數(shù)情況下可以恢復(fù)平滑的外觀。

然而,問題仍然存在,其中之一是多邊形邊緣之間的明顯不連續(xù)性。在具有高鏡面反射分量的表面上,高光的形狀通常不合適,因?yàn)樗鼈內(nèi)Q于用于接近曲面的多邊形的配置和形狀,而不取決于對(duì)象曲面本身的曲率。由于描述表面的多邊形的方向改變,運(yùn)動(dòng)中的表面(在計(jì)算機(jī)生成的電影中)的著色具有令人討厭的幀間不連續(xù)性。此外,著色算法在旋轉(zhuǎn)下不是不變的。

計(jì)算機(jī)生成的膠片中陰影的幀到幀不連續(xù)性如下所示。曲面近似于平面。當(dāng)該曲面處于運(yùn)動(dòng)狀態(tài)時(shí),與燈光方向垂直的所有面都呈現(xiàn)均勻的陰影。在下一幀中,對(duì)象的運(yùn)動(dòng)使這些面朝向燈光的方向不同,并且其表面上的陰影強(qiáng)度從一端到另一端連續(xù)變化。因此,曲面似乎從具有高光的曲面變?yōu)榫哂芯鶆蜿幱暗那妗4送?,?dāng)對(duì)象旋轉(zhuǎn)時(shí),這些高光的位置在幀與幀之間并不穩(wěn)定。
馬赫帶效應(yīng)
人們可能期望通過減小多邊形的大小來避免這些問題。當(dāng)然,這是不可取的,因?yàn)檫@會(huì)增加多邊形的數(shù)量,因此會(huì)增加存儲(chǔ)模型的內(nèi)存需求和刪除隱藏曲面的時(shí)間。
不光如此,馬赫帶效應(yīng)的存在反而使效果更差,當(dāng)人們觀察兩塊亮度不同的區(qū)域時(shí),邊界處亮度增強(qiáng),使輪廓表現(xiàn)對(duì)比加強(qiáng),在生理學(xué)上的解釋即人的視覺系統(tǒng)有增強(qiáng)邊緣對(duì)比度的機(jī)制。
