2.1 光的传播与辐射度量:先立单位再谈渲染


2.1 光的传播与辐射度量:先立单位再谈渲染

上一章我们反复说"光线追踪把颜色算对",而"对"字从本节起有了严格含义。作为物理区第一张实验台,本节先交代渲染器对光做了哪几层近似、停在哪个尺度,然后把四个辐射度量逐个校准——它们是后面渲染方程的词汇表。学完本节,你会明白一个反直觉的事实:渲染器追踪的从来不是"光子",甚至不是"光线",而是一个叫辐射亮度的守恒标量。

从麦克斯韦到一条直线:我们停在哪一层

光的本相是电磁波,严格描述要走麦克斯韦方程组,涉及波长、相位、偏振、干涉、衍射。渲染器几乎全部放弃了这套完备描述,退到几何光学近似:波长趋近于零,光沿直线传播,遇到表面按反射定律折返或按斯涅尔定律折射,只携带能量与方向,不携带相位。这个近似在"场景特征尺寸远大于波长"时成立——房间里最小的一粒灰尘也比你头发粗几千倍,而可见光波长只有半微米左右。

退到这一层是有实际后果的。肥皂泡的彩虹薄膜色、光盘纹路的衍射光栅、镜头边缘的眩光花纹,都依赖波长级干涉,几何光学里不会出现——你在渲染图里看到的此类效果,全部是后期手工叠加的特技模型。另一层近似是统计性:渲染器不跟踪单个光子,而是把光当作连续的能量流处理,用概率密度描述它的方向分布。把这些边界先画清楚,后面遇到"为什么渲染器算不出某个现象"时就不会误判为程序错误。

四个度量各管一本账

辐射度量学的四个核心量,本质是对"能量流"做四次不同切法的账本。建议记住每个量回答的提问,单位自然就记住了。

**辐射通量(flux)**回答"这个光源每秒总共吐出多少焦耳",单位瓦特。它描述一个光源的整体实力,但不含方向信息——买灯泡看的是它,渲染局部颜色却用不上它。

**辐照度(irradiance)**回答"这块表面每平方米每秒收到多少能量",单位瓦每平方米。它把通量摊到面积上,是描述"表面被照得有多狠"的量。阳光垂直照与斜照的差别就发生在这一层:同样一束光,斜着照在更大的面积上,单位面积分到的能量被摊薄。

辐射出射度(radiant exitance)与辐照度互为镜像:表面每平方米每秒发出多少能量。只对发光体或反光面有意义,渲染里出场不多,认识即可。

**辐射亮度(radiance)**是全场的核心:单位投影面积、单位立体角内传输的功率,单位瓦每平方米每球面度。它的提问最刁钻也最有用——"沿这个方向、从这个微面看过去的颜色是什么"。渲染器最终写进像素的就是它,材质函数的输入输出是它,环境贴图存的还是它。

图:辐射度量四件套的切账关系

图:辐射度量四件套的切账关系

余弦定律:斜照为什么弱

把一支手电斜着照向桌面,光斑会拉长、变暗。辐射度量学把这个观察写成定律:表面收到的辐照度,等于入射亮度乘以入射方向与法线夹角的余弦。余弦因子的物理来源是投影——同样一束截面,斜射时摊在更长的表面条带上。这个不起眼的余弦因子,稍后会在渲染方程里以显式身份出现,成为半球积分的权重;而在 Whitted 伪码里那行"dot(normal, light.dir)",正是它的代码化身。

立体角是另一个必须驯服的概念:它是"方向的范围",单位球面度,整个半球是 2 倍圆周率球面度。渲染方程的积分对半球上所有方向求和,写的就是对立体角的积分。可以把立体角理解成"从这一点看出去,视野张多大"——面积光源张的立体角大,点光源趋于零,这个差别稍后会解释软阴影的来源。

实验台:用三个现象核对度量表

拿三个日常现象当校准样本。样本一,正午与黄昏的太阳:通量几乎没变,但黄昏入射角接近水平,余弦因子趋近零,辐照度暴跌——账本上变的是辐照度那一行。样本二,远处的灯与近处的灯:灯的亮度(沿方向看过去的刺眼程度)不变,变的是它对眼睛张开的立体角,立体角缩小让进入瞳孔的功率减少——账本上变的是立体角积分项。样本三,白纸与镜面:两者反射的能量可以一样多,但白纸把亮度均匀撒向半球(方向分布平坦),镜面把亮度集中塞进一个窄立体角(方向分布尖锐)——能量守恒相同,方向分布不同,这正是第 5 章 BSDF 要精确刻画的对象。

三个样本核对完毕,度量表就算校准了。变式练习:想想"为什么雾天远处路灯会晕开一片"发生在哪一层——答案是体积散射让亮度在传播路径上被移出与移入,超出本节表面模型,第 5、6 章会回来补这一笔。

数量级练习与三个高频混淆

度量学学得好不好,拿数量级练一遍就见分晓。练习一:一支额定一百瓦的白炽灯,大约九成能量变成了热,按通量口径它发可见光的本钱只剩十瓦上下,而同等照明效果的一颗 LED 只要几瓦——所谓省电,省的是通量成本,不是亮度感觉。练习二:太阳在地球大气层顶对垂直表面的辐照度约为一平方米一千三百瓦量级,记住这个数,调材质参数时就有了"正午全日照"的标尺:任何自发光材质的出射度若逼近这个量级,画面必然过曝,无须怀疑渲染器。练习三:一支激光笔沿走廊照过去,光斑的亮度几乎不随距离衰减——这是亮度沿传播不变的直接验证;可它照在墙上,墙上那一点对走廊另一头来说并不更亮,因为光斑对远处张开的立体角在缩小。三道练习各对着一本账:通量、辐照度、亮度,练完表才算内化。

工程里最常撞见的三个混淆值得钉死。混淆一,把辐照度当亮度用:调环境光强度时凭感觉乘系数,结果亮面对、暗面过曝——环境光参数走的是辐照度口径,要过余弦加权与材质分布才成为亮度。混淆二,把亮度直接当出射度记账:出射度等于亮度乘以半球上的余弦加权积分,少算这一道,能量凭空差出一个常数倍,画面整体偏亮或偏暗却查不出错处。混淆三,把八位纹理里的存储值当线性物理量:存储时做过编码,入账前必须先解码回线性域——这一笔留到第 5 章纹理一节细算,先立下"物理账本只认线性量"的纪律。

一张自查表把易混点收拢:

混淆 典型症状 纠正口诀
亮度与辐照度混用 环境光暗面过曝、亮面正常 亮度沿方向算,辐照度对半球收
平方反比加错对象 给亮度乘了距离衰减 距离衰减只作用于辐照度与通量
编码值当线性量 插值后中间调发灰发脏 入账先解码,物理账本只认线性
平面角与立体角混写 面光源强度对不上手算 方向的范围用球面度,别拿角度凑

口诀不必背。要养成的是每次调参时的一问:这个数写进参数框,物理口径是哪本账?口径对了,第 6 章调渲染器时你几乎不会遇到"整体亮一圈却查无实据"的灵异事件;口径错了,任何降噪与后处理都救不回来。

最后留一个结构校准:四本账按"谁包含谁"排序——通量是总额,辐照度与出射度是通量对面积的两个侧面,亮度是辐照度对立体角的再细分;四者靠面积与立体角两把尺子互相换算,枢纽是"面积乘余弦"的投影。展开成公式有一页,记住结构只要一句:账本只有两把尺子,面积与方向。结构校准完,再校准一个量级手感:日光直射下亮度可达上万量级,常见表面辐照度在几十到几百之间,出射度按反照率打折——遇到量级离谱的中间结果,先怀疑单位与编码,再怀疑算法。量级检查是渲染调试里最便宜的试纸,一秒钟能排除一半嫌疑。

本节要点回顾

  • 几何光学近似是渲染器的入场券:波长级干涉衍射现象不在此框架内,渲染图中出现属于特技模型。
  • 四本账四种切法:通量问总量,辐照度问表面接收,出射度问表面发出,亮度问沿方向观察。
  • 辐射亮度沿真空传播不变,是唯一适合沿射线递归携带的量——这是渲染方程选择它的根本原因。
  • 余弦定律让斜照变弱,本质是投影摊薄;它日后成为渲染方程的积分权重。
  • 面积光源张的立体角决定阴影软硬,点光源立体角趋零对应硬阴影。

词汇表就位。下一节把四本账拼成一条等式——渲染方程逐项拆解,全实验室最重要的一台仪器。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U