Unity中的光照:
光源
光是由光源发射出来的,实时渲染中,通常把光源当成一个没有体积的点,用L来表示它的方向.
在光学里,用辐照度来量化光.
对于平行光来说,它的辐照度可通过计算在垂直于L的单位面积上单位时间内穿过的能量来得到.
在计算光照模型时,我们需要知道一个物体表面的辐照度,而物体表面往往是和L不垂直的,可以使用光源方向L和表面法线n之间的夹角的余弦值来得到.
因为辐照度是和照射表面时光线之间的距离d/cosθ成反比的,因此辐照度就和cosθ成正比.
cosθ可以使用光源方向L和表面法线n的点积来得到,这就是使用点积来计算辐照度的由来.
吸收和散射
光线由光源发射出来后,就会与物体相交.通常相交结果有两个:散射和吸收.
散射只改变光线的方向,不改变光线的密度和颜色.
吸收只改变光线的密度和颜色,不改变方向.
光线在物体表面经过散射后,有两种方向:
折射(透射),散射到物体内部
反射,散射到物体外部
对于不透明物体,折射进入物体内部的光线还会继续与内部的颗粒进行相交,其中一些光线最后会重新发射出物体表面,而另一些则被物体吸收.那些从物体表面重新发射出的光线将具有和入射光线不同的方向分布和颜色.
为了区分这两种不同的散射方向,我们在光照模型中使用了不同的部分来计算它们:
高光反射:表示物体表面是如何反射光线的.
漫反射:表示有多少光线会被折射、吸收和散射出表面.
根据入射光线的数量和方向,我们可以计算出射光线的数量和方向,通常使用出射度来描述它.
辐照度和出射度之间是满足线性关系的,而它们之间的比值就是材质的漫反射和高光反射属性.
着色
着色指的是,根据材质属性、光源信息,使用一个等式去计算沿某个观察方向的出射度的过程.我们把这个等式称为光照模型.
漫反射
漫反射光照符合兰伯特定律:反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比.
漫反射计算公式:
n:表面法线
I:是指光源的单位矢量
mdiffuse:材质的漫反射颜色
clight:光源颜色
需要防止法线和光源方向点乘的结果为负值,防止物体被从后面来的光源照亮.
CG提供了一个函数,防止取负值
saturate(x) 把x截取在[0,1]范围内,如果x是一个矢量,那么会对它的每一个分量进行这样的操作.
辐照度计算: 光线方向与法线方向的点乘
如果L的向量与N一样(N Dot L=1),那么表示模型的这个点正对着光源,应该最亮,相反,如果两个向量呈相反方向(N Dot L=-1),那么则表示这个点背对光源,应该最暗。
标签:辐照度,光线,光源,物体,笔记,学习,表面,unityshader,方向 From: https://www.cnblogs.com/xianguoguo/p/16772937.html