最近重读Realtime Rendering 一书,对书中光照模型等内容有些感受;准备写些笔记记录一下自己的认识。本篇先主要讲讲辐射学(Radiometry)和简单光照模型;后面会讲讲BRDF及其实现吧。
光
光的本质其实很复杂,物理学至今仍没完全搞清楚;它是一种电磁辐射但却有波粒二相性。幸好我们研究的是图形学不是量子物理。图形学的光只是个近似;我们只要想象它会向空间发射带有能量的光子(particles),然后这些光子会和物体表面发生作用(反射,折射和吸收)。最后的结果是我们看到了物体的颜色和各种纹理。
然后因为能量守恒,所以入射光等于被反射的光加吸收的光再加折射的光。
light incident at surface = light reflected + light absorbed + light transmitted
辐射学(Radiometry)
为了计算物体表面的颜色值(Shading),我们首先必须考虑光在空间中的分布以及能量是如何从光源传播到物体表面的。这是辐射学的范畴。考虑如下图所示的空间中的点光源:
在同一方向上,近处的较小的表面和远处较大的接收到的光子能量应该相同。这说明方向角很重要;以该点为顶点的圆锥内,所有表面接收到的光子能量是一样的。
所以这里要引出固体角的概念。
固体角(Solid Angle)
先看平面上角度的定义,然后再引申到空间。
如上图所示:平面上角度是所围成的扇形的弧长除以半径;
dφ = (dl*cosθ) / r
单位是弧度,整个圆周就是2π。
而引申到空间,就是围成的圆锥在球体表面的投影除以半径的平方。
dω = (dA*cosθ) / (r*r)
由半球面面积公式容易知道这个比值是常量,与球的半径无关的。这就是我们要的方向角,整个球面就是4π。