光照基础
- 环境光照
- 漫反射光照
-
镜面光照
光照特性
1. 发射光:由物体自身发光
2. 环境光:就是在环境中充分散射的光,而且无法分辨它的方向
在OpenGL中,全局环境光的强度(0.2,0.2,0.2,1.0)
3. 漫反射光:光线来自某个方向,但在物体上各个方向反射。
4. 镜面高光:光线来自一个特定的方向,然后在物体表面上以一个特定的方向反射出去
材质属性
- 泛射材质
- 漫反射材质
- 镜面反射材质
- 发射材质
光照计算
-
发射光的计算
发射颜⾊色 = 物体的反射材质颜⾊
-
环境光的计算
环境光 = 光源的环境光颜色 * 物体的环境材质颜⾊
-
漫反射光计算
漫反射颜⾊色 = 光源的漫反射颜色 * 物体的漫发射材质颜色 * DiffuseFactor
DiffuseFactor = max(0,dot(N,L))
漫反射因⼦子DiffuseFactor 是光线 与顶点法线向量的点积
材质
- 镜面反射
镜⾯面反射颜色 = 光源的镜面光的颜色 * 物体的镜面材质颜色 * SpecularFactor
SpecularFactor = power(max(0,dot(N,H)),shininess)
H :视线向量E 与光线向量L 的半向量
dot(N,H):H,N的点积几何意义,平方线与法线夹⻆角的cos值
H = normalise( l + E)
衰减因子
衰减因子 = 1.0/(距离衰减常量 + 线性衰减常量 * 距离 + 二次衰减常量 * 距离的平方) 距离衰减常量,线性衰减常量和二次衰减常量均为常量值
注意
环境光,漫反射光和镜面光的强度都会受距离的增大而衰减,只有发射光和全局环境光的强度不会受影响
聚光灯因子
聚光灯夹角cos值 = power(max(0,dot(单位光源位置,单位光线向量)),聚光灯指数);
单位光线向量是从光源指向顶点的单位向量
聚光灯指数,表示聚光灯的亮度程度
公式解读:单位光源位置 * 单位光线向量点积的聚光灯指数次方。
聚光灯无过渡 与 有过渡处理
增加过渡计算
聚光灯因子 = clamp((外环的聚光灯⻆度cos值 - 当前顶点的聚光灯角度cos值)/ (外环的聚光灯角度cos值- 内环聚光灯的角度的cos值),0,1);
光照计算终极公式
光照颜色 = 发射颜色 + 全局环境颜色 + (环境颜色 + 漫反射颜色 + 镜面反射颜色) * 聚光灯效果 * 衰减因⼦
案例实战
网友评论