新年第一篇🧨
今儿是大年初七,在山东老家有“送火神”一习俗,家里的孩子要点火把跑得离家远远的,直到火把熄灭,同时还要给“灶王爷”进贡麻糖(这可是我小时最爱的零食)。
寓意给祛除火灾,平安无事,给灶王爷吃点好的回去多美言几句保佑在新的一年顺顺利利。在此也祝愿各位在新的一年日子红红火火,家人朋友平平安安!
同时正月初七还是个重要日子 —— 开班啦!但我得到正月十一才上班👀
言归正传,在很久很久以前(大概是盘古开天辟地之时🌚),本“🐦王”发表了 《WebGL 光照》 一文,文中分别介绍了 平行光/环境光/点光源/漫反射/环境反射 等基础概念,并使用 WebGL 着手实现了上述光照和反射的例子。而本文则会从另一个角度来介绍一下光学基础,同时还会引出一些新的概念🥸
温故知新😒
光照其实是物理和数学的交叉学科,其蕴含了复杂的物理数学知识。有句话说得好:“时间会解释一切,数学除外 ...” 为了避免各位读者老爷再翻之前的文章查阅基础定义,下面会快速的再复(凑)习(点)一(篇)遍(幅)!
在图形学中,通常讲反射光表示为两个分量之和:一个分量是 在方向上独立的均匀分量,也就是我们所说的 漫反射;另一个分量是 方向依赖分量,即 镜面反射。所以到达相机的反射光数量是漫反射光和镜面反射光之和:
漫反射
漫反射 是个”多情“的东西(至于反射到底是不是东西咱另当别论),具体表现为”谁来都要,雨露均沾“,即从各个方向看漫反射表面亮度都相同。纯粹的漫反射材料是有 Lambertian 反射 特性的材料,以这种方式反射的光线数量仅取决于入射光方向。
朗伯反射率是定义理想的“无光泽”或漫反射表面的特性。无论观察者的视角如何,朗伯表面对观察者的表观亮度都是相同的。从技术上讲,表面的亮度是各向同性的,并且发光强度符合朗伯余弦定律。
<维基百科 - Lambertian reflectance>
当入射光方向垂直于表面,漫反射表面反射的光线最多,并随着入射光到表面法向量的倾斜而减少。这个变化建模为表面法向量和入射方向之间夹角的余弦。所以,这种表面上反射光的数量 由下公式得出:
是入射光数量, 是入射光向量的倾斜角度(即表面方向的法向量 与入射光方向 之间的夹角); 是一个常数项,表示表面漫反射率。我们小学二年级就学过:“两个单位向量的点积就是两个向量之间的余弦值”,那么我们可以使用下面公式来代替 :
那么我们的公式 就可以写为:
镜面反射
理想镜面反射 是一个“有仇必报”的东西,具体表现为“以牙还牙,以眼还眼”,即入射角和反射角相同。我们用 来表示反射方向,那么根据小学三年级学过的几何学可以得出:
初中时的一个物理课小实验就能体现镜面反射的特征:使用激光灯照射平滑的镜面,随着激光灯角度(即入射角度)的变化,反射角也跟随变化。
我清楚地记着,这个实验后又紧接着做了一个实验:使用激光灯照射浑浊的液体,射入液体的光线在液体表面处角度发现了偏移,这个现象我们称之为折射。
折射
折射这个东西吧,就像 Eason 的歌词:“把一个人的温暖,转移到另一的胸膛”。对于折射光的数量,完全取决于所照射表面的材料属性,光线方向的变化取决于光线在哪两种材料(或称介质)中传播以及所照射表面的材料。Snell 定律就对这种光学现象进行了建模,同时指出:
和 分别是材料 和材料 的折射率(折射率是光在介质内传播速度的数字特征)。
Snell 定律详情请见<维基百科 - 斯涅尔定律>
看似高深,实则很简单🤥
基础知识回顾完了,下面来瞅瞅三个新朋友,分别是:辐照度、辐射亮度和强度。在认识这三个新朋友之前还需了解一个小概念,叫做 辐射通量。
辐射通量
首先要知道 光 是辐射能量流,所以光线的基本可测量是辐射通量(通常用 表示),这是穿过某个区域或体积的光线的总量。辐射通量越多可以理解为光线更多更亮。
如果光线能够均匀地流出表面,那么就意味着该物体各个区域的亮度看起来相同。但在大多数情况下,光线的流出并不是均匀的,也就是说大部分情况下,不同区域的亮度可能看起来不同。一切不都是顺心如意的,或许生活也是这样吧...
光线流出不均匀的情况下,我们就需要更有选择性地指定光线的空间和方向分布。故需指定确切的区域或方向,或最好定义密度来指定单位区域(或单位方向)的辐射通量。所以就需要上面的三个新朋友。
辐射度
为了区分到达表面的光线和离开表面的光线,用两个不同的属于指定 区域密度:辐照度和出射度(通常用 表示)。辐照度表示入射到表面的每单位面积的通量数量,出射度表示离开每单位面积的通量。它们表示为比率 。因此,辐照度和出射度通过下式关联到通量:
是到达或离开一个足够小(微分)区域 的通量数量。如果光线来自非均匀通量分布的表面,光线主要由函数 表示,其中 表示表面上的点。对于均匀通量的表面,辐照度简单地表示为总通量与表面积的比率:
辐照度的单位为瓦特每平方米()。
强度
强度()是 方向密度,它表示一个方向的周围的某个点发出的每单位立体角的通量。立体角()表示从点 出发的锥形方向,立体角的单位是球面度()。如果锥形在半径 的球上截取的面积为 ,那么立体角测出 球面度。与通量相关的强度为:
强度单位是瓦特每球面度()。根据球面度的定义,可以说,方向在某个点周围的球体对应 球面度的立体角。因此,点光源发射的辐射通量 瓦特会均匀地围绕在点周围所有方向,点光源强度为 ,这是因为半径为 的球表面积为 。光源强度可以取决方向 ,这种情况下它将被表示成函数 。
球面度定义请见 <维基百科 - 球面度>
辐射亮度
离开一个表面的通量可在整个表面和沿方向变化。所以最后才来介绍辐射亮度(),它表示来自每个单位投影区域的表面和沿着辐射流方向上所需要投影的区域,所以它是一个双密度术语,即 区域密度和方向密度。
投影区域表示沿着辐射流方向上需要投影的区域。根据表面的朝向,相同的投影区域可指不同大小区域的实际表面区域。因此,与出射度保持相同,沿一个方向离开的辐射通量将会因流方向的不同而不同。根据这些关系可得到:
是表面法向量与光线流的夹角,辐射亮度的单位是瓦特每平方米每球面度()。半球的入射辐射亮度的积分对应于辐照度应为:
表示半球。
新年新气象🌕
正月初六开车回成都时,路上实在是堵啊!但路堵,心不堵~一大早出门发现太阳才刚露头:
秦川朝望迥,日出正东峰。 愿诸位也如东升的旭日,蒸蒸日上,充满朝气!
欢迎各位关注公众号:Refactor,重构只为做更好的自己!