一、顏色模型
1.顏色
- 顏色格式
1.浮點數格式
2.字節值格式 顏色加法
Csum =C1 +C2 =(MAX(r1+r2,255),MAX(g1+g2,255),MAX(b1+b2,255)) 顏色調製
調製顏色亮度:Cmodulated=s∗C1=(s∗r1,s∗g1,s∗b1)
s爲0到正無窮任意值
直到rgb中有一值達到255.便不再變化(三分量都不再變化)- alpha 混合
將多個像素的顏色相加混合,混合時指定每個源像素的百分比。
pixel_dest[x,y]rgb=pixel_source1[x,y]rgb∗alpha+pixel_source2[x,y]rgb∗(1−alpha)
2.光照模型
光源
1.點光源
位置,發射光顏色,四周發散2.無窮遠光源
單方向照明,光路幾何平行
僅需定義發射方向向量和顏色3.輻射強度衰減
fl,radatten=⎧⎩⎨⎪⎪1.0,1a0+a1dl+a0d2l,如果光源在無窮遠處如果光源是局部光源 4.方向光源和投射
位於光源方向範圍之外的對象得不到該光源的光照
一個方向向量加一個角度範圍:光錐
Vobj⋅Vlight=cosα把任意一光錐角度範圍限制在0∘<θl<90∘,則當cosα≥cosθl時,對象位於投影光內
Vobj:光源到對象位置的單位向量Vlight:光源方向的單位向量 5.角強度衰減(只有方向光源(即投影光源)纔有角強度衰減)
圓錐軸光強最大,離開圓錐軸時逐漸減弱
fl,angatten=⎧⎩⎨⎪⎪⎪⎪1.0,0.0,(Vobj⋅Vlight)al,光源不是投影光源Vobj⋅Vlight=cosα<cosθl其他 表面光照效果
表面光學特性:透明度,顏色反射係數,各種表面紋理參數
不透明:反射,吸收
粗糙顆粒:漫反射
漫反射光顏色稱爲對象的顏色
鏡面反射
一個表面上的反射是 全體光源光的反射 加上 其他被照明對象反射光的反射基本光照模型
環境光,全局漫反射
對於表面S一點,反射的環境光強度可表示爲:
Itotal=Csambient∗Iambient (1)
環境光強度:Csambient
環境反射顏色:Iambient 漫反射
理想漫反射模型(朗博反射體):入射光在各個方向上以相同強度發散,與觀察位置無關
朗伯余弦定律:計算理想漫反射模型表面任意一點反射出的輻射光能量
在與對象表面法向量夾角爲ϕN 的方向上, 每個面積爲Δ A的平面單位所發散的光線與cosϕN 成正比。
該方向上的光強度可用單位時間輻射能總量除以表面積在輻射方向上的投影來計算強度=單位時間輻射能投影面積∝cosϕNΔAcosϕN=常數 假設在我們的模型中, 每種表面材質都有其特定的漫反射顏色
Rsdiffuse ,它決定了該表面材質對散射光的反射程度, 稱爲 漫反射係數。對於背景光, 可假設每一表面都使用對場景設定的環境光
Ia 來照明,因此對於表面上任何一點而言,環境光對漫反射的貢獻都是:
Iambdiff=Rsdiffuse∗Ia
場景很少只用環境光繪製,至少還需要一個點光源,常位於觀察位置。入射光線與表面相交光線數量與該表面投影到入射光線方向的面積成正比,因此,一個強度爲
Il 的光源的入射光總量爲:
Il,incident=Ilcosθ 故,強度爲
Il 的光源的漫反射爲:
Il,diff=Rsdiffuse∗Il,incident=Rsdiffuse∗Ilcosθ 記 單位法向量 N , 指向點光源 的單位方向向量 L
cosθ=(N⋅L) 故點光源在表面照明的漫反射公式可表示爲:
Il,diff={Rsdiffuse∗Il∗(N⋅L),0.0,N⋅L>0N⋅L≤0 故加入點光源在表面照明的漫反射項後,光照模型如下:
在有多個光源的情況下,只需要將每個光源在表面照明的漫反射項累積起來,而環境光漫反射((1)式)保持不變。在
(N⋅L>0) 情況下:
Itotalad=Csambient∗Iambient+Rsdiffuse∗∑i=1n[I(i)diffuse∗(ni⋅li)]
鏡面反射
鏡面反射角等於入射角。對於一個理想反射體,入射光僅在鏡面反射方向有反射現象,即當 觀察方向 與 反射方向 重合時才能觀察到反射光線。
Phong 模型:
Phong光照模型是真實圖形學中提出的第一個有影響的光照明模型,該模型只考慮物體對直接光照的反射作用,認爲環境光是常量,沒有考慮物體之間相互的反射光,物體間的反射光只用環境光表示。Phong光照模型屬於簡單光照模型。
該模型認爲,鏡面反射光強度和(cosθ)ns 成正比。
參數ns 的值則由要顯示的表面材質所決定。光滑表面ns 要大,粗糙表面ns 要小(小到1)。
物體的鏡面反射係數越大,鏡面反射區域越小。當反射向量 R 與觀察向量 V 的夾角接近於0時,反射光強度將急劇增大。隨着夾角增大,反射光強急劇降低。爲模擬鏡面反射光照, 需要考慮 觀察向量 和 反射向量 以及一個定義物體表面 光潔度 的常量(鏡面反射率,specularity),反射係數(
ks 可以簡單的設置爲0到1 之間某個值,對於許多不透明的材質,幾乎對所有入射角的鏡面反射均爲常量), 光照強度Ispecular , 鏡面反射指數(ns )。由於反射向量 R 的方向可以通過向量 L 和 N 計算出來,其中 L R 和 N 都是單位向量:
R+L=(2N⋅L)NR=(2N⋅L)N−Lcosθ=V⋅R
故,Phong模型鏡面反射反射爲:
Il,spec=ksIspecular(cosθ)ns={ksIspecular(V⋅R)ns0.0,V⋅R>0V⋅R≤0 Blinn-Phone:
由於R向量的計算太浪費,採用一種近似的方法,使用半角向量 H 和 法線向量 N 的夾角ϕ 去近似θ 角。半角向量就是平分兩個向量之間夾角的單位向量。兩個向量相加,結果是兩個向量構成的平行四邊形的對角線,所以半角向量是兩個向量相加。
Blinn-Phone的改進就是不用反射向量去計算鏡面反射,而是用入射光向量和觀察向量的 半角向量 來代替計算。這一方法也是沒有物理依據的,只是這樣計算計算量更少而且效果差不多甚至更好。
H=L+V|L+V|cosϕ=N⋅H≈V⋅R=cosθ
漫反射和鏡面反射的合併
對於單個點光源,
I=Idiff+Ispec=Csambient∗Iambient+Rsdiffuse∗Il∗(N⋅L)+ksIl(N⋅H)ns 對於多個點光源,可在任意一個表面點上疊加各個光源的效果
I=Iambdiff+∑i=1n[I(i)diff+I(i)spec]=Csambient∗Iambient+∑i=1n[I(i)∗[Rsdiffuse∗(N⋅L)+ks(N⋅H)ns]]