光照基础
从左到右依次为:
- 环境光照
- 漫反射光照
- 镜面光照
- 将上述三者合并便是冯氏明暗处理算法
光照特性
- 发射光:由物体自身发光
- 环境光:就是在环境中充分散射的光,而且无法分辨它的方向
- 漫反射光:光线来自某个方向,但在物体上各个方向反射
- 镜面高光:光线来自一个特定的方向,然后在物体表面上以一个特定的方向反射出去
材质属性
- 泛射材质
- 漫反射材质
- 镜面反射材质
- 发射材质
光照计算
- 环境光的计算(亮度) 环境光 = 光源的环境光颜色 * 物体的材质颜色
2. 发射光的计算 发射颜色 = 物体的反射材质颜色
光照比较
漫反射光照计算
光线照射到物体表面,决定物体表面光照的强度,用下图表示:
光照强度是光本身强度和光线与物体表面法线夹角cos的乘积,有效的光照方向是与物体表面法线夹角在0~90度之间
。
漫反射颜色 = 光源的漫反射颜色 * 物体的漫反射材质 * DiffuseFactor
DiffuseFactor = max(0, dot(N, L))
漫反射因子DiffuseFactor
是光线与顶点法线向量的点积
镜面光计算
N
: 平面法线
I
: 入射光线
H
: 反射光线
E
: 视线
α
: 视点与反射光的夹角
镜面反射颜色 = 光源的镜面光的颜色 * 物体的镜面材质颜色 * SpecularFactor
SpecularFactor = power(max(0, dot(N,H)), shininess)
H
: 视线向量E与光线向量L的半向量
dot(N,H)
: H, N的点积,几何意义为平方线与法线夹角的cos值
shiniess
: 高光的反光度
光照颜色 = (环境颜色 + 漫反射颜色 + 镜面反射颜色)* 衰减因子
衰减因子
衰减因子 = 1.0/(距离衰减常量 + 线性衰减常量 * 距离 + ⼆次衰减常量 * 距离的平方
距离衰减常量,线性衰减常量和⼆次衰减常量均为常量值。
注意
:环境光、漫反射光和镜面光的强度都会受距离的增大而衰减,只有发射光和全局环境光的强度不会受影响。
聚光灯因子
聚光灯夹⻆cos值 = power(max(0,dot(单位光源位置,单位光线向量)),聚光灯指数);
- 单位光线向量是从光源指向顶点的单位向量
- 聚光灯指数,表示聚光灯的亮度程度
- 公式解读:单位光源位置和单位光线向量的点积的聚光灯指数次方
聚光灯无过渡与有过渡处理
增加过渡计算
聚光灯因⼦ = clamp((外环的聚光灯⻆度cos值 - 当前顶点的聚光灯⻆度cos值)/ (外环的聚光灯⻆角度cos值 - 内环聚光灯的角度的cos值),0,1)
光照计算终极公式
光照颜色 = 发射颜色 + 全局环境颜色 + (环境颜色 + 漫反射颜色 + 镜⾯面反射颜色) * 聚光灯效果 * 衰减因子