图形学思考 - 漫射光 diffuse light

我们玩游戏的时候见到各种炫目的效果基本上都离不开光照渲染的功劳。

顺便说下,目前我见过最好的光影效果的游戏大概应该是细胞分裂-复仇,那种真实感,质感真是让人震惊。

光照模型主要由三种:

1 Diffuse Light 漫射光

2 Ambient Light 环境光

3 Specular Light 高亮光

这里主要说说漫射光

实际看看周围的桌面,墙面,太阳照射到上面的时候,我们就能看到光,大多数情况下,我们看到的多数光源是漫射光传播到我们的眼睛。

大概如下图:

图形学思考 - 漫射光 diffuse light_第1张图片

简单介绍一下如何计算漫射光的:

我们计算漫射光的时候,根据光源的色素,设为L = (0.8, 0.8, 0.8),然后根据物体的材料特征,反射的颜色为M = (0.5, 0.5, 1.0),然后利用 Lambert‘s Consine Law计算反射光的强度f(a) = max(cosa, 0) = max(L*n, 0), 其中n代表表面的法线单位向量。最终得到公式计算最终颜色C = max(L*n, 0)*L*M;

这里主要不是探讨这个公式,而是引出一个思考:我们平时看到的桌面或者墙壁都是平滑的,那么也就是说n法线都应该是垂直向上才对,也就是说光的反射不一定能传播进我们的眼睛了?那为什么我们从不同角度看这个桌面,它的漫射光都是一样的呢?

解决这个问题的关键就是:The surface is rough at a microscopic level. 在微观条件下表面都是粗糙的。

就是如果我们使用显微镜观察一个很平滑的桌面,也会发现是凹凸不平的。凹凸不平到什么程度呢?从所有不同方向和角度都能观察到其粗糙程度是一样的。这么思考之后,就可以想通了,微观法线并不是垂直向上的,而是在不同角度,方向观察的时候都是和眼睛成一定角度的,也可以认为微观法线是固定不变的。

很多书上都有说到这个观点,不过一般都是一句话带过,没有展开详细的解说。


进一步思考:

而上面这个计算公式中的n并不能代表真实的表面微观法线,而是一个good enough的代表法线,就是说使用这个n法线来模拟漫射关照效果,已经是足够好的了。大自然的漫射效果不是那么简单的,并不是一束简单的光线反射出来,而是无数无法计算的的微观光线反射出来,最后才形成了我们在不同角度,不同方向看到“一束”太阳光照在一个桌面上的效果是一样的,目前我们还没办法严格地模拟这样的效果,毕竟那是上帝写的程序。


那么我们就可以得出最终结果: 漫射光的强度只和光线射入角度和微观法线有关,和人的观察角度无关,而前两者又是固定的,那么从不同角度和不同方向观察到的漫射光效果是一样的。



你可能感兴趣的:(思考,light,图形学,diffuse,漫射光)