渲染:如何决定一个像素的颜色? 决定一个像素的可见性;决定这个像素上的光照计算。而光照模型就是用于决定一个像素上进行怎样的光照计算。
模拟光照,考虑的三种物理现象:
1.光线从光源中被发射出来。
2.光线和物体相交:一些光被吸收,一些光被散射到其他方向。
3.摄像机吸收一些光,形成图像。
光照:使用辐射度(irradiance)来量化光。散射只会改变光的方向,不会改变光的密度和颜色。吸收光会改变光的密度和颜色,但不会影响光的方向。散射又分为折射(refraction)和反射(reflection)
镜面反射表示在表面反射的光,而漫反射则经历了透射、吸收、散射的光。
镜面反射光的分布由表面的粗糙度(roughness)决定,反之也有光滑度(smoothness),对于光滑的表面更加紧密,对于粗糙的表面更加分散。
计算时使用两种方式计算:高光反射(specular)部分表示物体表面是如何反射光线的;漫反射(diffuse)部分表示有多少光线会被折射、吸收、散射出表面。根据入射光线的数量和方向,可以计算出射出光线的数量和方向,使用出射度来描述。辐射度和出射度之间满足线性关系,之间的比值就是材质的漫反射和高光反射属性。
着色:是指根据材质属性、光源信息(光源方向、辐照度),使用一个等式去计算沿某个方向的出射度的过程。这个等式叫做光照模型(Lighting Model)。不同光照模型有不同的目的。
BRDF(Bidirectional Reflectance Distribution Function):已知光源位置、方向、视角方向时。需要知道一个表面和光照如何进行交互,多少光被反射、漫反射?方向如何?。当给定模型表面上的一点时,BRDF包含了对该点外观的完整描述,使用一个数学公式来描述,并且提供一些参数来调整材质属性,通俗来说,当给定入射光线的方向和辐射度后,能计算出某个方向上的光照能量分布。
标准光照模型:只关心直接光照,从光源出发出来射到物体表面后,经过表面一次反射直接进入摄像机的光线。
进入摄像机的光线分为四部分:
- 自发光(emissive),描述给定方向时,一个表面本身会向该方向发射多少辐射量。若没使用全局光照,自发光不会照亮周围物体,只是自身看起来很亮。
- 高光反射(specular):描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量。
- 漫反射(diffuse):当光线从光源照射到模型表面时。该表面会向每个方向散射多少辐射量。
- 环境光(ambient):描述其他所有间接光照。
环境光
间接光照是指光线经多个物体反射后进入摄像机。在标准光照模型中使用环境光的部分近似模拟间接光照。
自发光
光线直接从光源出发进入摄像机,不需要经过任何物体的反射。如未开启全局光照,不会当成一个光源照亮周围物体。
漫反射
用于对那些物体表面随机散射到各个方向的辐射度进行建模。漫反射中,视角的位置不重要,反射是完全随机的,而入射角度很重要。
高光反射
沿着完全镜面反射方向被反射的光线,可以让物体看起来有光泽。列如金属材质。需要知道表面法线、视角方向、光源方向、反射方向等。
光泽度(gloss)或反光度(shininess)。用于控制高光区域的“亮点”有多宽。gloss越大,亮点越小。
如果摄像机和光源距离模型足够远,Blinn模型比Phong模型更快。
在那里计算光照模型:
在片元着色器中计算,逐像素光照(per-pixel lighting); 在顶点着色器中计算,逐顶点光照(per-vertex lighting)。
逐像素光照:一每个像素为基础,得到它的法线,在进行光照模型计算。在面片之间对顶点法线进行插值的技术称为Phong着色。
逐顶点光照:在每个顶点上计算光照,在渲染图元内部进行线性插值,最后输出像素颜色,顶点数目远远小于像素数目,因此计算量会小很多。但是依赖于线性插值得到像素光照,当光照模型中有非线性的计算时,逐顶点计算就会有问题。而且由于逐顶点光照会在渲染图元内部对顶点颜色进行插值,这会导致渲染图元内部的颜色总是暗于顶点高的最高颜色值。
漫反射公式:----经历透射、吸收、散射的光
改善技术半兰伯特光照模型(Half Lambert)
高光反射公式:描述表面反射的光