光照模拟

主要介绍漫反射光模型

颜色模型(非物理)

光源颜色可以使用RGB混合颜色进行表示,每个通道0-1,代表了各个通道光的光能强度
物体的颜色RGB,每个通道0-1,可以认为是对于各个颜色通道光能反射的比例
举例:
当前光的颜色为(1.0,0.8,0.4),照射到了物体表面的一个点
物体表面点颜色为(0.4,0.2,0.1)
光能冲击进入物体内部后,按照物体颜色比例逃逸出物体表面,向各个方向发散,逃逸光能颜色为:

图-1

光照模型

lightColor的定义:
考察物体上一个微小的方块(即一个像素)
本微元接收到了所有打到上面的光能,并且全面吸收,按比例向四面八方释放
这种微元吸收到的光定义为lightColor

图-2

漫反射的光能为:

图-3

进一步考察,若本微元的法线方向与光入射方向产生了一定的角度,无法全面接收光能lightColor,只能吸收部分光能,则表面在光能垂直方向面积如下:

图-4

此时漫反射的光能为:

图-5

Lambert Model

对于漫反射进行建模,并且按照余弦角度进行光能模拟的算法,即Lambert光照模型

光能方向为lightDir,法线为n,二者归一化

图-6

于是得到漫反射光能:

图-7

余弦函数夹逼

光照也可能产生如下情况:
光照是从表面像素下方入射,导致余弦值为负,所以需要对余弦结果进行处理
如果小于0,则为0;如果大于1,则为1;中间保持不变

图-8

对应的漫反射光能:

图-9

环境光

在余弦值被处理为0的情况下,不被光照到的面呈现完全的黑色
为了防止这种情况,规定无论在任何时候,物体都会得到一定的微小的环境光-lightEnv,因此再次归一化得到:

图-10

漫反射光能:

图-11