物体的颜色是由物体反射出来的光决定的,也就是物体不吸收的部分颜色,才是物体的颜色,或者说被认为是物体的颜色。
在图形学中,物体颜色的定义:物体从一个光源反射各个颜色分量的大小。这个反射分量代表了物体的颜色,表示在白光下物体看起来的颜色;在其它颜色的光源下,则表现不同。
所谓的亮和暗,都是通过物体显示的颜色变化来表现的,所谓的光,不过是一个显示颜色的数值比例,根本没有光。
不同的物体在不同的光下有不同的颜色表现。这意味着:
现实世界的光照极其复杂,计算机图形学只能使用一些简化的模型来近似模拟,其中冯氏光照模型最为常用。
冯氏光照模型包含三个分量:
环境光照 (Ambient Light)
漫反射光照 (Diffuse Lighting)
镜面光照 (Specular Lighting)
在世界空间中计算光照的原因:
更常见的做法是在观察空间中计算光照,但在哪个空间中计算都不会影响最终结果。
真正去实现模拟环境光源开销巨大且价值不大,因此我们采用简化方式:

需要的条件:光线的方向、表面法向量
漫反射一般为固定方向的光线对物体的影响,所以光线与面的相交角度对亮度影响很大,可以通过法向量计算:

镜面光照计算需要一个额外的观察向量,不同角度观察时镜面反射的光照强度不同。原理是计算反射角与观察向量的夹角来分配不同的光照强度。
反光度(Shininess):
在光照着色器的早期,开发者曾在顶点着色器中实现冯氏光照模型:
一般情况下,顶点着色器中的计算次数比片段着色器中少得多,因为片段着色器处理所有像素,而顶点着色器只处理顶点。
法线向量是垂直于片元表面的向量,对于光照计算至关重要。
为了消除不等比缩放等操作对法线的影响(导致法线向量不再垂直于片元表面),需要使用特殊的法线矩阵。
法线矩阵作用于法线向量,确保其在变换后仍然垂直于表面。

定向光模拟远距离光源(如太阳),具有以下特点:
点光源是一个具体位置的光源,向四周发射光线:

聚光灯是一种特殊的点光源,只在特定角度范围内发射光线:
光照衰减(Attenuation)是指光线强度随传播距离增加而减弱的现象:
为了避免聚光灯边缘过于生硬,通常采用双圆锥过渡技术:
内圆锥
过渡区域
外圆锥外