Unity 基础光照
一、基础概念
-
高光反射:表示物体表面是如何反射光线的;
-
漫反射:表示光线会被折射、吸收和散射出表面;
-
着色:根据材质属性,光源信息,使用一个等式去计算沿某个观察方向的出射度过程。这个等式也称为光照模型;
-
BRDF(Bidirectional Reflectance Distribution Function):双向反射分布函数,是一类定义光线在不透明表面反射的四元函数。给定一个光线入射方向,得到出射光线分布。
-
标准光照模型:只关心直接光照。将进入到摄像机内的光线分成4个部分,每个部分使用一种方法来计算贡献度。分别是:
-
自发光(emissive):物体自己作为光源,发出的光线直接进入摄像机;它直接使用材质的自发光颜色;
-
漫反射(diffuse):
c d i f f u s e = ( c l i g h t ∗ m d i f u u s e ) m a x ( 0 , n ^ ⋅ l ^ ) c_{diffuse} = (c_{light} * m_{difuuse})max(0,\hat{n}\cdot \hat{l} ) cdiffuse=(clight∗mdifuuse)max(0,n^⋅l^)
-
-
高光反射(specular):符合兰伯特定律,反射光线的强度与表面法线和光源方向之间家教的余弦值成正比 。
r ^ = 2 ( n ^ ⋅ l ^ ) n ^ − l ^ \hat{r} = 2(\hat{n}\cdot\hat{l})\hat{n}-\hat{l} r^=2(n^⋅l^)n^−l^
c s p e c u l a r = ( c l i g h t ⋅ m s p e c u l a r ) m a x ( 0 , v ^ ⋅ r ^ ) m g l o s s c_{specular} = (c_{light}\cdot m_{specular})max(0,\hat{v}\cdot \hat{r} )^{m_{gloss}} cspecular=(clight⋅mspecular)max(0,v^⋅r^)mgloss
h ^ = v ^ + l ^ ∣ v ^ + l ^ ∣ , 将 h ^ 替 换 到 上 式 的 r ^ \hat{h} = \frac{\hat{v} +\hat{l}}{\left | \hat{v} +\hat{l} \right |} ,将\hat{h}替换到上式的 \hat{r} h^=∣∣∣v^+l^∣∣∣v^+l^,将h^替换到上式的r^
- 环境光(ambient):近似模拟间接光照,通常是一个全局变量,场景中所有物体都是用同一个环境光。
- 颜色的乘法,无论是标量与颜色的乘法还是两个颜色的乘法,都称为颜色调制。渲染三角形中一个像素的颜色通常由多种不同来源的颜色混合而成,三角形面中的像素的颜色通常为从纹理映射图查得的颜色与从三角形顶点插值而来的颜色相乘的乘积。
二、逐顶点漫反射
- 计算都在顶点着色器中实现,对于细分程度较低的模型,逐顶点光照就会出现一些视觉问题。
三、逐像素漫反射
- 模型的背光区域没有明暗变化,看起来想是平面一样。
四、半兰伯特模型
- 广义的半兰伯特光照模型,绝大多数情况下alpha 和 beta取值为0.5。这样就将 n*l 的点积从[-1, 1]映射到 [0 , 1]范围。所以在背光处,原兰伯特模型中点击结果是0。在半兰伯特模型中,背光面有不同的值,所以也有明暗变化。
c d i f f u s e = ( c l i g h t ∗ m d i f u u s e ) ( α ( n ^ ⋅ l ^ ) + β ) c_{diffuse} = (c_{light} * m_{difuuse})(\alpha (\hat{n}\cdot \hat{l}) + \beta ) cdiffuse=(clight∗mdifuuse)(α(n^⋅l^)+β)