参考
may佬《技术美术百人计划》
冯乐乐《UnityShader 入门精要》
【Unity Shaders】法线纹理(Normal Mapping)的实现细节
光照模型 PBR
图形2.4 传统经验光照模型详解
光照模型概述
光照模型(illumination model),也称为明暗模型,用于计算物体某点处的光强(颜色)。从算法理论基础而言,光照模型分为两类:一种是基于物理理论的,另一种是基于经验模型的。
基于物理理论的光照模型(PBR)
偏重于使用物理的度量和统计方法,效果非常真实,但是计算复杂,实现起来也较为困难
经验模型
是对光照的一种模拟,通过实践总结出简化的方法,简化了真实的光照计算,并且能达到很不错的效果
现实世界的光照极其复杂,而且会受到诸多因素的影响,有限的计算能力无法完全模拟。使用简化的光照模型对现实的情况进行近似,使得计算处理起来会更容易,并且使效果更符合需求。
光照模型发展的时间轴:
局部光照模型
只考虑来自光源的直接光照影响,不考虑来自其他物体反射的间接光
局部光照模型满足叠加原理,可以基本将光线分为四个部分:漫反射、高光反射、环境光、自发光
漫反射
- 当光线从光源照射到模型表面时,光线被均匀反射到各个方向,这种现象就是漫反射
- 漫反射过程中,光线发生了吸收(改变颜色)和散射(改变方向)
- 使用lambert余弦定理来计算漫反射光照
Lambert余弦定理
简单的说,反射光线的强度与表面法线和光源方向之间的夹角的余弦成正比
公式: c o l o r = C l i g h t ∗ a l b e d o ∗ d o t ( n o r m a l , L ) color=C_{light}*albedo*dot(normal,L) color=Clight∗albedo∗dot(normal,L)
- C l i g h t C_{light} Clight:入射光颜色
- a l b e d o albedo albedo:模型漫反射材质
- 漫反射效果与观察者位置无关,与光源位置有关
- 兰伯特模型无法提供高光效果,制作出来的材质偏向橡胶
镜面反射(高光反射)
公式: C s p e c u l a r = C l i g h t ∗ m s p e c u l a r ∗ s a t u r a t e ( d o t ( v , r ) ) m g l o s s C_{specular}=C_{light}*m_{specular}*saturate(dot(v,r))^{m_{gloss}} C