Physically Based Rendering

断了今生、忘了曾经 提交于 2021-01-25 03:48:50

对物体表面一点进行着色处理时,需要得到能够描述物体对光作用的BSDF,以及该点的辐照度。可以通过计算所有射向该点的光的功率的总和来计算某一点的辐照度。对于计算机模拟,辐照度的计算需要通过数值方法进行近似,非实时渲染可以通过结合蒙特卡洛方法(Monte Carlo method)和光线追踪(Ray tracing)算法来进行计算。

 

对于光源的模拟,达成物理可信的充要条件是光源的辐射能量以符合现实世界中各类光源辐射特征的方式变化,因此需要使用物理单位表示与计算光照。

光照相关单位可以以辐射度量法(Radiometric)表示,也可以仅在可见光范围内根据人眼对不同波长光的敏感程度进行加权后表示,也就是光度度量法(Photometric )。两种方法都可以表示相关的几种物理量,对应关系见下(下标${e}$表示辐射度量相关,下标${v}$表示光度量相关):

能量:辐射能${Q_e}$,单位为${J}$焦耳;光(视效)能${Q_v}$,单位为${lm·s}$流明·秒;

功率:辐射通量或辐射功率${\Phi_e}$,单位为${\frac{J}{s}}$焦耳/秒或${W}$瓦特;光通量或光度功率${\Phi_v}$,单位为${lm}$流明;

每单位球面度功率:辐射强度${I_e}$,单位为${\frac{W}{sr}}$瓦特/球面度;光度${I_v}$,单位为${\frac{lm}{sr}}$流明/球面度,或称为${cd}$坎德拉;

每单位面积功率:輻射出射度${M_e}$或辐照度${E_e}$,单位为${\frac{W}{m^2}}$瓦特/平方米;光出射度${M_v}$或照度${E_v}$,单位为${\frac{lm}{m^2}}$流明/平方米,或称为${lx}$勒克斯;

每单位面积每单位球面度功率:輻射率${L_e}$,单位为${\frac{W}{m^2·sr}}$瓦特/平方米·球面度;辉度${L_v}$,单位为${\frac{lm}{m^2·sr}}$流明/平方米·球面度 = ${\frac{cd}{m^2}}$坎德拉/平方米,或称为${nt}$尼特;

 

辐射度量法可以通过一个加权变换转换到光度度量法,由于人眼视网膜细胞对于强度不同频率不同的光照有非线性的响应,因此对于辐射度量法到光度度量法的转换需要分别在光照功率较大和较小两种情况下讨论,也就是所谓明视觉(Photopic vision)与暗视觉(Scotopic vision)。明视觉一般指辉度在${10 nt}$到${10^8 nt}$数量级之间时的视觉响应,暗视觉则是${10^{-3} nt}$到${10^{-6} nt}$数量级之间,此时需要厘清光度测量法诸单位的定义。国际单位制中定义${cd}$坎德拉为“給定一個频率为540.0154×1012 Hz的单色辐射光源與一個方向,且該輻射源在该方向的輻射強度为1/683瓦特每球面度,則該輻射源在該方向的发光强度為1坎德拉“,明视觉条件下,人眼对波长约为555nm的黄绿色光最为敏感,因此选择了此波长对应频率作为参考频率,由于一些历史原因,为了和旧光度单位定义兼容,辐射强度参考值选择了${\frac{1}{683}}{\frac{W}{sr}}$。

辐射度量法到光度度量法的转换基于坎德拉的定义实现,即对于波长$\lambda$,${I_v(\lambda)}=683.002\overline{y}(\lambda)I_e(\lambda)$,或表述为${I_v}=683.002\int_{380}^{780}\overline{y}(\lambda)I_e(\lambda)d\lambda$,其中$\overline{y}(\lambda)$即是光度函数。对于明视觉和暗视觉该公式有不同的变化,对于明视觉,当光波长在约555nm时该函数值为1;对于暗视觉,当光波长在约510nm时该函数值约为1,该函数形状接近正态分布函数,标准取值由国际照明委员会(Commission internationale de l'éclairage, abbr. CIE)定义。就性质而言光度函数是不同频率光辐射强度被人眼感知的程度的比例。在此基础上可以推导出发光效能(luminous efficacy)和发光效率(luminous effciency)两物理量,将发光效能$\eta$定义为光通量和辐射通量的比值,即${\eta}=683.002\frac{\int_{380}^{780}\overline{y}(\lambda)I_e(\lambda)d\lambda}{\int_{380}^{780}I_e(\lambda)d\lambda}$,单位为${\frac{lm}{W}}$流明/瓦特;将发光效率定义为经过光度函数加权的辐射通量与原始辐射通量的比值,即单位时间内人眼感知的能量与光源辐射的能量的比值,计算方式为$\frac{\int_{380}^{780}\overline{y}(\lambda)I_e(\lambda)d\lambda}{\int_{380}^{780}I_e(\lambda)d\lambda}$。

由于实时渲染一般选择离散的RGB空间来近似连续的可见光谱,因此对于连续的光度函数,可以约定其为一个离散函数,或者进一步约定所有光源的发光效率为100%,并由此忽略光度函数。此时${I_v}=683{I_e}$,可以把辐射度量法简单线性映射到光度度量法。

实践中出于简化用户可调节参数数量的目的,一般可以选择直接使用光度相关单位,并使用该类物理量进行整个光照着色处理。

 

对于实时渲染,光源的物理特征可以通过以下几种方案来实现计算:

1. 合成光源(Synthetic/Analytical Light):可以直接计算出辐射特征的光源,常见有精确光源(Punctual Light,发光起点无限小的理想光源):点光源(Point Light)与锥形光源(Spot Light)等;区域光源(Area Light,发光起点有体积/面积):线形光源(Line Light)、平截头体光源(Frustum Light)、球形光源(Sphere Light)、碟形光源(Disk Light)、管状光源(Tube Light)和矩形光源(Rectangle Light)等;

精确光源:对于精确光源,其辐射能遵循平方反比衰减特征,即$E=\frac{I}{distance^2}$,距离单位应与光度照度相匹配,即使用$m$米或其缩放单位。理论上由于精确光源的发光起点无限小,所以当被照物体距离无限接近光源时,照度会无限大,此时应将理想精确光源近似为一个有体积的光源,一般可选择约定其为直径一个距离单位,或距离单位的${10^-n}$倍数的球型光源,但依旧使用精确光源的定义来进行计算,即$E=\frac{I}{max(distance^2, 1*10^{-n})}$。

点光源的辐射通量/光通量:$\phi=\int\limits_{S}I dI = \int_{0}^{2\pi}\int_{0}^{\pi} I d\theta d\phi=4\pi I$;

锥形光源的辐射通量/光通量:$\phi=\int\limits_{\Omega}I dI = \int_{0}^{2\pi}\int_{0}^{\theta_{outer}} I d\theta d\phi=2\pi(1-\cos\frac{\theta_{outer}}{2})I$;其中$\theta_{outer}$为锥形光源的张角。

 区域光源:如果使用理想的精确光源,随着粗糙度的减小,对于金属类型材质其高光反射部分会相应集中于一个区域;当粗糙度为0时,精确光源的高光反射将会“消失”,造成不自然的效果。该问题的根本原因是任何真实光源都有体积,而精确光源忽略了该因素,导致完美光滑面只能相应反射一“束”无限小且方向无限精确的光,在渲染管线中这样的数据没有什么可能最终被输出到屏幕。上述问题的解决方案是使用有体积/面积的光源。

 区域光源的辐射率/辉度:$L_o=\int\limits_{\Omega+} f(v,l) V(l) L_i \langle n·l \rangle dl$,该定义描述了在单位半球上区域光源的辐射率/辉度,其中$V(l)$是一个heavyside函数,当物体能被该区域光源照到时为1,否则为0,即描述了区域光源的形状,该定义同时描述了区域光源能照亮的部分与其阴影,但无分析解;将$V(l)$忽略只考虑被区域光源照亮部分的单位半球,该定义可简化为$L_o=\int\limits_{\Omega_{light}} f(v,l) L_i \langle n·l \rangle dl$,此时可将球面度积分转换成区域光源的面积积分,用于便利计算,即$L_o=\int\limits_{\Omega_{light}} f(v,l) L_i \frac{\langle n·l \rangle \langle n_a·-l \rangle}{distance^2} dA$,其中$n_a$是区域光源微分面dA的法线;由于涉及到BRDF,因此对于漫反射和高光反射一般会分开讨论;

2. 环境光捕捉(Environment Light Capturing):环境光捕捉的基本目的是生成一个辐照度数据集,用以在渲染时进行采样。环境光捕捉可以实时进行也可以预计算,实时环境光捕捉通过抽象为光照取样器(Light Probe)的对象来进行,捕捉到的数据可以存储在贴图中,常见的存储方式有立方体贴图(Cubemap)、等长线投影贴图(Equirectangular map)、双抛物面贴图(Dual-Paraboloid Map)等,环境光捕捉也可以使用来自真实世界的数据。以上方案常称为图像照明(Image-based Lighting, abbr. IBL)。

3. 测量光源(Radiometric/Photometric Light):对真实灯光预先进行辐射度/光度测量,并把强度分布存储起来,用以在运行时采样,常见标准为IES和EULUMDAT。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!