返回

计算机图形学基础学习笔记-光照模型

点光源

假设点光源的光的强度(能流密度)是\(E=I\),由于点光源向外发送能量是以球面波的形式发送。在距离光源\(r\)处的波面上,光的强度是\(E=\frac{I}{r^2}\)。这一点与大学物理相同。

Blinn-Phong反射模型

首先给出以下定义:

对于某个物体上需要被着色的某一点。其单位法向量为\(\bm n\),这一点指向相机的单位向量为\(\bm v\),指向光源的向量为\(\bm l\)

漫反射

漫反射意味着,从四面八方看过来,这个位置的颜色是一致的。

我们主要关注,这个位置与光源的角度关系,从而得出这个点的颜色。

Lambert’s cosine law

假设光源到达这个点的强度是\(E=I\),那么经过漫反射后,其强度变为\(E=Icos\theta\),即\(E=I\cdot\bm l\cdot\bm n\)

结合点光源,以及漫反射系数,可得

\[L_d=k_d(\frac{I}{r^2})max(0,\bm n\cdot\bm l) \]

其中,\(k_d\)是漫反射系数,与材质有关。\(I\)是点光源的强度,\(r\)是点光源到需要着色的点的距离。后面max的作用是,防止从“内部”或者“下面”射来的光线影响了“表面”的颜色。

通常,\(k_d\)是一个三维向量,如果将纹理颜色赋值给\(k_d\),则会起到给模型贴纹理的效果。

\(L_d\)\(I\)也是三维向量,\(I\)不仅可以代表光的强度,也可以表示光的颜色。\(k_d\)\(I\)的乘法是元素之间相乘。在Eigen中使用cwiseProduct函数。

镜面反射

即,某些材质中,反射角等于入射角,或者反射角很接近入射角时,出现的光强明显大于其他角度的情况。

此时\(\bm v\)非常接近反射角,或者有,半程向量非常接近于法向量\(\bm n\)

半程向量即是\(\bm l,\bm v\)的角平分线的单位向量。有

\[\bm h = \frac{\bm v+\bm l}{||\bm v+\bm l||} \]

此时相机收到的光强为

\[L_s = k_s(\frac{I}{r^2})max(0,\bm n\cdot\bm h)^p \]

其中\(k_s\)是镜面反射系数,\(p\)决定了\(\bm v\)和反射角有多接近才算能触发镜面反射。\(p\)越大触发镜面反射的角度范围越小。通常会取到\(100\)以上。

\(k_s,L_s,I\)仍然是三维向量,乘法规则同前,只不过这里的\(k_s\)通常会采用比较亮的白色,而不会采用其他颜色。

环境光反射

即通过整个环境其他物体的反射,再次射入该物体,给该物体提供亮度。

在Blinn-Phong模型中,我们选择添加常数的亮度。

\[L_a = k_aI_a \]

\(k_a\)是环境光反射常数。

\(k_a,L_a,I_a\)仍然是三维向量,乘法规则同前,只不过这里的\(k_s\)通常会采用比较暗的白色,而不会采用其他颜色。

注意,有多个光源时,不要重复添加环境光反射。

三个反射混合

\[L = L_a+L_d+L_s \]