• Home
  • About
    • 黑脸包公 photo

      黑脸包公

      书山有路勤为径,学海无涯苦作舟.

    • Learn More
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

光源类型

20 Mar 2019

Reading time ~1 minute

定向光源

没有确切位置,无穷远光源

初始光源强度乘以光源颜色

```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} ```



Share Tweet +1