物体的颜色
在现实生活中看到某一物体的颜色并不是这个物体的真实颜色,而是它所反射(Reflected)的颜色。那些不能被物体吸收(Absorb)的颜色(被反射的颜色)就是我们能够感知到的物体的颜色。
物体的颜色可以定义为:物体从一个光源反射的各个颜色的分量值。
颜色反射运算:观察到的颜色 = 光源颜色 x 物体原色
光照基础
现实世界的光照复杂难以完全模拟,但可以用简化的模型来模拟光的物理特性,得到的效果是可以接受的。
冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。
冯氏光照模型环境光照(Ambient Lighting):即使在黑暗的情况下,世界上也仍然有一些光亮(月亮、一个来自远处的光),所以物体永远不会是完全黑暗的。我们使用环境光照来模拟这种情况,也就是无论如何永远都给物体一些颜色。
漫反射光照(Diffuse Lighting):模拟一个发光物对物体的方向性影响(Directional Impact)。它是冯氏光照模型最显著的组成部分。面向光源的一面比其他面会更亮。
镜面光照(Specular Lighting):模拟有光泽物体上面出现的亮点。镜面光照的颜色,相比于物体的颜色更倾向于光的颜色。
全局照明算法:Global illumination,同时考虑到物体的光照来自于直射光和反射光。
计算各种光照的影响
环境光照:物体颜色 = 环境因子 x 光源颜色 x 物体原色
漫反射光照:物体颜色 = (物体表面法向量 x 光源到物体表面点的单位向量) x 光源颜色 x 物体原色
漫反射注意,物体表面的法向量是在局部坐标空间的,当它转到世界坐标空间时可能存在由于平移旋转缩放造成的法向量不再垂直于物体表面,故使用一个正规矩阵(Normal Matrix)作为法向量的模型矩阵。
变换导致法线不垂直于表面正规矩阵:模型举证左上角(3x3)的逆矩阵的转置矩阵。
Normal = mat3( transpose( inverse( model ) ) ) * normal;
镜面光照:物体颜色 = 镜面强度因子x pow(光的反射向量 x 摄像机到物体表面向量,高光的发光值) x 光源颜色 x 物体原色
镜面强度:Specular Intensity
高光的发光值:shininess,一个物体的发光值越高,反射光的能力越强,散射得越少,高光点越小
高光的发光值
在顶点着色器中实现的冯氏光照模型叫做Gouraud着色,而不是冯氏着色。记住由于插值,这种光照连起来有点逊色。冯氏着色能产生更平滑的光照效果。
冯氏光照的不同实现图片和一些文字来源于https://learnopengl-cn.github.io,本人收集作为笔记,如有侵权,望告知
网友评论