關於光照模型
所謂模型,一般是由學術算法發起, 經過大量實際數據驗證而成的可靠公式
現在還記得2009年做TD-SCDMA移動通信算法的時候,曾經看過自由空間傳播模型(Free space propagation Model),目的為了得出移動信號的傳播損耗。當時是基於普通的PC實時運算,非常非常耗時–如北京五環內的傳播模型渲染GIS圖用了超過20分鍾。
光照模型來源有2類:
- 一類是基於學術論文的算法,如Lambert模型、Phong模型.
- 另一類基於算法的變種–在實際生產實踐中修正得到的模型,如HalfLambert模型、BlinnPhong模型.
光照模型公式:
surfaceColor = emissive + ambient + diffuse + specular
物體表面的顏色是自發光(emissive)、環境反射(ambient)、漫反射(diffuse)和鏡面反射(specular)等光照作用的總和。 每種光照作用取決於表面材質性質(例如亮度和材質顏色)和光源的性質(例如光的位置和顏色)。
一般而言,光照模型只考慮漫反射和鏡面反射。
光照模型分類
當光照射到物體表面時,一部分被物體表面吸收,另一部分被反射,對於透明物體而言,還有一部分光穿過透明體,產生透射光。被物體吸收的光能轉化為熱量,只有反射光和透射光能夠進入眼睛,產生視覺效果(物體呈現的亮度和顏色)。 所以,物體表面光照顏色由入射光、物體材質,以及材質和光的交互規律共同決定。
另外,光與物體最基本的交互方式就是反射,遵循反射定律:反射光與入射光位於表面法向兩側,對理想反射面(如鏡面),入射角等於反射角,觀察者只能在表面法向的反射方向一側才能看到反射光。
Unity內置光照模型
在Unity表面着色器(Surface Shader) ,Unity內置了2個光照模型,對於大部分場景選擇使用即可。
源碼路徑:C:\Program Files\Unity\Editor\Data\CGIncludes\Lighting.cginc
Lambert 漫反射
fixed4 LightingLambert (SurfaceOutput s, UnityGI gi)
粗糙的物體表面向各個方向等強度地反射光,這種等同地向各個方向散射的現象稱為光的漫反射(diffuse reflection)。 產生光的漫反射現象的物體表面稱為理想漫反射體,也稱為朗伯(Lambert)反射體。Lambert 模型較好地表現了粗糙表面上的光照現象,如石灰粉刷的牆壁、紙張、黑板等。
BlinnPhong 鏡面反射 (Jim Blinn 1977)
它是以Phong模型為基礎的,效果是能讓高光更加柔和,更平滑;但是真實感還沒Phong模型強,主要是這個模型運算速度要快,即運算效率高。
fixed4 LightingBlinnPhong (SurfaceOutput s, half3 viewDir, UnityGI gi)
一個光滑物體被光照射時, 可以在某個方向上看到很強的反射光,這是因為在接近鏡面反射角的一個區域
內,反射了入射光的全部或絕大部分光強,該現象稱為鏡面反射。諸如金屬材質的反射光澤。 鏡面反射認為光強與反射光線和視線的夾角相關。
其中在OpenGL 和Direct3D 渲染管線中,Blinn-Phong 就是默認的渲染模型。
一些光照模型概念:
- Fresnel菲涅爾反射:在觀察水面的時候,垂直看下去,清澈見底,看遠處的水面,向鏡子一樣,這個就是菲涅爾效應。菲涅爾效應可以說是無處不在,不同的材質效果不同而已。
- 鏡面反射的顏色通常是材料的顏色而不是光源的顏色。
- 塑料使用白色的鏡面高光,漫反射成分大而鏡面反射成分小。
- 金屬的反射一般發生在表面,漫反射分量很小,有時甚至可以忽略,粗糙度的值m也很小。
- Cook-Torrance 模型: 用模型模擬了金屬和塑料材質,考慮到了入射角變化時發生的顏色偏移。
- Bank BRDF光照模型:BRDF就是雙向反射分布函數的意思,它描述了入射光線在某個反射角度的反射光的相對能量。所以給定不同的BRDF函數,就能實現不同的光照效果,如各向異性光照效果–金屬表面拉絲等效果。