Chapter6 Unity中的基础光照
一、光照基础
1.光源
- 在光学里用辐照度 irradiance 来量化光
- 对于平行光来说,irradiance 可以通过计算在垂直于 l(光照方向)的单位面积上单位时间内穿过的能量
- 对于倾斜的来说,可以使用光源方向 l 和 表面法线 n 之间的夹角余弦值来得到(l · n)
2.吸收和散射
- 光线射出后会与物体相交,相交的两种结果——吸收和散射
- 散射
- 只改变光线方向,不改变颜色和密度
- 一种是散射到物体内部——折射 refraction
- 一种是散射到外部——反射 reflection
- 吸收
- 只改变光线颜色和密度,不改变方向
- 只改变光线颜色和密度,不改变方向
- 散射
- 高光反射 specular 表示物体表面如何反射光线
- 漫反射 diffuse 表示有多少光线会被吸收、折射和散射出表面
- 对于出射光线的数量和方向,我们用出射度 exitance来描述
3.着色
- 根据材质属性(漫反射属性等)、光源信息(光照方向、辐照度等),使用一个等式计算沿某个观察方向的出射度的过程
- 这个等式也成为光照模型
4.BRDF光照模型
- 解决:当光线从某一方向照射到表面时,有多少光线被反射?反射方向有哪些?
- 当给定入射光线的方向和辐照度后,BRDF可以给出在某个出射方向的光照能量分布
- 是经验模型,对真实场景理想化和简化后的模型
二、标准光照模型
- 只关心直接光照(物体表面一次反射直接进入摄像机的光线)
- 是各项同性的
- 把进入摄像机内的光线分为四个部分,分别计算其贡献
- 自发光 emissive:描述给定一个方向时,物体表面本身会向该方向发射多少辐射量
- 高光反射 specular:描述表面会在完全镜面反射方向散射多少辐能量
- 漫反射 diffuse:描述表面会向每个方向散射多少辐能量
- 环境光 ambient:描述所有间接光照
1.环境光 Ambient
- 模拟间接光照:光线会在多个物体之间进行反射,最后进入摄像机
- 在标准光照模型中,是全局变量 c a m b i e n t c_{ambient} cambient = g a m b i e n t g_{ambient} gambient
2.自发光 Emissive
- 光线可以从光源之间进入相机,不需要反射
- 计算时直接使用该材质的自发光颜色 c e m i s s i v e c_{emissive} cemissive = m e m i s s i v e m_{emissive} memissive
- 在实时渲染中,自发光的表面并不会照亮周围的表面(并不会被当成光源)
3.漫反射 Diffuse
- 可以认为在任何反射方向上的分布都是一致的,入射光线的角度很重要
- 符合 兰伯特定律 Lambert’s Law:
- 反射光线的强度与表面法线和光源方向之间的夹角成余弦值成正比
c d i f f u s e c_{diffuse} cdiffuse = ( c l i g h t c_{light} clight · m d i f f u s e m_{diffuse} mdiffuse) max(0, n · I) - n为表面法线,I 为指向光源的单位矢量, m d i f f u s e m_{diffuse} mdiffuse 是材质的漫反射颜色, c l i g h t c_{light} clight 为光源颜色
- max(0, n · I) 是防止法线和光源方向点乘的结果为负值,截取到0,防止被从后面来的光源照亮
- 反射光线的强度与表面法线和光源方向之间的夹角成余弦值成正比
4.高光反射 Specular
- 是一种经验模型,用于计算沿着完全镜面反射方向被反射的光线
- 需要知道 表面法线、视角方向、光源方向、反射方向(可以通过其他三个算出来)
- r = 2( n ^ \hat{n} n^ · I) n ^ \hat{n} n^ - I
Phong模型
- c s p e c u l a r c_{specular} cspecular = ( c l i g h t c_{light} clight · m s p e c u l a r m_{specular} mspecular) max(0, v ^ \hat{v} v^ · r ) σ )^{σ} )σ
- σ 为材质光泽度,控制高光区域的亮点有多宽,σ越大,亮点越小
- m s p e c u l a r m_{specular} mspecular 为材质的高光反射颜色,控制强度和颜色
- c l i g h t c_{light} clight 是光源的强度和颜色
Blinn-Phong模型
- 引入半程向量 h,为视角方向和光线方向的平均值
- 比较 h 与 n 的夹角,而不是 r 和 v 的,方便计算
- c s p e c u l a r c_{specular} cspecular