常用光照計算算法

此處根據GPU 編程與CG 語言之陽春白雪下里巴人這本書進行概括整理,對常用的一下算法收集到一塊;
常用的材質參數我會再進行整理

經典光照模型

  • 漫反射 Lambert(蘭伯特)模型
    1. 對於僅暴露在環境光下的Lambert反射體
      Cambdiff = KaCa
      Ka爲材質對環境光的反射係數,Ca爲環境光顏色,Cambdiff爲物體與環境光的交互反射光顏色;
    2. 對於暴露在方向光下的Lambert反射體
      Cidiffuse = Kd (CL * Md) cosθ
      Kd爲材質對漫反射光的反射係數,CL是點光線顏色,θ是物體法線與光方向的夾角,Kd同上,Cidiffuse爲物體漫反射後光線顏色, Md爲材質本身顏色;
  • 鏡面反射與Phong 模型
    1. 計算鏡面反射的Phong模型
      Cspec = Ks (CL * Ms) (V·R)ns
      Ks爲材質的鏡面反射係數,ns爲高光指數,V爲頂點到視點的方向向量,R代表反射光方向,Ms爲材質高光顏色;
      R的求法:
      R + L = 2(L·N)N //L爲頂點指向光源的方向向量,N爲法向量
      可得,R = 2(L·N)N - L;
    2. 計算鏡面反射的Blin-Phong模型
      Cspec = Ks (CL * Ms) (N·H)ns
      H爲L與V的中間向量,也稱半角向量,Im爲材質本身顏色;
      H的求法:H = (L + V) / |L + V|;
      Blin-Phong模型相比於Phong模型,減少了計算量,但模擬效果沒有Phong模型真實

可得到經典光照模型下的光強計算公式爲:

C = KaCa + Kd (CL * Md) cosθ + Ks (CL * Ms) (V·R)ns
C = KaCa + Kd (CL * Md) cosθ + Ks(CL * Ms) (N·H)ns
需要的參數爲:
float:Ka、Kd、Ks;
vec3:Ca、CL,Md,Ms、V、N、L;

  • Half Lambert(半蘭伯特)模型
    該模型是在原模型上進行了簡單修改,公式如下:
    Iidiffuse = Kd (IL * Im)(α * cosθ + β)
    1. 與原模型相比,對cosθ進行了一個α倍的縮放,和一個β大小的偏移;
    2. 絕大多數情況下,α、β的值取0.5。即:
      Iidiffuse = Kd (IL * Im)(0.5cosθ + 0.5)
    3. 用途:可替換經典光照模型中的Lambert模型;
  • Fresnel Reflection(菲涅爾反射)
    光線照射到透明物體上時,一部分發生反射,一部分進入物體內部並在介質交界處發生折射,被反射和折射的光通量存在一定的比率關係,這個比率關係可以通過Fresnel 定律進行計算。
    1. 通常我們所說的fresnel 係數指“反射係數“;如果fresnel爲0.7,那麼被反射光線就佔70%,穿過表面的折射光線則是30%。
    2. 我們用Kr 表示fresnel 反射係數,用Kt表示折射係數
    3. 用途:在渲染具有反射和折射的透明物體時,配合環境紋理使用;

關於高級光照模型等我學會了再寫==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章