定向光源
没有确切位置,无穷远光源
初始光源强度乘以光源颜色
```math I(d)_{dir} = I0_{dir} * Cl_{dir} ```
点光源
光照强度由三个因子来模拟
```math 常量衰减因子:k_c 线性衰减因子:k_l 二次衰减因子:k_q ```
计算公式
```math I(d)_{point} = \frac{I0_{point}*Cl_{point}}{k_c+k_l*d+k_q*d^2} 其中d=|p-s| ```
一般建议只使用线性衰减因子,设置在0.001-0.0005
聚光灯
有一个聚光灯照射范围的圆锥,这个椎体由两个区域组成
```math 内部区域角度(本影umbra):\alpha 外部区域角度(半影penumbra):\phi ```
本影中光照强度恒定,半影中急剧衰减。
1. 如果光源方向与光源到点s向量之间夹角大于半影角度,不计算光照
2. 如果光源方向与光源到点s向量之间夹角小于本影角度,使用100%聚光灯强度,但根据距离进行衰减
3. 如果光源方向与光源到点s向量之间夹角在本影到半影之间,根据距离和减弱(falloff)公式进行衰减
定义一些参数
```math 指定位置p 方向向量l \alpha^*=\alpha / 2 \phi^*=\phi / 2 总体光照强度的指数因子pf 衰减因子k_c,k_l,k_q ```
公式如下
```math 1)\theta > \phi^*时 I(d)_{sportlight}=0 ```
---
```math 2) \theta < \alpha^* I(d)_{sportlight} = \frac{I0_{sportlight}*Cl_{sportlight}}{k_c+k_l*d+k_q*d^2} ```
---
```math 3) \alpha^* < \theta < \phi^* I(d)_{sportlight} = \frac{I0_{sportlight}*Cl_{sportlight}}{k_c+k_l*d+k_q*d^2}*\frac{(cos\theta-cos\phi^*)^{pf}}{(cos\alpha^*-cos\phi^*)} ```
---
对于实时渲染中,可以简化公式,将整个椎体内的衰减因子设置为cosθ
```math I(d)_{sportlight} = \frac{I0_{sportlight}*Cl_{sportlight}*MAX(cos\theta,0)^{pf}}{k_c+k_l*d+k_q*d^2} ```