历史普及:1975年,著名学者裴祥风(Bui Tuong Phong)提出了标准光照模型背后的基础概念。
标准光照模型只关心直接光照,也就是那些直接从光源发射出来照射到物体表面后,经
过物体表面的一次反射直接进入摄像机的光线分为四个部分:自发光、高光反射、漫反
射、环境光。
声明 :最终支持产权,本文部分内容出自《UnityShader入门精要-冯乐乐》,值得推荐的入门书籍。
全局注释:
-C_* :Color_*
-M_* :Material_*
1. 环境光(ambient)
理论 : 在Unity中我们使用一种被称为环境光的部分来模拟间接光照,它是一个全局变量。
公式 : C_ambient = G_ambient(UNITY_LIGHTMODEL_AMBIENT.xyz)
2. 自发光(emissive)
理论 : 由于没有使用全局光照技术(global illumination)技术,这些自发光不会真的照亮周围物体
光源直接摄入摄像机,不需要经由任何物体反射
公式 : C_emissive = M_emissive3. 漫反射(diffuse)
理论 : 兰伯特定律:反射光线的强度与表面法线和光源方向之间家教的余弦值成正比
公式 : C_diffuse = (C_light M_diffuse)max(0,n·l)
n - 表面法线l - 只想光源的单位矢量
M_diffuse - 材质的漫反射颜色
C_light - 光源颜色
4. 高光反射(specular)
理论 1 : Phong模型:反射光线的强度与表面法线和光源方向之间家教的余弦值成正比
公式 1 :C_specular = (C_light M_specular)pow(max(0,v·r),M_glass)
M_glass - 材质的光泽度(反光度)C_light - 光源颜色和强度
v - 视角方向
r - 反射方向
理论 2 : Blinn模型:为避免计算反射方向 r,引入新的 h = (v+l)/(|v+l|)
公式 2 :C_specular = (C_light M_specular)pow(max(0,v·h),M_glass)
M_glass - 材质的光泽度(反光度)C_light - 光源颜色和强度
v - 视角方向
h - v 和 l 平均后再归一化得到
结语:后续文章中会更新各种光照模型