
Breakdown:


该笔记分为初级、中级和高级三个部分。
初级篇主要介绍一维的标准和非标准 FDTD 理论。
中级篇会介绍二维 FDTD 理论。其中二维的 NS-FDTD 理论通过组合不同的有限差分模型来提高求解 Maxwell 方程的精度,是该方法的核心之一。
高级篇会介绍三维 FDTD 理论,将其应用到导电介质(例如金属、等离子体等)中,以研究电磁波在这些材料中的传播特性。

有限差分时域法(FDTD) 是计算电磁波传播最著名的数值算法之一。FDTD 方法可以模拟任意形状的结构、非线性介质,并且能够计算宽频带电磁波的传播。NS-FDTD 通过对单一频率波计算的优化减少了计算资源,使得在相同资源消耗的情况下可以计算更高精度的结构。利用 NS-FDTD 方法,研究者们已经成功准确模拟了一类特殊的电磁模式——耳语回廊模式(Whispering Gallery Modes, WGM)。
耳语回廊模式指的是电磁波或声波在一个圆形、球形或环形结构的内壁附近传播,并在其周围绕行多次而不易散射到外部的现象。
一个直观的例子是,在伦敦圣保罗大教堂的圆形穹顶下,如果一个人在一侧轻声耳语,另一个人在远离数十米的另一侧仍然可以听到。这是因为声音波沿着圆形墙壁传播,并保持在特定的路径上,从而减少了能量损失。
传统的 FDTD 方法在计算 WGM 的时候往往误差较大,但是NS-FDTD 方法精度更高,因此计算结果更接近于理论值,如上图所示。
(a) 图:Mie 理论的解析解,作为参考标准。
(b) 图:使用 传统 FDTD 方法在粗网格上进行的模拟,结果与理论值偏差较大。
(c) 图:使用 NS-FDTD 方法在相同粗网格上的模拟,结果与 Mie 理论 高度吻合,明显优于传统 FDTD 计算结果。
首先介绍一维的标准/非标准 FDTD 理论。在计算机模拟中,需要额外考虑的是数值稳定和边界条件。
很多偏微分方程(PDEs)没有解析解,因此只能依赖数值模拟。有限差分(FDM)是最常见的数值计算方法,基本思想是用差分表达式来近似求解微分方程。
求解一个一维函数的导数,首先使用泰勒展开(Taylor Series Expansion),对函数 $f(x)$ 在 $x+\Delta x$ 处的展开:
$$
f(x + \Delta x) = f(x) + \Delta x \frac{df(x)}{dx} + \frac{\Delta x^2}{2!} \frac{d^2 f(x)}{dx^2} + \cdots ,
\tag{1}
$$
当 $\Delta x$ 足够小的时候,可以忽略高阶项(即 $ \frac{\Delta x^2}{2!} \frac{d^2 f(x)}{dx^2} + \cdots $ ),只保留第一阶导数项,最后整理可以得到:
$$
\frac{df(x)}{dx} \approx \frac{f(x+\Delta x) – f(x)}{\Delta x} .
\tag{2}
$$
公式(2)称为前向有限差分(Forward Finite Difference, FFD)近似。
在泰勒展开中忽略了 $\frac{\Delta x^2}{2!} \frac{d^2 f(x)}{dx^2} + \cdots$ 这一项,因此截断误差为一阶误差,即 $O(\Delta x) $ 。
类似地,对函数 $f(x)$ 在 $x – \Delta x$ 处的展开:
$$
f(x – \Delta x) = f(x) – \Delta x \frac{df(x)}{dx} + \frac{\Delta x^2}{2!} \frac{d^2 f(x)}{dx^2} + \cdots .
\tag{3}
$$
易得:
$$
\frac{df(x)}{dx} \approx \frac{f(x) – f(x- \Delta x)}{\Delta x} .
\tag{4}
$$
误差同上。
前面两个算法都只用了当前点与一个相邻点计算,因此精度较低。中心差分则是使用前后两个相邻点,提高了精度。
对于函数 $f(x)$ ,将公式(1)与公式(3)相减,消去二阶导数项,得到:
$$
f(x + \Delta x) – f(x – \Delta x) = 2\Delta x \frac{df}{dx} + O(\Delta x^3) .
\tag{5}
$$
进一步整理得到:
$$
\frac{df}{dx} \approx \frac{f(x + \Delta x) – f(x – \Delta x)}{2\Delta x} .
\tag{6}
$$
有些教材会用 $ \Delta x/2 $ 替换 $ \Delta x $ 得到公式(7),两者其实是等价的。
$$
\frac{df}{dx} \approx \frac{f(x + \Delta x/2) – f(x – \Delta x/2)}{\Delta x} .
\tag{7}
$$
上面两个公式都被称为二阶中心有限差分(central finite difference)公式。
另外,对于函数 $f(x)$ ,将公式(1)与公式(3)相加,消去一阶导数项后得到:
$$
f(x+ \Delta) + f(x- \Delta) = 2f(x) + \Delta x^2 \frac{d^2 f}{dx^2} + O(\Delta x^4).
\tag{8}
$$
整理后得到:
$$
\frac{d^2 f}{dx^2} \approx \frac{f(x + \Delta x) – 2f(x) + f(x – \Delta x)}{\Delta x^2}
\tag{9}
$$
在有限差分法中,通过增加采样点数的方法提高计算精度进而得到更高阶的差分公式。
为了提高精度,这里在二阶中心有限差分法的基础上额外增加两个采样点 $x + 2\Delta x, x – 2\Delta x$ ,并在此处进行泰勒展开:
对于右侧点,泰勒展开为:
$$
f(x+2\Delta x) = f(x) + 2\Delta x\frac{df(x)}{dx} + 2\Delta x^2 \frac{d^2f(x)}{dx^2}+O(\Delta x^3) ,
\tag{10}
$$
类似地,
$$
f(x – 2\Delta x) = f(x) – 2\Delta x \frac{df(x)}{dx} + 2\Delta x^2 \frac{d^2 f(x)}{dx^2} + O(\Delta x^3) .
\tag{11}
$$
通过线性组合(比如将公式(11)取反再取半,上面两式相加),消除高阶误差项,得到:
$$
\frac{d^2 f(x)}{dx^2} \approx \frac{1}{\Delta x^2} \left[ \frac{4}{3} (f(x + \Delta x) + f(x – \Delta x)) – \frac{1}{12} (f(x + 2\Delta x) + f(x – 2\Delta x)) – \frac{5}{2} f(x) + \cdots \right] .
\tag{12}
$$
这个模型使用了四个点,并且通过加权平均减少了误差。但是会带来数值不稳定等潜在问题。
当我们用高阶有限差分来取代微分方程时,会引入额外的数值解,即虚假解(spurious solutions)。这些解实际并不存在,是由于高阶差分方程的离散化特性导致的。
比如一阶微分方程如 $ \frac{df}{dx} = f(x) $ 通常有一个独立解,二阶微分方程如波动方程 $\frac{d^2f}{dx^2}=k^2f(x)$ 通常会有两个独立解(两个自由参数),四阶微分方程会有四个独立解等等。
在数值计算中,若使用四阶有限差分方法来近似一个原本为二阶的微分方程,那么差分方程的结束就会强行提高了,进而导致额外的虚假解。这些多出来的解并不对应原本的物理系统。
尤其是描述电磁波传播的二阶微分波动方程,应该使用二阶中心有限差分法,而不是更高阶的方法。
在计算机上模拟波的传播,需要用到数值方法近似计算。其中,有限差分时域法则发挥强大的作用。
一维波动方程的数学表达为:
$$
\frac{\partial^2 \psi}{\partial t^2} = v^2 \frac{\partial^2 \psi}{\partial x^2} ,
\tag{1}
$$
其中 $\psi(x,t)$ 表示波的振幅, $v$ 是波的传播速度(光在真空中是 $3 \times 10^8$ 米/秒)。
这个方程的物理意义是:波的变化与时间、空间变化有关。
对于一个无限长的波动介质,解通常是一个形式非常简单的行波:
$$
\psi(x,t) = A \cos(kx – \omega t) + B \sin(kx – \omega t) .
\tag{2}
$$
这种情况适用于自由空间传播的电磁波。比如固定边界,行波可以用正弦函数展开:
$$
\psi(x,t) = \sum_{n} A_n \sin(k_n x) \cos(\omega_n t).
\tag{3}
$$
但是如果边界不规则,例如电磁波在地面上反射、水波冲击海岸线、声波在多个房间传播等情景,则无法简单地展开成正弦或者指数的形式,解析求解将极其复杂。比如声波接触不同介质的墙面会有不同的反射路径,导致声波的传播路径变得无法直接求解。
解析解通常会假设波速 $v$ 是恒定的,也就是波在均匀介质中传播。但是实际上波会穿过非均匀介质,如声波在不同温度的房间具有不同的传播速度。在这些情况下,波动方程会变成变系数偏微分方程,如:
$$
\frac{\partial^2 \psi}{\partial t^2} = v(x)^2 \frac{\partial^2 \psi}{\partial x^2} ,
\tag{4}
$$
其中速度 $v$ 会随着位置 $x$ 变化,导致无法直接使用傅立叶变换求出解析值。
又或者是波动方程右侧有激励源,即多个波形都有可能不同的源相互干涉,这种情况也很难求出解析解。
并且在真实世界中,能量的传播会有损耗,因此需要对波动方程引入损耗项,此时波动方程就会变成非线性方程或者高阶微分方程,使得无法直接求解。
因此我们引入有限差分时域法来解决这些问题。
由于计算机不能直接计算连续的数学方程,因此需要离散化,即将空间与时间划分为网格,然后让计算机逐步计算每个格子的波动情况。
在连续的形式下,一维波动方程
$$
\frac{\partial^2 \psi}{\partial t^2} = v^2 \frac{\partial^2 \psi}{\partial x^2} ,
\tag{1*}
$$
的等价形式是
$$
\left( \frac{\partial^2}{\partial t^2} – v^2 \frac{\partial^2}{\partial x^2} \right) \psi(x,t) = 0.
\tag{5}
$$
因此,用间隔 $\Delta x$ 离散空间,每个点用索引 $i$ 来表示 $x = i\Delta x$ ;用间隔 $\Delta t$ 离散时间,每个时刻用缩影 $n$ 来表示 $t = n\Delta t$ ,其中 $n$ 均为整数。所以把波函数写为:
$$
\psi_i^n = \psi(i\Delta x, n\Delta t) .
\tag{6}
$$
然后用中心有限差分(central finite difference)方法计算波函数的微分。
时间与空间方向的二阶偏导函数的中心有限差分近似分别是
$$
\frac{\partial^2 \psi}{\partial t^2} \approx \frac{\psi_i^{n+1} – 2\psi_i^n + \psi_i^{n-1}}{\Delta t^2} ,
\tag{7}
$$
$$
\frac{\partial^2 \psi}{\partial x^2} \approx \frac{\psi_{i+1}^{n} – 2\psi_i^n + \psi_{i-1}^{n}}{\Delta x^2} .
\tag{8}
$$
其中 $\psi_{i+1}^{n}$ 是右侧相邻网格点的波动值。
将公式(7)和公式(8)代入波动方程(公式(1)),得到公式(9)。
$$
\frac{\psi_i^{n+1} – 2\psi_i^n + \psi_i^{n-1}}{\Delta t^2} = v^2 \frac{\psi_{i+1}^{n} – 2\psi_i^n + \psi_{i-1}^{n}}{\Delta x^2} ,
\tag{9}
$$
整理后便得到标准的1D FDTD计算公式,1D standard finite difference time domain (FDTD) algorithm:
$$
\psi_i^{n+1} = 2\psi_i^n – \psi_i^{n-1} + \left( \frac{v^2 \Delta t^2}{\Delta x^2} \right) (\psi_{i+1}^{n} – 2\psi_i^n + \psi_{i-1}^{n}) .
\tag{10}
$$
这个公式的依赖时间、空间中前后两个步进点计算的。也就是说当前点的状态收到相邻点的影响。
在标准 FDTD 方法中,使用中心差分近似离散波动方程。但是这个方法存在数值色散(numerical dispersion)问题。在较粗网格的时候会有很大的误差。
非标准 FDTD 算法则解决了上述问题。NS-FDTD 对单色波做特别处理,即使数值离散也能确保精度。
首先假设我们研究的是某种单色波
$$
\psi(x,t) \;=\; e^{\,i(kx – \omega t)},
\tag{11}
$$
其中 $k$ 为波数($k = 2\pi / \lambda$), $\omega$ 为角频率($\omega = 2\pi f$)。
公式(11)连续情况下的空间微分是
$$
\frac{\partial \psi}{\partial x} \;=\; i\,k\, \psi(x,t).
\tag{12}
$$
举个例子,如果直接用标准差分来算 $\Delta_x \psi(x,t)$ ,会得到
$$
\Delta_x \psi(x,t)
= \psi(x+\Delta x,t) – \psi(x,t)
= e^{\,i(kx – \omega t)}\bigl(e^{\,i\,k\,\Delta x} – 1\bigr) ,
\tag{13}
$$
和真实的微分并不一致。只有当 $\Delta x$ 足够小时,才能近似。也就是说,如果网格较粗,那么就会产生所谓的误差。
NS-FDTD 引入修正因子 $s(\Delta x)$ 让离散的算符尽可能减少误差
$$
\Delta_x \psi(x,t)
\approx
s(\Delta x)\,\frac{\partial \psi(x,t)}{\partial x}.
\tag{14}
$$
这个 $s(\Delta x)$ 由 $\Delta x$ 处的相位变化量决定。例如,我们的目标是
$$
\Delta_x \psi(x,t) = \psi(x+\Delta x,t) – \psi(x,t) .
\tag{15}
$$
那么误差因子的大小由公式(12)(13)(14)(15)共同推导出
$$
s(\Delta x)
\frac{e^{\,i\,k\,\Delta x} – 1}{i\,k\,\Delta x}
\frac{e^{ik\Delta x} – 1}{ik}.
\tag{16}
$$
通过欧拉公式,将误差因子简化为
$$
s(\Delta x)
= \frac{2}{k}\,\sin!\Bigl(\frac{k\,\Delta x}{2}\Bigr)\,e^{\,i\,\frac{k\,\Delta x}{2}} .
\tag{17}
$$
注意到,当 $\Delta x \to 0$ 时,非标准差分就退化回“标准中心差分”的情形,与真正的导数近似几乎一致。其实,公式(17)包含了相位因子和幅度两个部分,前者对应指数部分。
类似地,推导出时间方向的修正函数
$$
s(\Delta t)
= \frac{2}{\omega}\,\sin\Bigl(\frac{\omega\,\Delta t}{2}\Bigr)e^{-\,i\omega\,\Delta t/2}.
\tag{18}
$$
总结一下,我们从波动方程开始,将空间和时间的离散化之后用中心差分近似,然后引入修正函数(关于修正函数的指数项其实被隐含地处理了)
$$
\frac{\psi_i^{n+1} – 2\psi_i^n + \psi_i^{n-1}}{\left(\frac{2}{\omega} \sin(\omega \Delta t / 2)\right)^2} =
v^2 \frac{\psi_{i+1}^{n} – 2\psi_i^n + \psi_{i-1}^{n}}{\left(\frac{2}{k} \sin(k \Delta x / 2)\right)^2}.
\tag{19}
$$
整理后得到
$$
\psi_i^{n+1} = -\psi_i^{n-1} + \left(2 + u_{\text{NS}}^2 d_x^2 \right) \psi_i^n ,
\tag{20}
$$
其中
$$
u_{\text{NS}} = \frac{\sin(\omega \Delta t / 2)}{\sin(k \Delta x / 2)} .
\tag{21}
$$
在做数值模拟时,我们希望时间步长 $\Delta t$ 尽量大,从而减少总的计算步数,但又不能超过某个极限,否则数值解会发散。这个极限究竟是怎么推导出来的?

Mitsuba3 provides SOTA for pbr. This article focuses on using Mitsuba’s principled_hair BSDF and custom adjustments for high-fidelity hair rendering.
Firstly, defining the scene and hair BSDF.
import mitsuba as mi
mi.set_variant('cuda_rgb')
# Define the hair scene with a principled hair BSDF
scene_dict = {
"type": "scene",
"integrator": {"type": "volpath"},
"sensor": {
"type": "perspective",
"film": {"type": "hdrfilm", "width": 1024, "height": 768}
},
"hair_object": {
"type": "ply",
"filename": "../scenes/hair_model.ply",
"bsdf": {
"type": "principled_hair",
"melanin_concentration": 0.6,
"sigma_a": [0.1, 0.05, 0.02],
"roughness": 0.3,
"azimuthal_roughness": 0.2
}
},
"light": {
"type": "point",
"intensity": {"type": "spectrum", "value": 150.0},
"position": [2.0, 2.0, 2.0]
}
}
# Load and render the scene
scene = mi.load_dict(scene_dict)
image = mi.render(scene, spp=512)
# Display the rendered image
import matplotlib.pyplot as plt
plt.axis('off')
plt.imshow(image ** (1.0 / 2.2))
plt.show()Python
首先查看Clash的端口, 我这里是7890.
本机PowerShell中, 输入 ipconfig ,
找到最下面的 vEthernet (WSL (Hyper-V firewall)), 记住这里的IPv4地址. 我这里是 172.20.0.1 .
接下来在WSL中, ~/.bashrc 里面添加如下代码:
alias proxy='export all_proxy=http://172.20.0.1:7890'
alias unproxy='unset all_proxy'保存, 然后执行下面的代码激活:
source ~/.bashrc
动词的敬体及动词的ます形 <V ます形>
ウ段变为イ段假名,再接“ます”。
“る”去掉,再接“ます”。
去掉“ます”后所剩下的动词词干部分即为“动词的ます形”,也称为:动词第一连用形。
N(时间)に <时间点>
强调动作或事件发生的具体时间。
时间点可以是具体的时刻、日期、星期等。
表示大致的时间。
但是不能表示持续时间,不能说『3時間ごろ』,这个时候要用『くらい/ぐらい』。
大约···。···左右。
大约的数量、时间、程度或范围。
前面音为清音时用「くらい」,而前面音为浊音或拗音时用「ぐらい」
成为。变成。
描述从一种状态变化为另一种状态。
名词 + に + なる
い形容词去「い」+ く + なる
な形容词 + に + なる
N+になる表示身份、地位或角色的变化。
A+〜なる表示性质、状态的变化。
V ましょう。/V ましょうか。 <劝诱(V ましょう-Ⅰ)>
我们···吧。
动词的「ます形」(去掉「ます」),加上「ましょう」。
用于提出建议、邀约或表达一种确定的意向,常用于提议一起做某事。
最好···。应该···。
···(做)比较好。
名词+のほうがいい。
い形容词:直接加「ほうがいい」。
な形容词:加「なほうがいい」。
动词的过去形+「ほうがいい」,表示最好做某事。
动词的未然形+「ないほうがいい」,表示“最好不要做某事”。
常用来劝告对方采取某种行动。提出建议或表达主观评价。
小时(じかん):小时数时,「時」后面加「かん」表示时间段,例如「いちじかん」。
分钟(ふん/ぷん):表示分钟的读音有「ふん」和「ぷん」,具体根据数字变化。例如「いっぷん」(1分钟)、「にふん」(2分钟)。
| 小时 | 读音 | 分钟 | 读音 |
| 1小时 | いちじかん | 1分钟 | いっぷん |
| 2小时 | にじかん | 2分钟 | にふん |
| 3小时 | さんじかん | 3分钟 | さんぷん |
| 4小时 | よじかん | 4分钟 | よんぷん |
| 5小时 | ごじかん | 5分钟 | ごふん |
| 6小时 | ろくじかん | 6分钟 | ろっぷん |
| 7小时 | しちじかん | 7分钟 | ななふん |
| 8小时 | はちじかん | 8分钟 | はっぷん |
| 9小时 | くじかん | 9分钟 | きゅうふん |
| 10小时 | じゅうじかん | 10分钟 | じゅっぷん |
| 11小时 | じゅういちじかん | 11分钟 | じゅういっぷん |
| 12小时 | じゅうにじかん | 12分钟 | じゅうにふん |
| 20分钟 | – | 20分钟 | にじゅっぷん |
| 30分钟 | – | 30分钟 | さんじゅっぷん |
| 40分钟 | – | 40分钟 | よんじゅっぷん |
| 50分钟 | – | 50分钟 | ごじゅっぷん |
特别读音提示:
日期(日にち):表示某一天的日期,用于标记具体的日子。例如「1月1日」读作「いちがつついたち」。
天数(ていすう):表示经过的天数,用于描述时间长度。例如,「1天」表示为「いちにち」。
| 日期(日にち) | 读音 | 天数(ていすう) | 读音 |
| 1日(1号) | ついたち | 1天 | いちにち |
| 2日(2号) | ふつか | 2天 | ふつか |
| 3日(3号) | みっか | 3天 | みっか |
| 4日(4号) | よっか | 4天 | よっか |
| 5日(5号) | いつか | 5天 | いつか |
| 6日(6号) | むいか | 6天 | むいか |
| 7日(7号) | なのか | 7天 | なのか |
| 8日(8号) | ようか | 8天 | ようか |
| 9日(9号) | ここのか | 9天 | ここのか |
| 10日(10号) | とおか | 10天 | とおか |
| 11日(11号) | じゅういちにち | 11天 | じゅういちにち |
| 12日(12号) | じゅうににち | 12天 | じゅうににち |
| 13日(13号) | じゅうさんにち | 13天 | じゅうさんにち |
| 14日(14号) | じゅうよっか | 14天 | じゅうよっか |
| 15日(15号) | じゅうごにち | 15天 | じゅうごにち |
| 16日(16号) | じゅうろくにち | 16天 | じゅうろくにち |
| 17日(17号) | じゅうしちにち | 17天 | じゅうしちにち |
| 18日(18号) | じゅうはちにち | 18天 | じゅうはちにち |
| 19日(19号) | じゅうくにち | 19天 | じゅうくにち |
| 20日(20号) | はつか | 20天 | はつか |
| 21日(21号) | にじゅういちにち | 21天 | にじゅういちにち |
| 22日(22号) | にじゅうににち | 22天 | にじゅうににち |
| 23日(23号) | にじゅうさんにち | 23天 | にじゅうさんにち |
| 24日(24号) | にじゅうよっか | 24天 | にじゅうよっか |
| 25日(25号) | にじゅうごにち | 25天 | にじゅうごにち |
| 26日(26号) | にじゅうろくにち | 26天 | にじゅうろくにち |
| 27日(27号) | にじゅうしちにち | 27天 | にじゅうしちにち |
| 28日(28号) | にじゅうはちにち | 28天 | にじゅうはちにち |
| 29日(29号) | にじゅうくにち | 29天 | にじゅうくにち |
| 30日(30号) | さんじゅうにち | 30天 | さんじゅうにち |
| 31日(31号) | さんじゅういちにち | 31天 | さんじゅういちにち |
特别读音:
日语的自他动词与助词“を” <“を”:提示宾语>
自动词表示状态或动作的自然发生,而他动词则需要宾语。
助词「を」在句子中用于提示他动词的宾语。
在···(地点)。
N(场所) + で + 动作,表示动作或事件发生的场所。
用···(工具/方式)。
N(工具/手段) + で + 动作,表示动作的工具或手段。
因为···。
N(原因/理由) + で + 状态/结果,表示事件或状态的原因、理由。
给···。对···。
“に”接在名词后,表示传达、给予等动作的对象。
如果是···。至于···。要是···(N)···的话,···。
接在名词后,表示条件或假设,限定语境和表达更具体的意思。
关于···。
关于……的(某物)。
N(名词) + について + 动词,表示谈论、描述、调查、询问的主题表示。
N についての 后接名词,表示「关于……的(某物)」。具体跳转至17课。
去/来/回去···(某地)···做···(某事)···。
V(ます形)+に+行く/来る/帰る,「去/来/回」为了完成某个动作。
动词一般是带目的的动词,比如说:『買う』、『見る』、『勉強する』等等。
一边···,一边···。
V(ます形)+ながら、〜,表示主语在同一时间内做两个动作。后面的才是主要动作。
足足···。竟然有···。
数量词+も,表示说话人主观认为数量很多,带有惊讶、强调的语气。
···吧?不是···吗?
名词/形容词+でしょ(う),表示和对方确认某件事情的真实性或表达带有怀疑、推测的语气。
为了···。以便···。
N(名词) + の + ため
V 辞书形 + ため
表示某人做某事的目的或原因。后面通常接「に」来表明目的的方向或行为。
目的一般是积极的。
是为了···。因为···。
动词普通形+のです / んです,用于解释说明,进一步补充。
一般有如下使用情况:
要不要···?可以一起···吗?
V(ます形)+ませんか,用于劝诱或邀请对方一起做某事。
以礼貌的否定形式表达,显得比较委婉客气。
日语中的动词有敬体和简体两种形式。在动词句中,敬体主要用于正式或礼貌的场合,而简体则用于随意或日常对话。
动词敬体、简体四象限对照表
| 肯定 | 否定 | |
| 现在/将来 | 敬体:〜ます | 敬体:〜ません |
| 简体:辞书形 | 简体:〜ない | |
| 过去 | 敬体:〜ました | 敬体:〜ませんでした |
| 简体:〜た形 | 简体:〜なかった |
例子:
| 「読む」 | 肯定 | 否定 |
| 现在/将来 | 敬体:読みます | 敬体:読みません |
| 简体:読む | 简体:読まない | |
| 过去 | 敬体:読みました | 敬体:読みませんでした |
| 简体:読んだ | 简体:読まなかった |
| 「来る」 | 肯定 | 否定 |
| 现在/将来 | 敬体:来ます(きます) | 敬体:来ません(きません) |
| 简体:来る(くる) | 简体:来ない(こない) | |
| 过去 | 敬体:来ました(きました) | 敬体:来ませんでした(きませんでした) |
| 简体:来た(きた) | 简体:来なかった(こなかった) |
动词字典形(辞书形),也称为「Vる」形,相当于动词的原形。表示一般现在时和将来时。
用于陈述事实、描述习惯、表达将来的动作等:
用于简单、随意的陈述:
与其他语法组合:
不做某事。不会发生某事。不要···。
动词的未然形或否定形,用于表示否定。
「う段」→「あ段」+「ない」。
特别注意:「ある」变成「ない」,表示“没有”。
「る」去掉,加上「ない」。

“V ませんでした”的简体形式是“V ない”的过去时,即“V なかった”。
···的。···时候的。
与动词的辞书形(字典形)相同。用于修饰名词或在句子中充当定语。
每···(时间)···几次。
N1(周期)+ に + N2(数量)+ V,表示某个动作或行为的频率。
关于…(名词 1)…的…(名词 2)…。
N について,表示「关于···」。具体跳转至15课。
N についての后接名词,表示「关于……的(某物)」。
几乎不···。差不多不···。(不太)···。
ほとんど + V ない,强调某个动作几乎不发生,或者数量极少,接近于没有。
あまり + V ない,表示“不是很……”,不太频繁或数量不多,语气上比「ほとんど」稍弱。
助词「の」通常用于表示所属关系或修饰关系,即“···的···”。
「の」还可以连接一些带有具体意义的助词(如「で」「と」「から」「へ」「まで」等),形成「N+助词+の+N」的结构。
「N で」表示动作或事件发生的场所、手段:
「N と」表示动作的共同参与者或关系:
「N から」表示动作的起点或来源:
「N へ」表示方向或目的地:
「N まで」表示动作的终点或时间的截止:
注意,没有“NにのN”。要用“へ”来替换。“NへのN”来表示方向或目标。
···呀···之类的。例如···和···等。
N1+や+N2+など,列举多个名词中的几个,但不包括所有的内容。
在日语中,需要根据不同主语区分“给”。这一系列动词用于表达物品的授受关系,成为“授受动词”。
给予他人。N1把物品N给予N2。
N1(给予者/わたし)+ は + N2(接受者)+ に + N(物品)+ を + あげる,N1将物品或帮助给予N2。
通常是我(说话人)将某物给予他人。
但当N1(给予者)和N2(接受者)都不是“我”时,具体分为下面两种情况:
N1 和 N2 在说话人心理上的距离相同。
说话人心理上比较倾向于N1。
注意事项,使用「あげる」时需考虑说话人的心理倾向,心理距离上有显著差异,则可能无法使用「あげる」。
除“あげる”之外, “やる”也是“给”的意思,与“あげる”的用法基本相同。
给“我”或“我们”。N1把物品N给予“我”或“我们”。
N1(给予者/わたし)+ は + N2(接受者)+ に + N(物品)+ を + あげる,接受者是“我”或“我们”。接受者默认是“我”。
N1 和 N2 都不是“我”,但说话人心理上更倾向 N2 时:
从别人那里得到。N1从N2那里得到物品N。
N1(接受者/わたし)+ は + N2(给予者)+ に/から + N(物品)+ を + もらう,主语是接受者,用「から」强调来源。「もらう」表示得到。
N1 和 N2 都不是“我”,但说话人心理上更倾向 N1。
「いただく」是「もらう」的敬语形式,并带有自谦的意思。
我想···。想要做某事。
V(ます形)+ たい,表示愿望或想做某事。
「たい」的活用(变化)遵循Ⅰ类形容词的规则。
当动词是他动词且表达愿望时,宾语通常由助词「を」来提示。但是,用「たい」形的时候,助词可以用「が」。
一般来说,「V ます形+たいです」用于第一人称。用「V ます形+たがっています」来间接询问或描述他人(通常是第三人称)的意愿是比较礼貌的。
不知道···。
动词(简体)+ か分かりません。 い形容词(简体)+ か分かりません。 な形容词(简体)+ か分かりません。 名词(简体)+ か分かりません。
「〜か分かりません」用于表达不确定或不知道某事。
数量词、程度副词+ずつ,表示某个动作以一定分量、数量反复进行。
选择···。决定···。
N + にする,表示在众多选项中选择某一事物。常用于点餐、购物等场合。
い形容词将词尾的「い」变成「く」+动词。
な形容词在词干后加「に」+ 动词。
“形容词连用形”是指形容词后续用言(即动词)的形式。
也就是形容词修饰动词。
动词(简体)+ ので い形容词(简体)+ ので な形容词(简体) 去掉「だ」 + な + ので
名词(简体)去掉「だ」 + な + ので
「ので」用于表示因果关系,即用于陈述原因。语气比「から」更为礼貌、温和。
可以表示动作的连续、因果关系、请求、状态的进行等。
词尾为「う、つ、る」 → 变成「って」
词尾为「む、ぶ、ぬ」 → 变成「んで」
词尾为「く」 → 变成「いて」
词尾为「ぐ」 → 变成「いで」
词尾为「す」 → 变成「して」
「る」去掉,加上「て」
「する」 → 变成「して」
「来る(くる)」 → 变成「来て(きて)」
「V た」的变化规则与动词的て形相同。
词尾为「う、つ、る」 → 变成「った」
词尾为「む、ぶ、ぬ」 → 变成「んだ」
词尾为「く」 → 变成「いた」
词尾为「ぐ」 → 变成「いだ」
词尾为「す」 → 变成「した」
「る」去掉,加上「た」。

···然后···,最后···。
V1 て、V2 て、V3 ます。表示一连串的动作依次发生或连续进行,通常最后一个动作使用「ます」形,表示整个动作序列的完成。只有最后一处能体现时态。
请···(做某事)。
V(て形)+ ください,表示请求对方做某事。日常会话、服务场所和与上司、长辈的交流中都可以使用。
(我)打算···。计划···。
肯定形式:V る + つもりだ
否定形式:V ない + つもりだ
说话人打算做某事或不打算做某事。
动词接续:V る + 予定だ,用于表示计划做某事。
名词接续:N + の + 予定だ,表示某个事件或事项的预定计划。
比「〜つもりだ」更正式、客观,多用于已经确定的安排或计划。
「中(ちゅう)」多接在带有动作意义的汉语词后,表示动作正在进行中。比如,“会議中(かいぎちゅう)”、“勉強中(べんきょうちゅう)”、”仕事中(しごとちゅう)”、”営業中(えいぎょうちゅう)”、”移動中(いどうちゅう)”、”準備中(じゅんびちゅう)” 等。
动词的体(アスペクト)用于表示动作的状态。体的表达包括动词的持续、完成和否定等状态。
以「V ている」为基础,可以构成其他的动词体形式,如「V ていない」(否定形式)、「V ていた」(过去进行)和「V ていなかった」(过去否定)。
敬体:『Vています。』、『Vていません』、『Vていました』、『Vていませんでした』。
正在···。
用于描述当前正在发生的动作(动态动词)。
表示状态的持续(静态动词),用于描述某种状态的持续,即动作已经完成,但状态保持不变。
表示反复或习惯性动作。
还没有···。尚未···。
まだ + V ていない(简体) まだ + V ていません(敬体)
表示某个动作尚未发生或尚未完成。
敬体形式多用于回答询问某个动作是否已经完成的句型「もう V ましたか。」(是否已经……了?)。
在···之前。
Vる(动词基本形/辞书形)+ 前(に),在做某事之前。通常表示需要在主要动作发生之前,先完成另一动作。
···之后。···完了之后。
V(动词て形)+ から,表示动作的先后顺序,即在完成某个动作之后,再进行下一个动作。
(第三者)想做某事。/(第三者)想要某物。
第三人称 + V(动词ます形)+ たがる,表示第三人称“想要做某事”。
「-たがる」是「-たい」的派生动词形式,专门用于第三人称。需要注意的是,在「V たがる」结构中,动词的宾语需要用「を」来提示,不能改为「が」。
并且,日本人比较常用的是『たがる』的て形,也就是『たがる→たがっています』。
第三人称 + N(名词)+ をほしがる,于表示第三人称“想要某物”。
看得见···。
N(名词)+ が見える,表示“能看到……”或“看得见……”。描述视觉上可以看见的情况,常用于表达自然景色、建筑物、特定场所等的可视性。与表示主动去看某物的「N を見る」不同,「N が見える」更多是描述自然映入眼帘的情况。
请勿···。
V(动词ない形)+ でください,是「V てください」的否定形式,通常用来委婉地请求他人不要做某事。
(我)可以···吗?
V(动词て形)+ もいい,表示允许或许可。
可以不···。不必···。
V(动词ない形)+ なくてもいい,表示非必要,允许对方不做某事。
禁止···。不可以···。
V(动词て形)+ てはいけない,表示禁止或不允许做某事。适合用于传达纪律、规章制度或上下级关系中的命令。
必须···。不得不···。
V(动词ない形)+ なければならない,强调某个行为的必要性或义务性。
如果不 + 禁止 = 不得不、义务、必须
なくては+ならない
なくては+いけない
なければ+ならない
なければ+いけない
なくちゃ(口语)+ならない
なくちゃ(口语)+いけない
なきゃ(口语)+ならない
なきゃ(口语)+いけない
能够···。可以···。
Vる形 + ことができる,表示“能够”或“可以”。
ことができる→ことができない,表示“不能够”或“不可以”。
只···。仅仅···。
N+だけ+で、に、は、を、が等助词。当 “だけ” 后接 “を” 或 “が” 时,这两个助词通常可以省略。强调只限于某个对象或范围。
だけで:表示仅凭某个条件就足够。“只用···。”
だけに:表示原因或背景,强调“正因为……所以……”
だけは:强调限定对象。
だけを:表示只限定于特定的对象,を 常省略。
在……的时候
动词字典形(V る)+ 時
动词た形(V た)+ 時
分别用于描述 动作尚未发生或正在进行中 和 动作已经完成 的时间点。
(曾经)···过···。
V(动词た形)+ ことがある,表示曾经有过某种经历,相当于“曾经……过……”
V(动词た形)+ ことがない,否定形式,表示没有过某种经历。
用于描述个人的过去经历或体验,通常指曾经做过某事,或在某时间之前有过该经历。
主要用于描述很久以前或曾经拥有过的经历,近期发生的事情不用这个句型。
有时会···。偶尔会···。
有时候不···。偶尔不···。
V ることがある:表示“有时会……”或“偶尔会……”
V ないことがある:表示“有时不……”或“偶尔不……”
(做)···的方法。
V(动词ます形去掉「ます」)+ 方(かた),表示“……的方法”或“……的方式”。
有……的味道/声音/气味。
N(名词)+ がする,表达某种感官体验,是自然感受到的结果,而不是主动去感知。
音(おと)がする(某种环境、物体的声音)、声(こえ)がする(某种人的声音)、匂い(におい)がする(发出某种气味)、味(あじ)がする(具有某种气味)、臭い(くさい)がする(闻到异味)。。。
N(场所)+ を + 自动词,表示从某地点出发或通过某路径移动的含义。
···吧。应该···。可能···。
动词(V 简体)+ でしょう
Ⅰ 类形容词(简体)+ でしょう
Ⅱ 类形容词(词干)+ でしょう(去掉「だ」,直接接「でしょう」)
名词(N)+ でしょう(去掉「だ」,直接接「でしょう」)
表示推测或可能性。语气上带有一定的不确定性,但基于一定的信息或判断。这个句型也可以用于询问,带有确认或探询的意味。简体形式「だろう」。
在···期间,(一直)···。
名词 + の + 間:表示在某个时间段或期间内
V ている + 間:表示在动作或状态持续期间内发生的情况
是不是···呢?我在想···。···吧?
动词、形容词:用简体句接「かな」
名词:直接接「かな」
表达轻微感叹或不确定的自言自语,经常用于自言自语或带有猜测的场合,表示说话人对某事物的不确定或犹豫。
就算···,也···。即使···,也···。
动词:V て形 + も
Ⅰ类形容词:形容词(い形容词去「い」+ く)+ ても
Ⅱ类形容词:形容词(な形容词词干)+ でも
名词:名词 + でも
表示即使在某种情况下,结果也不改变,多用于表达某种坚定的结果或状态,即无论条件如何,结果依旧。
(在)···之前。
名词 + までに:表示在该名词时间点之前。
动词字典形 + までに:表示在该动作或事件发生之前。
表示截止时间或期限,强调时间的最后期限,要求动作在指定的时间点前完成。
『引用的句子』+ と + 言う/聞く/答える,用于引用对方的原话内容,带有较强的客观描述感。
简体句 + と + 言う/聞く/答える,将原话转换为简体句,语气更自然,适合在日常会话中使用。
用于引用别人的话或表达间接引述,表示听到或得到的信息。
(我)认为···。(我)觉得···。(我)想···。
简体句 + と思う,用于表达自己的想法、意见或推测。助词「と」用于提示想法的内容,表示「思う」的对象。主要用于第一人称,即表达自己主观的判断或看法,一般不使用直接引语的形式,因此「と」前的内容要用简体形式来表达。无论句子的语气如何,「と」前的内容都需用简体。
也许···。可能···。
动词简体形 + かもしれない
い形容词简体形 + かもしれない
な形容词词干 だ + かもしれない
名词 N(简体形去「だ」)+ かもしれない
表示说话人对某个情况并不完全确定,但认为有可能发生的语气。语气上比「〜でしょう」更加不确定,带有一种猜测的意味。
···之后,···。
动词过去形(V た)+ 後(で):表示在某个动作完成之后。
名词 + の + 後(で):表示在某个时间点或事件之后。
只。仅仅。
N + しか + V(否定形),表示“只有……”、“仅仅……”,强调数量少或范围有限。虽然谓语动词使用了否定形式,但整个句子的意思是肯定的,强调数量少或范围有限。
不止···N1···,···N2(也)···。不只···,而且···。
N1 + だけでなく + N2 + も,表示不仅限于 N1,还有 N2,可以用于描述物品、人物、特征等多个方面的列举,也适合用在需要强调范围扩大的句子中。
『あげる/くれる/もらう <授受动词>』 是物品的接受,而本节语法强调动作的授受。
『V てあげる』
我为别人做某事。
N1(我/给予者)は N2(接受者)に V てあげる,对对方的帮助,带有施恩之感,因此在正式场合或对不亲近的人应避免使用。
『V てくれる』
他人为我做某事。
N1(给予者)は N2(我/接受者)に V てくれる,表达别人为自己(或自己一方的人)做某事,接受者(通常是“我”)使用「に」提示,但「私に」可以省略。
『V てもらう』
他人为我做某事。
N1(给予者)は N2(我/接受者)に V てくれる,用于表达别人为自己(或自己一方的人)做某事,「私に」也可以省略。
貰う
→ 貰います(ます形)
→ もらって(て形)
→ もらった(た形)
能够做某事/有能力做某事
ウ → エ + る
返す(かえす)→ 返せる(かえせる)
書く(かく)→ 書ける(かける)
泳ぐ(およぐ)→ 泳げる(およげる)
待つ(まつ)→ 待てる(まてる)
読む(よむ)→ 読める(よめる)
遊ぶ(あそぶ)→ 遊べる(あそべる)
送る(おくる)→ 送れる(おくれる)
る → られる
辞める(やめる)→ 辞められる(やめられる)
寝る(寝る)→ 寝られる(ねられる)
する → できる
勉強する → 勉強できる
来る(くる)→ 来られる(こられる)
网络常见。一段、不规则动词的 ら 直接省略。
形式名词「ところ」用于表示动作所处的阶段。
V るところだ。
表示即将开始某个动作,相当于“正要……”、“马上要……”。
V ているところだ。
表示正在进行某个动作,相当于“正在……”。
V たところだ。
表示刚刚完成某个动作,相当于“刚……完”。
刚刚···。刚···不久。
动词た形 + ばかりだ,强调事件刚完成,时间过去得很短,带有新鲜感或“刚结束”的意味。
时间主观性较强,取决于说话者的感受。
···之类的怎么样?
名词 + でも,用于提出一个建议或例子,供对方考虑。
助词“で”接在数量词或关于数量词的疑问词后。
(N に)V てほしい / V ないでほしい
希望你···。希望你不要···。
V て形 + ほしい:希望对方做某事
V ない形 + でほしい:希望对方不要做某事
(N に)V てほしい / V ないでほしい:指明希望的对象
当说话人希望某种状态或现象产生时,用“が”提示。谓语动词一般是自动词。
好像···。似乎···。像···一样。
V 简体 + みたいだ。
AⅠ 简体 + みたいだ。
AⅠⅠ 简体(〜だ)+ みたいだ。
N 简体(〜だ)+ みたいだ。
表达说话人对当前情况的主观推测,不确定是否属实,但从外表或状况判断出一个可能性。
他说/她说···。
V(简体形)+ と言っていた
AⅠ(い形容词)+ と言っていた
AⅡ(な形容词词干 + だ)+ と言っていた
N(名词 + だ)+ と言っていた
转述第三人称的发言或意见,它用「言っていた」的形式,带有回顾的意味,即转述发生在过去的信息。
不是···,而是···。
名词 + ではなく(て)。
表示否定前面的内容,并且在后面加上正确的内容。ではなくて、じゃなくて多用于口语。
简体书面语版本的 “です”“だ” 。
| 肯定 | 否定 | |
| 现在、将来 | N である。 | N ではない。 |
| 过去 | N であった。 | N ではなかった。 |
是因为···
句子 + からだ。
否定形式是“〜からではない”,“并不是因为···”。
对···来说。对···而言。因为···的缘故。
N+ にとって。
表达对某个事物、情况或人从特定主体(N)的角度去看待时的评价或立场。
叫做……的 N。所谓的 N。
〜という + 名词(N)。
当需要谈及自己或对方所不了解的人或事物时,可以使用 “という” 进行提示。
句子 + という + 名词(N)。
也可以接在句子的后面,用于解释某个名词的具体内容。
无论···都···。
疑问词 + でも。
任何情况、任何对象都适用。
似乎···。大概···吧。好像···。
动词普通型 + ようだ。
い形容词普通形 + ようだ。
な形容词词干 + な + ようだ。
名词 + の + ようだ。
表示说话人根据某种证据(视觉、听觉、感觉等)所做的推测或判断。
像···一样。
名词(N)+のようだ。
一般和副词“まるで”“いかにも”等搭配使用,“(简直)像···一样”。
SOV→(动词简体 + S)はOをV
(買ったN)はパソコンです。
(飲むN)が好きです。
N→こと,此处填入一个形式体言,用于抽象客观的陈述,习惯规则行为。
“こと” 除了作为一般名词用来表示“事情”外,还可以用于做 “形式体言”,将用言(动词或形容词)的连体形名词化,使其能够充当句子的主语、宾语等成分。除了“こと”,形式体言还有“の”“もの”等。
太···。过于···。
动词连用形+すぎる:表示动作过度
い形容词去『い』+すぎる:表示性质过度
な形容词词干+すぎる:表示性质过度
注意,形容词加上すぎる之后,就变成一个动词了。
常用于表达不好的结果,暗示“某事过头了”,带有负面的评价,有时也会有夸张的效果。

今天继续来粗略看看Sig23这篇计算表面反射的全波参考模拟器paper。
关键词:图形学入门、波动光学渲染、BEM、AIM、BRDF
Wave Optics Render, Full Wave Reference Simulator
原文:https://zhuanlan.zhihu.com/p/1471147574
稍微总结一下目前的理解。
基于波动光学的计算机图形学对图形学研究者而言无疑是巨大的挑战。它不仅要在计算上处理电磁波,还涉及一些量子力学的理论,想要打通物理学和图形学之间的隔阂属实不易。在基于波动光学的图形学中,光在介质中的传播不再只是直线,而是会因为波长不同,表现出自旋、偏折和衍射等多种特性。从肥皂泡、偏振镜、油膜光泽或糖分介质导致的旋光再到无线电辐射如何在城市建筑之间传播,都离不开波动光学理论。

在知乎上也有很多大佬分享了非常详细的波动光学渲染理论基础教学。
但是奈何阅读门槛都较高,且距离实际应用太远。波动光学渲染涉及的数学物理知识太多,就算是一行一行细看闫老师和他博士生的paper,也是寸步难行。
图形学的圣杯是光线追踪,而全局波动光学渲染则是图形学圣杯中的圣杯。

在Sig21上,Shlomi提出了将路径追踪与物理光学相结合实现电磁辐射传播的真实模拟。目前已经有不少方法计算电磁波的传输,从高精度但计算密集的波动求解器到快速但不够精确的几何光学方法。如下图所示,展示了当前电磁波传输的计算方法。左边最准确,右边最快。

波动求解器(Wave Solvers)专注于求解麦克斯韦方程的精确解,但对于大型场景来说并不实用,一般用FDTD、BEM或FEM来做。
PO基于高频近似的电磁波计算,但是对于可见光这个频率来说其实勉强够用了。PS:[Xia 2023]的黑狗毛就属于Physical Optics方法。而本文的全波参考应该还是属于Wave Solvers的方式,但是在BEM的基础上使用了PO的一些思想(等效电流等)。
除了PO,还有一种方法介于Wave Solvers和Geometrical Optics之间,称为Hybrid GO-PO,我个人觉得应该叫做几何光学-物理光学混合方法。统一衍射理论(Uniform Theory of Diffraction, UTD)将衍射效应纳入几何光学来计算高频条件下的电磁波传输。个人理解,UTD通过计算绕射系数来补偿几何光学射线边界条件的不足,也就是说几何光学的射线也可以转弯了。这种操作在雷达探测天线设计领域非常实用。除了UTD,Hybrid GO-PO还涉及一种叫射线发射和反弹方法(Shooting and Bouncing Rays, SBR)的技术。这种技术模拟射线在物体表面多次反射,同样基于几何光学。

我个人认为,把光理解为一种平面正弦波其实有些局限。例如3b1b的光学系列视频就把光的电场看成是一个平面正弦波。

虽然可以解释绝大多数现象,并且非常适合入门学习,但是对于波动光学渲染的研究而言,把光的电场简单描述为平面正弦波没办法进一步解释例如本篇paper提及的高斯光束。
但是我依旧强烈推荐不了解波动光学的读者先看这个系列的视频。

视频通过右旋手性介质会使光“旋转”这个特殊波动光学现象,科普了一系列波动光学的有趣现象以及背后的原理。


非常引人深思。


最后甚至还讲到了如何利用物质波构建全息影像。
在经典电磁场理论中,我们通常使用平面波展开电磁场,每个模式的光子在空间上是非定域的,具有无限的空间延展。这种展开方式下,一个光子处于一个频率和波矢明确的模式上,因此它在空间中“充满”了整个平面波的区域。对于自由空间中的电磁场模式非常常见,但这种平面波并不适合描述局域性。

另一种展开方式是局域的波包(wave packet)。这种理解方式,允许我们在空间中对电磁场进行位置上的排布,即形成一系列具有一定宽度的波包。

把光单纯理解为一个正弦波其实违反了不确定性原理。如果光被视为正弦波,也就说明这个光是完全的单色光,但是现实中不可能有单色光。光信号作用基本是频域作用,空域到频域要用傅立叶变换。带宽-时间不确定性原理指出,带宽越窄,信号在时间上会越长。相反,带宽越宽,信号的时间长度越短。

在经典电磁理论中,一个波包可以对应于一个能量集中的区域。
但是注意光子也不能单纯理解为一种波包,而是理解为一种概率波。量子力学中的概率波函数描述了光子的存在几率。波包越集中,粒子性就越明显。这就是量子电动力学解释的波粒二象性。一个光子并不一定只能在一个波包中,它也可以描述为多个波包的叠加。因为光子状态本质上是量子场的激发,允许在不同位置的波包上进行叠加。
也就是说,一个光子可以“跨越”多个波包,即它的波函数可以在空间上以多个波包的形式存在,而不局限于某个特定位置。当一个波包模式上有一个光子时,这个波包可以看作是最低激发态;而如果波包上有多个光子(高阶激发态),则会体现出更高的能量。
本文中提到的一种电磁波束高斯光束是一种特定的电磁波解,可以视为一种波包。高斯光束是一个具有稳定振幅和相位结构的单一波包,它在横截面上表现为高斯分布。不同于我们平常在经典电磁理论中常用的平面波解,因为高斯光束的波前是曲率变化的,不是无限延伸的平面。
波的系综(ensemble of waves)指的是多个波的集合,这些波可能具有不同的频率、相位或传播方向。如果考虑一个系统中多个独立波包(例如多个脉冲激光束)相互叠加,可以将这些波包理解为一个波的系综。换句话说,如果有多个不相关的波包,尤其是随机相位的波包叠加在一起,它们在统计上可构成波的系综。
当我们把电磁场展开为一系列波包,那么就可以将每个波包视为一个随机事件,他们的到达时间、相位都是随机变量。对于多个波包的集合,我们可以在不同时间、不同位置观察到这些波包的特征。在统计意义上,使用系综平均来分析光的能量分布和波动行为。
$$
\langle U(\vec{r}, t) \rangle = \lim_{T \to \infty} \frac{1}{2T} \int_{-T}^{T} U(\vec{r}, t) \, dt
$$
由于不是物理壬,微元写在积分式前我是不认可的(
上面说到,光可以视为多个波包的集合。而不同波包之间可能会存在相位差和时间差,因此需要引入互相关函数和互相干函数来描述两个不同位置的波包之间的相干性和相对相位,提供了对这些波包在时空上相似性的量化描述。如果说系综平均用于描述一个信号在统计意义下的平均行为,那么互相关函数是在时间平均的角度上,描述了不同位置和不同时间之间的相干关系和波动关联性。
具体而言,互相关函数描述了位置 $\vec{r}_1$ 和 $\vec{r}_2$ 之间的波动相干性。如果两个波相干,那么这个Gamma值就会比较大:
$$
\Gamma(\vec{r}_1, \vec{r}_2, \tau) = \langle U(\vec{r}_1, t) U^*(\vec{r}_2, t + \tau) \rangle
$$
交叉谱密度(CSD)矩阵 $W(\vec{r}_1, \vec{r}_2, \omega)$ 是互相关函数的傅里叶变换,表示在频率域中两个位置之间的相干性。
还记得我们之前在Xia2023那篇黑狗毛中讨论的自相关函数吗?互相关函数需要两个信号来描述,而自相关函数只有一个信号。另一个角度来理解,自相关函数(ACF)是互相关函数的一种特殊情况。自相关函数描述的是信号与自身在不同时刻或不同位置的相关性,而互相关函数则是两个不同信号或同一信号在不同位置的相关性。互相关函数与交叉谱密度为一对傅里叶变换对,自相关函数与功率谱密度为一对傅里叶变换对。
交叉谱密度(CSD)和互相干函数描述在不同位置间波动的相干性。而辐射互谱密度(Radiance Cross-Spectral Density, RCSD)是CSD的推广,描述的是光辐射(即能量密度)在不同位置和不同方向之间的相关性。可以理解为,RCSD在辐射度量的基础上提供了类似于CSD的相干性描述。公式中, $L(\vec{r}_1, \vec{r}_2, \omega)$ 表示在频率 $\omega$ 下,位置 $\vec{r}_1$ 和 $\vec{r}_2$ 之间的辐射强度相干性。

辐射互谱密度传输方程(SDTE)与经典的光传输方程(Light Transport Equation, LTE)相似,但是更加适合波动光学。LTE描述的是从点到点的光辐射度传输,而SDTE则使用RCSD函数来描述光辐射的传播,相当于将传输视为区域间的相干传输。
SDTE中的RCSD通过区域间的积分形式表达辐射的传播,可以理解为用RCSD矩阵和衍射算子代替了传统的反射和散射。并且注意,SDTE基于RCSD函数,而不是具体的光强值,这一点和LTE是有较大区别的。
在进一步讨论利用边界元方法(Boundary Element Method, BEM)和自适应积分法(Adaptive Integral Method, AIM)加速的全波参考模拟器之前,首先简单回顾下前文的内容。前文介绍了PO方法和SDTE/RCSD理论。这些方法用于不同的散射计算需求,但它们的基本理论和适用范围不同。本文将讨论一种通过BEM和AIM结合提供高精度的面散射模拟的方法。
用原作者的话来总结,Wave optics在基于物理渲染里面属于很新的分支。虽然波动光学现象在生活中随处可见,但是对画面的影响并不是很大。这个方向其实还有很多可以做的地方。
其他相关参考:
Paper主页:
https://blaire9989.github.io/assets/1_BEMsim3D/project.html
ACM主页:
https://dl.acm.org/doi/10.1145/3592414
ACM Citations:
Yunchen Yu, Mengqi Xia, Bruce Walter, Eric Michielssen, and Steve Marschner. 2023. A Full-Wave Reference Simulator for Computing Surface Reflectance. ACM Trans. Graph. 42, 4, Article 109 (August 2023), 17 pages. https://doi.org/10.1145/3592414

与更常用的光线追踪技术相比,波动光模拟更费时间但也更精确。

比方说金属表面的微观划痕、毛发纤维结构,传统的光学模型渲染的,无法渲染出我们现实生活中观察到的五彩斑斓的色彩效果。

基于波动光学的渲染是一个难题,因为解决麦克斯韦方程组需要大量复杂的计算。现有的基于波的外观模型通常采用一些近似方法。

一种近似方法是标量场近似(scalar field approximation)。
在波散射问题(wave scattering problem)中,电场和磁场是不同的矢量场量,具有不同极化方向(polarizations)的光由指向不同方向的场量组成。
有些近似模型将这两个矢量场量替换为单一标量函数(single scalar function),因此可以计算光能的强度,但放弃了对极化的建模(modeling polarization)。

另一种近似是一阶近似(first-order approximation)。假设光线仅与模型结构的每个部分发生一次反射,忽略了多次反射。然而,许多情况下这些近似都不适用。
例如 Yu 等人与 Dr. Lawrence 团队的合作,Penn State University 制作了带有圆柱形横截面的表面,这些表面会引起多次光反射并产生结构色彩,使用近似模型无法很好地理解或预测这些现象。

作者希望通过计算双向反射分布函数(BRDF)来尽可能精确地表征表面散射。
现有模型都采用各种近似方法,比如基于光线、标量或一次近似的模型,在没有参考质量(reference quality)的BRDF的情况下,很难看出每种反射模型缺少了什么或适用于什么场景。
作者的解决方案是构建一个三维四波模拟器(3D 4-way simulation),用于计算具有明确微观几何结构的表面的BRDF。
声称不使用任何近似方法,为表面样本计算出参考质量的BRDF。
速度方面dddd。

作者接下来介绍他们的模拟如何工作以及它与BRDF的关系。

首先,在左边这幅图,Input一个表面样本(定义为高度场)以及一个入射方向(在投影半球上表示)。定义了一个向表面传播的入射场,并从表面计算出一个散射场。
中间这幅图,光束是入射场,背景中的散射场也显示在此图中。
输出是对应给定入射方向的BRDF模式,半球每个点代表一个出射方向,颜色代表相应方向上反射光的颜色。BRDF以RGB颜色表示,这些颜色是从光谱数据转换而来。
对于很多粗糙度不高的表面,反射模式围绕镜面方向对称并随入射光方向的移动而变化。

接下来讲的是如何使用边界元法来解决仅在表面上的信号散射问题,从而降低了问题的维度。

表面信号是从麦克斯韦方程解出的表面电流,在离散化后,将问题构建为一个线性系统,并求解出表面电流和散射场。

为了使计算可行,作者将线性系统对称化,并使用一个适合对称矩阵的最小残差求解器。
此外,使用自适应积分方法加速矩阵向量乘法,这是一种基于快速傅里叶变换的加速方法,最初用于雷达计算。
代码大部分使用了Cuda C++包进行加速。

接下来,展示了一些结果,说明其计算的BRDF与之前方法得出的BRDF的比较。

[Yan 2018] 使用标量场近似的BRDF模型,这些模型只考虑一次折射。
[Xia 2023] 这篇使用矢量场量但也只考虑一次折射。
最精确的方法还得是咱们的。不仅使用矢量场量(vector field quantities),而且考虑了所有次序的反射(reflections of all orders)。

上图每个入射方向对应五种BRDF,分别代表不同的计算方法。
表面相对平滑的材料,表面上覆盖了一些各向同性的凸起(a bunch of isotropic bombs)。
第一行显示的是法线入射(normal instance),反射模式基本上居中(reflection pattern is pretty much centered)。
第二行由于入射光方向从某个倾斜方向来,模式向左偏移。
由于表面不太粗糙,五种方法的结果非常相似。

另一种材质呢,有一些棱棱角角(corner cubes)。每个corner cubes的三个面会让光多次反射,使反射光沿入射方向返回。叫做逆向反射(retroreflection)。
咱们的模拟器也可以模拟这种现象。左边四种方法都败下阵来。
原因在于如果只考虑一次反射,当光线击中corner cubes的一个面后,会被预测为向下进入下半球。

最后的例子是一个表面覆盖了一些球形坑。
由于坑边缘的高坡度(high slopes of the surface at the edges of the pits),导致多次反射的出现。
不同的方法看到明显差异。
可以看到预测的额外反射峰(extra lobe predicting)。(中间偏右那个部分)
另外整体更亮了。
这些差异源于不同次序反射间的干涉效果(interference between reflections of different orders)。

最后,简单介绍高效计算非常多的密集采样方向的BRDF的技术。

如果需要模拟的表面很大,速度就会很慢,并需要大量的GPU内存。
但是计算是线性的,可以将大面积表面分解为多个较小的子区域。
每个子区域上投射入射场,首先执行较小的子区域模拟,然后将散射场整合,得出整个大面积表面的BRDF。
对不同子区域的散射场应用不同的复数值缩放因子(different complex value scale factors),就可以综合出对应不同入射方向的大面积表面的BRDF。

这是因为对每个子区域的局部入射场,应用适当的相移会在表面上产生具有不同净方向的总入射场。在这张图中,入射场垂直传播。如果将五个焦点在不同空间位置的相同场叠加,得到一个空间上更宽的场,仍沿垂直方向传播。如果线性组合这些场,并对每个子区域的场应用适当的复数值缩放因子,整体场可以以略微倾斜的方向传播。
这里解释一下为啥复数缩放因子(different complex value scale factors)可以产生不同的入射方向。
这三张图代表光波的波前。即波峰。可以理解为光在传播中的波形截面。
上方的图,垂直地射向表面,入射场分布集中在中心。光场集中在中心,沿垂直方向传播(即中间的黄线方向)。
左下方,多个相同入射场的叠加效果,但叠加时相位保持一致(即没有相位差)。多个入射场相加,使得整个场在空间上分布更宽了,但传播方向还是保持垂直。
右下方,多个入射场的叠加效果,但是在叠加时加入了相位差。相当于“偏移”了入射场的方向。呈现出一个倾斜方向。

演示中,两个视频展示了BRDF模式的移动。(我懒得截GIF了)

最后是大佬比心合影。
我的第一篇文章已经粗略介绍了这项工作的内容和成果,接下来直接进入理论推导(Section3-5)。
整体方法从一个表面模型开始,表面由高度场及其材料属性(如复折射率)描述,并指定一个目标点。
为了计算给定入射方向的BRDF,定义了一个入射场,该场从特定方向传播至目标点。
这个入射场作为输入,通过表面散射模拟进行处理,从而求解出相应的散射电磁场。
在本节(FULL-WAVE SIMULATION)中,将重点介绍BEM在应用场景中的原理。下一节会讲解如何高效实现BEM算法,最后一节会介绍如何结合多个模拟结果,以合成在入射和散射方向上密集采样的BRDF。
开局先来一张符号表吓一吓你。

边界元法(BEM)主要解决单一频率的散射问题,即特定频率的电磁波(包括电场和磁场)如何在不同介质的边界上反射和散射。这里的边界将空间分成了两个均匀区域,两个区域的材料特性(入射场所处的介质参数)用( $\epsilon_1, \mu_1$ )和( $\epsilon_2, \mu_2$ )表示。其中, $\epsilon$ 代表介电常数(介电率),$\mu$ 代表磁导率(磁导系数)。
在这种方法中,我们处理的是复数值场量,这些场量既包含振幅信息,也包含相位信息(即波的传播状态)。为了简化公式,我们假设所有波都是“时间谐和”的——也就是波随时间按照特定的周期变化。在整个文中, $e^{j\omega t}$ 项被省略,以简化表述。
首先,麦克斯韦方程描述了电场(E)和磁场(H)是如何相互影响的,决定了光波如何在不同材料之间传播和散射。为了化简,这里用“时间谐和”的形式:
$$ \begin{align} \nabla \times \mathbf{E} &= -\mathbf{M} – j \omega \mu \mathbf{H} \\ \nabla \times \mathbf{H} &= \mathbf{J} + j \omega \epsilon \mathbf{E} \tag{1} \end{align} $$
等号左边描述电场和磁场在空间中的“旋转”程度。 $M$ 和 $J$ 是表面电流密度(假想的电流),分别表示磁流和电流的密度(electric and magnetic current densities)。这个公式可以理解为,电场在边界附近“旋转”时,产生磁流和磁场的变化;磁场的旋转也会产生电场和电流的变化。

边界元法的核心思想是:在边界上引入表面电流,用这些电流来间接描述场的分布,而不需要计算每个区域中的所有点。三维问题化简为边界上的二维问题。
表面上的假想电流(电磁波的“源”)是如何产生散射的电磁场(“场”)的呢?
如Fig2.所示,在区域 $R_1$ ,总场(入射场和散射场)分别表示为 $E_1$ 和 $H_1$ ;
$$ \begin{align} &\mathbf{E}_1 = \mathbf{E}_i + \mathbf{E}_s \\ &\mathbf{H}_1 = \mathbf{H}_i + \mathbf{H}_s \tag{2} \end{align} $$
在区域 $R_2$ ,总场表示为 $E_2$ 和 $H_2$ 。上方的散射场由上方的电磁流产生;下面的散射场由下方的电磁流产生。
在均匀介质中,麦克斯韦方程组可以写成积分的形式,描述电场和磁场的生成方式。
\begin{align} \mathbf{E}(\mathbf{r}) &= -j \omega \mu (\mathcal{L} \mathbf{J})(\mathbf{r}) – (\mathcal{K} \mathbf{M})(\mathbf{r}) \\ \mathbf{H}(\mathbf{r}) &= -j \omega \epsilon (\mathcal{L} \mathbf{M})(\mathbf{r}) + (\mathcal{K} \mathbf{J})(\mathbf{r}) \tag{3} \end{align}
等号左边分别表示电磁场在 $r$ 处的电磁场强度,即描述的是场的“作用效果”。 $\mathcal{L}$ 和 $\mathcal{K}$ 是积分算子,表示场如何从表面电流和磁化强度产生。这两个算子定义为:
$$ \begin{aligned} & (\mathcal{L} \mathbf{X})(\mathbf{r})=\left[1+\frac{1}{k^2} \nabla \nabla \cdot\right] \int_V G\left(\mathbf{r}, \mathbf{r}^{\prime}\right) \mathbf{X}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} \\ & (\mathcal{K} \mathbf{X})(\mathbf{r})=\nabla \times \int_V G\left(\mathbf{r}, \mathbf{r}^{\prime}\right) \mathbf{X}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} \end{aligned} \tag{4} $$
$G(r, r{\prime})$ 是用于标量亥姆霍兹方程的三维格林函数,定义为:
$$
G(\mathbf{r}, \mathbf{r}^{\prime}) = \frac{e^{-jkr}}{4 \pi r} \quad \text{where } r = |\mathbf{r} – \mathbf{r}^{\prime}|
\tag{5}
$$
这个函数把散射表面的源场转换为散射区域内电磁场的分布。
本论文这里和[Xia 2023]中的公式(11)其实是一样的,但本论文将格林函数隐含在算子中,且积分域更为广泛。本质上都是描述如何从电流密度 $\mathbf{J}$ 和磁流密度 $\mathbf{M}$ 生成散射电场 $E(r)$。
求解麦克斯韦方程时,通过格林函数来整合各处的源(如电流、电荷)对空间中电磁场的影响。假设电磁场以 $e^{j\omega t}$ 的形式随时间变化(单频),就可以得到类似于亥姆霍兹方程的形式:$(\nabla^2 + k^2) \mathbf{E} = -j \omega \mu \mathbf{J}$ ,实际上这是一种“频域”形式的麦克斯韦方程。引入格林函数建立一种源-场关系,即将电流 $\mathbf{J}$ 和电荷 $\rho$ 作为“源”来计算电磁场 $\mathbf{E}$ 和 $\mathbf{H}$ 的分布。那么格林函数是满足如下方程的:$(\nabla^2 + k^2) G(\mathbf{r}, \mathbf{r}{\prime}) = -\delta(\mathbf{r} – \mathbf{r}{\prime})$ ,$\delta$ 是狄拉克δ函数,表示“点源”在空间中产生的标准波形,描述的是在空间中由一个“点源”激发的波场。通过格林函数,可以表达任意电流分布 $\mathbf{J}$ 在空间中对场点 $\mathbf{r}$ 产生的影响了!接着,每个源点上的“电流”或“电荷”都通过格林函数扩散到整个空间,对每一个场点产生累积影响。$\mathbf{E}(\mathbf{r}) = \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{J}(\mathbf{r}{\prime}) d \mathbf{r}{\prime}$ 这公式就是电场表示为源电流的积分叠加。最后,结合麦克斯韦方程组的积分形式和格林函数的思想。比如电场的积分形式可以表示为:$\mathbf{E}(\mathbf{r}) = -j \omega \mu \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{J}(\mathbf{r}{\prime}) d \mathbf{r}{\prime} – \nabla \times \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{M}(\mathbf{r}{\prime}) d \mathbf{r}{\prime}$ ,通过卷积可以获得每个源点上的微小电流分布对场点的累积影响,这是通过格林函数的积分在空间中传播和叠加的结果。格林函数作为卷积核,将空间中各点的电流分布通过积分传播到目标场点,实现了空间中各源点电流对整个场的累积影响。
介质区域 $R_1$ 和 $R_2$ 内的电场就分别表示为公式(6)(7),包含了两个算子。
在区域 $R_2$ 内:
$$ \begin{align} & \mathbf{E}_1(\mathbf{r}) = -j \omega \mu_1 (\mathcal{L}_1 \mathbf{J}_1)(\mathbf{r}) – (\mathcal{K}_1 \mathbf{M}_1)(\mathbf{r}) \\ & \mathbf{H}_1(\mathbf{r}) = -j \omega \epsilon_1 (\mathcal{L}_1 \mathbf{M}_1)(\mathbf{r}) + (\mathcal{K}_1 \mathbf{J}_1)(\mathbf{r}) \end{align} \tag{6} $$
在区域 $R_2$ 内:
\begin{align} \mathbf{E}_2(\mathbf{r}) &= -j \omega \mu_2 (\mathcal{L}_2 \mathbf{J}_2)(\mathbf{r}) – (\mathcal{K}_2 \mathbf{M}_2)(\mathbf{r}) \\ \mathbf{H}_2(\mathbf{r}) &= -j \omega \epsilon_2 (\mathcal{L}_2 \mathbf{M}_2)(\mathbf{r}) + (\mathcal{K}_2 \mathbf{J}_2)(\mathbf{r}) \tag{7} \end{align}
这样就得到了在不同介质区域中电场和磁场的表现形式。
总结一下,这一小节通过假想的表面电流产生散射电磁场,将麦克斯韦方程组转化为积分表达,格林函数将电流和电荷分布转化为电磁场的积分叠加,展示了源-场关系的具体实现方式。最后给出了区域 $R_1$ 和 $R_2$ 内电场和磁场的表达式,展示了不同介质参数对场的影响。
当电磁波在两种不同介质的边界传播时,会发生反射和折射。此时波的能量不可能凭空消失,而是在界面上平滑过渡的。如果电场或磁场在边界上不连续,就会出现不符合实际的能量跃变(即能量突然消失或增加),这违反了能量守恒。
具体可以搜索:「Interface conditions for electromagnetic fields」。
因此,必须在介质边界上满足一定的边界条件,以确保电磁场的连续性和能量守恒。具体而言,当电磁波在两种不同介质的界面上传播时,电场和磁场的切向分量(tangential component)需要在边界上保持连续性:
$$
\begin{aligned}
& \mathbf{n} \times (\mathbf{E}_1 – \mathbf{E}_2) = 0 \\
& \mathbf{n} \times (\mathbf{H}_1 – \mathbf{H}_2) = 0
\end{aligned}
\tag{8}
$$
并且边界上的净电磁流密度为零,即边界两侧电磁流密度方向相反大小相等。
$$
\begin{aligned}
& \mathbf{J} = \mathbf{J}_1 = -\mathbf{J}_2 \\
& \mathbf{M} = \mathbf{M}_1 = -\mathbf{M}_2
\end{aligned}
\tag{9}
$$
这两个条件同时满足,才不会破坏物理守恒。
结合上面公式 (6)、(7)、(8) 和 (9),得到关于电场和磁场的积分方程,称之为 PMCHWT(Poggio-Miller-Chang-Harrington-Wu-Tsai)方程:
$$
\begin{aligned}
& {\left[j \omega \mu_1\left(\mathcal{L}1 \mathbf{J}\right)(\mathbf{r})+j \omega \mu_2\left(\mathcal{L}_2 \mathbf{J}\right)(\mathbf{r})+\left(\mathcal{K}_1 \mathbf{M}\right)(\mathbf{r})+\right.}\left.\left(\mathcal{K}_2 \mathbf{M}\right)(\mathbf{r})\right]{\tan } \\
&=\left[\mathbf{E}i(\mathbf{r})\right]{\tan } \\
& {\left[\left(\mathcal{K}1 \mathbf{J}\right)(\mathbf{r})+\left(\mathcal{K}_2 \mathbf{J}\right)(\mathbf{r})-j \omega \varepsilon_1\left(\mathcal{L}_1 \mathbf{M}\right)(\mathbf{r})-j \omega \varepsilon_2\left(\mathcal{L}_2 \mathbf{M}\right)(\mathbf{r})\right]{\tan } } \\
&=-\left[\mathbf{H}i(\mathbf{r})\right]{\tan }
\end{aligned}
\tag{10}
$$
这两个方程分别还有个名字:
总的来说,这是一种边界积分方程,专门用来求介电物体引起的电磁散射问题。有了这个PMCHWT方程,就可以准确计算电磁场的分布了。
这一节,需要通过上面的PMCHWT方程计算物体表面上的“电流”和“磁流”分布,这些分布决定了电磁波碰到物体后会怎么“反射”或者“折射”。
求解表面电流密度 $\mathbf{J}$ 和磁流密度 $\mathbf{M}$ 是通过将边界元离散化。对于离散单元定义一个基函数 $f_m(\mathbf{r})$ ,用基函数展开法表示电流密度和磁流密度分布。
$$
\mathbf{J}(\mathbf{r}) = \sum_{m=1}^{N} I_{J_m} f_m(\mathbf{r}); \quad \mathbf{M}(\mathbf{r}) = \sum_{n=1}^{N} I_{M_n} f_n(\mathbf{r})
\tag{11}
$$
N 是基函数的总数;$ I_{J_m}$ 和 $I_{M_n}$ 是对应基函数的未知系数,代表了每个单元上的电流和磁流强度。
通过这种基函数展开,连续的表面电流密度和磁流密度被分解成一系列基函数的线性组合。
为了求解对应基函数的未知系数,将电场积分方程 (EFIE) 和磁场积分方程 (MFIE) 转化为一个线性方程组。具体使用伽辽金法(Galerkin Method)完成。这个方法基本思想是,将积分方程作用在每个基函数上,加权平均使得积分方程在每个基函数的投影方向上都成立。该方法简单的说就是离散化、找基底、算系数。一个高维的线性方程组可以用线性代数方法简化。
这样可以将原本连续形式的PMCHWT方程的EFIE部分转换为有限个线性方程,把问题转化为解如下矩阵方程。
$$
\begin{bmatrix} A_{EJ} & A_{EM} \ A_{HJ} & A_{HM} \end{bmatrix} \begin{bmatrix} I_J \ I_M \end{bmatrix} = \begin{bmatrix} V_E \ V_H \end{bmatrix}
\tag{12}
$$
其中
$$
A_{\mathrm{EJ}}^{m n} =\int_S \mathbf{f}_m(\mathbf{r}) \cdot\left[j \omega \mu_1\left(\mathcal{L}_1 \mathbf{f}_n\right)(\mathbf{r})+j \omega \mu_2\left(\mathcal{L}_2 \mathbf{f}_n\right)(\mathbf{r})\right] d \mathbf{r} \tag{13}
$$
$$
A_{\mathrm{EM}}^{m n} =\int_S \mathbf{f}_m(\mathbf{r}) \cdot\left[\left(\mathcal{K}_1 \mathbf{f}_n\right)(\mathbf{r})+\left(\mathcal{K}_2 \mathbf{f}_n\right)(\mathbf{r})\right] d \mathbf{r} \tag{14}
$$
$$
A_{\mathrm{HJ}}^{m n} =\int_S \mathbf{f}_m(\mathbf{r}) \cdot\left[\left(\mathcal{K}_1 \mathbf{f}_n\right)(\mathbf{r})+\left(\mathcal{K}_2 \mathbf{f}_n\right)(\mathbf{r})\right] d \mathbf{r} \tag{15}
$$
$$
A_{\mathrm{HM}}^{m n} =-\int_S \mathbf{f}_m(\mathbf{r}) \cdot\left[j \omega \varepsilon_1\left(\mathcal{L}_1 \mathbf{f}_n\right)(\mathbf{r})+j \omega \varepsilon_2\left(\mathcal{L}_2 \mathbf{f}_n\right)(\mathbf{r})\right] d \mathbf{r} \tag{16}
$$
和
$$
V_{\mathrm{E}}^m =\int_S \mathbf{f}_m(\mathbf{r}) \cdot \mathbf{E}_i(\mathbf{r}) d \mathbf{r}\tag{17}
$$
$$
V_{\mathrm{H}}^m =-\int_S \mathbf{f}_m(\mathbf{r}) \cdot \mathbf{H}_i(\mathbf{r}) d \mathbf{r}\tag{18}
$$
公式(12)中,需要求出 $I_J$ 和 $I_M$ 。
不严谨地讲,公式(13)-(16)分别表示每一小块的电流密度对产生电场的贡献、每个小块的磁流密度对产生电场的贡献、每个小块的电流密度对产生磁场的贡献和每个小块的磁流密度对产生磁场的贡献。公式(17)(18)分别表示外界入射电场对这个小块电流的“推动力”和外界入射磁场对这个小块磁流的“推动力”。强调一下矩阵里面的元素,比如 $A_{EJ}^{mn}$ ,这其实是一个二重积分。由于对源点 $\mathbf{r}{\prime}$ 的积分已经在 $\mathcal{L}_1$ 和 $\mathcal{L}_2$ 中完成了,因此导致原paper看起来是个一重积分。
虽然原论文没有写,但是建议聪明的读者自己推导一下。尝试根据上文提到的公式(4)把公式(13)展开。我这里尝试推导了一下,有错误请指正。首先把两个算子代入,注意这里梯度算子的位置:
$$
\begin{aligned}
A_{\mathrm{EJ}}^{mn} &= j \omega \mu_1 \int_S \mathbf{f}_m(\mathbf{r}) \cdot \left\{ \int_V G_1(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} + \frac{1}{k_1^2} \nabla \left[ \nabla \cdot \int_V G_1(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} \right] \right\} d\mathbf{r} \\
&\quad + j \omega \mu_2 \int_S \mathbf{f}_m(\mathbf{r}) \cdot \left\{ \int_V G_2(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} + \frac{1}{k_2^2} \nabla \left[ \nabla \cdot \int_V G_2(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} \right] \right\} d\mathbf{r}
\end{aligned}
$$
先考虑其中一个梯度项:
$$
\int_S \mathbf{f}_m(\mathbf{r}) \cdot \nabla \left[ \nabla \cdot \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} \right] d\mathbf{r}
$$
用向量分布积分展开:
$$
\int_S \mathbf{f}m \cdot \nabla B \, d r = -\int_S B (\nabla \cdot \mathbf{f}_m) \, dr + \int{\partial S} B (\mathbf{A} \cdot \mathbf{n}) \, dr
$$
其中,散度项 $B$ :
$$
B = \nabla \cdot \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime}
$$
但是很抱歉,这里是物理。在边界条件下,边界项直接简化为零,得到:
$$
\int_S \mathbf{f}_m \cdot \nabla B \, dS = -\int_S B (\nabla \cdot \mathbf{f}_m) \, dS
$$
对于散度项 $B$ ,可以直接展开散度:
$$
B = \nabla \cdot \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} = \int_V (\nabla \cdot G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime})) d\mathbf{r}{\prime}
$$
一个是标量函数,一个是矩阵函数,因此根据散度的乘积法则:
$$
\nabla \cdot (G \mathbf{f}_n) = (\nabla G) \cdot \mathbf{f}_n + G (\nabla \cdot \mathbf{f}_n)
$$
但是很抱歉,这里是物理。由于基函数满足无散度条件,因此这里直接简化:
$$
\nabla \cdot (G \mathbf{f}_n) = (\nabla G) \cdot \mathbf{f}_n
$$
同时我们注意到格林函数的对称性 $\nabla G(\mathbf{r}, \mathbf{r}{\prime}) = -\nabla{\prime} G(\mathbf{r}, \mathbf{r}{\prime})$ ,于是有:
$$
B = \nabla \cdot \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} = -\int_V \nabla{\prime} G(\mathbf{r}, \mathbf{r}{\prime}) \cdot \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime}
$$
对这一项也进行分布积分:
$$
\int_V \nabla{\prime} G(\mathbf{r}, \mathbf{r}{\prime}) \cdot \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} = \int_V \nabla{\prime} \cdot (G \mathbf{f}_n) d\mathbf{r}{\prime} – \int_V G (\nabla{\prime} \cdot \mathbf{f}_n) d\mathbf{r}{\prime}
$$
但是很抱歉,这里是物理。边界项再次化简:
$$
\int_V \nabla{\prime} G(\mathbf{r}, \mathbf{r}{\prime}) \cdot \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} = -\int_V G(\mathbf{r}, \mathbf{r}{\prime}) (\nabla{\prime} \cdot \mathbf{f}_n(\mathbf{r}{\prime})) d\mathbf{r}{\prime}
$$
最终得到:
$$
B = \nabla \cdot \int_V G(\mathbf{r}, \mathbf{r}{\prime}) \mathbf{f}_n(\mathbf{r}{\prime}) d\mathbf{r}{\prime} = \int_V G(\mathbf{r}, \mathbf{r}{\prime}) (\nabla{\prime} \cdot \mathbf{f}_n(\mathbf{r}{\prime})) d\mathbf{r}{\prime}
$$
波数 $k_i$ 于介质参数的关系:
$$
k_i^2 = \omega^2 \mu_i \varepsilon_i \quad \Rightarrow \quad \frac{1}{k_i^2} = \frac{1}{\omega^2 \mu_i \varepsilon_i}
$$
另一个梯度项也是同理,最后得到最终的表达式 $A_{\mathrm{EJ}}^{mn}$ :
$$
\begin{aligned} A_{\mathrm{EJ}}^{mn} &= j \omega \mu_1 \int_S \int_{V_1} \mathbf{f}m(\mathbf{r}) \cdot \mathbf{f}n(\mathbf{r}{\prime}) G_1(\mathbf{r}, \mathbf{r}{\prime}) d\mathbf{r}{\prime} d\mathbf{r} \\ &\quad – \frac{j}{\omega \varepsilon_1} \int_S \int{V_1} (\nabla \cdot \mathbf{f}m(\mathbf{r})) G_1(\mathbf{r}, \mathbf{r}{\prime}) (\nabla{\prime} \cdot \mathbf{f}n(\mathbf{r}{\prime})) d\mathbf{r}{\prime} d\mathbf{r} \\ &\quad + j \omega \mu_2 \int_S \int{V_2} \mathbf{f}m(\mathbf{r}) \cdot \mathbf{f}n(\mathbf{r}{\prime}) G_2(\mathbf{r}, \mathbf{r}{\prime}) d\mathbf{r}{\prime} d\mathbf{r} \\ &\quad – \frac{j}{\omega \varepsilon_2} \int_S \int{V_2} (\nabla \cdot \mathbf{f}_m(\mathbf{r})) G_2(\mathbf{r}, \mathbf{r}{\prime}) (\nabla{\prime} \cdot \mathbf{f}_n(\mathbf{r}{\prime})) d\mathbf{r}{\prime} d\mathbf{r} \end{aligned}
$$
同样的操作,得到剩下的矩阵元素,这里直接抄论文附加材料的内容了:
$$
\begin{aligned} A_{\mathrm{EM}}^{m n}= & A_{\mathrm{HJ}}^{m n}=\int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_m(\mathbf{r}) \cdot\left[\nabla G_1\left(\mathbf{r}, \mathbf{r}^{\prime}\right) \times \mathbf{f}_n\left(\mathbf{r}^{\prime}\right)\right] d \mathbf{r}^{\prime} d \mathbf{r} \\ & +\int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_m(\mathbf{r}) \cdot\left[\nabla G_2\left(\mathbf{r}, \mathbf{r}^{\prime}\right) \times \mathbf{f}_n\left(\mathbf{r}^{\prime}\right)\right] d \mathbf{r}^{\prime} d \mathbf{r} \\ A_{\mathrm{HM}}^{m n} & =-j \omega \varepsilon_1 \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_m(\mathbf{r}) \cdot \mathbf{f}_n\left(\mathbf{r}^{\prime}\right) G_1\left(\mathbf{r}, \mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & +\frac{j}{\omega \mu_1} \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \nabla \cdot \mathbf{f}_m(\mathbf{r}) G_1\left(\mathbf{r}, \mathbf{r}^{\prime}\right) \nabla^{\prime} \cdot \mathbf{f}_n\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & -j \omega \varepsilon_2 \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_m(\mathbf{r}) \cdot \mathbf{f}_n\left(\mathbf{r}^{\prime}\right) G_2\left(\mathbf{r}, \mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & +\frac{j}{\omega \mu_2} \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \nabla \cdot \mathbf{f}_m(\mathbf{r}) G_2\left(\mathbf{r}, \mathbf{r}^{\prime}\right) \nabla^{\prime} \cdot \mathbf{f}_n\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r}\end{aligned}
$$
得到矩阵的每一个元素之后,引入平移不变函数(Shift-invariant Functions)。帮助得到在不同坐标系下表示格林函数及其梯度。
$$
\begin{aligned}
& g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right)=G_i\left(\mathbf{r}, \mathbf{r}^{\prime}\right)=\frac{e^{-j k_i r}}{4 \pi r} \\
& g_{2, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right)=\hat{\mathbf{x}} \cdot \nabla G_i\left(\mathbf{r}, \mathbf{r}^{\prime}\right)=-\left(x-x^{\prime}\right)\left(\frac{1+j k_i r}{4 \pi r^3}\right) e^{-j k_i r} \\
& g_{3, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right)=\hat{\mathbf{y}} \cdot \nabla G_i\left(\mathbf{r}, \mathbf{r}^{\prime}\right)=-\left(y-y^{\prime}\right)\left(\frac{1+j k_i r}{4 \pi r^3}\right) e^{-j k_i r} \\
& g_{4, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right)=\hat{\mathbf{z}} \cdot \nabla G_i\left(\mathbf{r}, \mathbf{r}^{\prime}\right)=-\left(z-z^{\prime}\right)\left(\frac{1+j k_i r}{4 \pi r^3}\right) e^{-j k_i r} \quad \text { where } r=\left|\mathbf{r}-\mathbf{r}^{\prime}\right|
\end{aligned}
$$
然后将矩阵元素展开为基函数的不同分量的组合,分量作用在平移不变函数上。最终矩阵的所有元素,都有如下形式。这样的形式可以加速边界元矩阵的构造和求解。
$$
\int_{\mathbf{f}m} \int{\mathbf{f}_n} \psi_m(\mathbf{r}) g\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \xi_n\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r}
$$
最终得到:
Here, $x, y, z, x^{\prime}, y^{\prime}, z^{\prime}$ are the Cartesian components of $\mathbf{r}, \mathbf{r}^{\prime}$. Now we have for $i=1,2$ :
$$ \begin{aligned} A_{\mathrm{EJ}, i}^{m n} &= j \omega \mu_i \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_{m x}(\mathbf{r}) \, g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \, \mathbf{f}_{n x}\left(\mathbf{r}^{\prime}\right) \, d \mathbf{r}^{\prime} \, d \mathbf{r} \\ & \quad + j \omega \mu_i \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_{m y}(\mathbf{r}) \, g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \, \mathbf{f}_{n y}\left(\mathbf{r}^{\prime}\right) \, d \mathbf{r}^{\prime} \, d \mathbf{r} \\ & \quad + j \omega \mu_i \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \mathbf{f}_{m z}(\mathbf{r}) \, g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \, \mathbf{f}_{n z}\left(\mathbf{r}^{\prime}\right) \, d \mathbf{r}^{\prime} \, d \mathbf{r} \\ & \quad – \frac{j}{\omega \varepsilon_i} \int_{\mathbf{f}_m} \int_{\mathbf{f}_n} \nabla \cdot \mathbf{f}_m(\mathbf{r}) \, g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \, \nabla^{\prime} \cdot \mathbf{f}_n\left(\mathbf{r}^{\prime}\right) \, d \mathbf{r}^{\prime} \, d \mathbf{r} \end{aligned} \tag{S.18} $$
where $\mathbf{f}{m x}, \mathbf{f}{m y}, \mathbf{f}_{m z}$ are the $x, y, z$ components of the vector basis function $\mathbf{f}_m$ . Similarly, we have:
$$ \begin{aligned} & A_{\mathrm{EM}, i}^{m n}=A_{\mathrm{HJ}, i}^{m n}=\int_{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m z}(\mathbf{r}) g_{2, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n y}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & -\int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m y}(\mathbf{r}) g_{2, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n z}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & +\int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m x}(\mathbf{r}) g_{3, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n z}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & -\int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m z}(\mathbf{r}) g_{3, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n x}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & +\int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m y}(\mathbf{r}) g_{4, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n x}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & -\int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m x}(\mathbf{r}) g_{4, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}_{n y}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \end{aligned} \tag{S.19} $$
Lastly, we also have:
$$ \begin{aligned} A_{\mathrm{HM}, i}^{m n} & =-j \omega \varepsilon_i \int_{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m x}(\mathbf{r}) g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n x}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & -j \omega \varepsilon_i \int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m y}(\mathbf{r}) g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n y}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & -j \omega \varepsilon_i \int{\mathbf{f}m} \int{\mathbf{f}n} \mathbf{f}{m z}(\mathbf{r}) g_{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \mathbf{f}{n z}\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \\ & +\frac{j}{\omega \mu_i} \int{\mathbf{f}m} \int{\mathbf{f}n} \nabla \cdot \mathbf{f}_m(\mathbf{r}) g{1, i}\left(\mathbf{r}-\mathbf{r}^{\prime}\right) \nabla^{\prime} \cdot \mathbf{f}_n\left(\mathbf{r}^{\prime}\right) d \mathbf{r}^{\prime} d \mathbf{r} \end{aligned} \tag{S.20} $$
这部分代码在MVProd类中,看不懂也没问题,因为上面都是我瞎写瞎抄的,已经超出图形学的研究范畴了。
另外作者还讨论了EFIE和MFIE的对称性。正是这种对称性使得计算效率和空间利用率更低。注意到:
$$
A_{EJ} = A_{EJ}^T, \quad A_{HM} = A_{HM}^T \tag{19}
$$
$$
A_{EM} = A_{EM}^T, \quad A_{HJ} = A_{HJ}^T, \quad A_{EM} = A_{HJ}\tag{20}
$$
由于矩阵是对称的,我们不需要计算所有的矩阵元素,也不用存储所有矩阵元素。
在解出表面电流密度后,可以再使用公式(6)来计算从散射表面向外传播的散射场。
在模拟电磁波与粗糙表面之间的相互作用时,表面的不规则几何结构会对散射特性造成显著影响。作者对粗糙表面离散化,将连续的表面划分为多个单元,每个单元都可以应用PMCHWT方程做数值计算的方法。
将粗糙表面表示为一个二维的高度场(height field),然后将该高度场进行离散化处理,划分为多个矩形单元。
每次模拟只考虑尺寸为 $$L_x \times L_y$$ 的表面样本。并且选择一个步进 $d$ 来定义离散化的网格。
$$
x_s = s \cdot d, \quad s = 0, 1, \ldots, N_x
\
y_t = t \cdot d, \quad t = 0, 1, \ldots, N_y
\tag{21}
$$
其中,$ N_x = L_x / d$ 和 $N_y = L_y / d$ ,分别表示在 $x$ 和 $y$ 方向上被划分成的单元数。在每个离散点 $(x_s, y_t)$ 都有一个高度场 $h(x_s, y_t)$ 函数。

作者总结了,粗糙表面的高度变化尺度非常小,通常只有几微米。也就是和可见光电磁波波长相当。
每个基元有四个角,每个角有不同的高度,并且每个角对电流磁流贡献都不同。因此在每个小方块上,都定义了四个基函数,近似表示每个小方块上的情况。
在大多数模拟中,步长 $d$ 选取为波长的 $\lambda / 16$ 左右,以确保精度。
每个基元由两个参数 u 和 v 参数化,范围均在 [-1, 1]。
基元的形状通过一个双线性函数 $\mathbf{r}(u, v)$ 来表示,其中 $(s, t)$ 表示当前基元的索引,且基元由四个顶点的坐标决定:
$$ \begin{aligned} \mathbf{r}(u, v) = &\frac{(1 – u)(1 – v)}{4} \mathbf{p}_{s-1, t-1} + \\ &\frac{(1 – u)(1 + v)}{4} \mathbf{p}_{s-1, t} + \\ &\frac{(1 + u)(1 – v)}{4} \mathbf{p}_{s, t-1} + \\ &\frac{(1 + u)(1 + v)}{4} \mathbf{p}_{s, t} \end{aligned} \tag{22} $$其中, $\mathbf{p}{s, t} = (x_s, y_t, z{s, t})$ 是基元的四个顶点坐标。
在每个矩形基元上定义四个基函数 $f_1(u, v), f_2(u, v), f_3(u, v), f_4(u, v)$ ,它们的形式为:
$$
\begin{aligned}
& f_1(u, v) = \frac{(1 – u)}{J(u, v)} \frac{\partial \mathbf{r}(u, v)}{\partial u}, \quad f_2(u, v) = \frac{(1 + u)}{J(u, v)} \frac{\partial \mathbf{r}(u, v)}{\partial u} \\
& f_3(u, v) = \frac{(1 – v)}{J(u, v)} \frac{\partial \mathbf{r}(u, v)}{\partial v}, \quad f_4(u, v) = \frac{(1 + v)}{J(u, v)} \frac{\partial \mathbf{r}(u, v)}{\partial v}
\end{aligned}
\tag{23}
$$
这里的 Jacobian $J(u, v)$ 表示如下:
$$
J(u, v) = \left| \frac{\partial \mathbf{r}(u, v)}{\partial u} \times \frac{\partial \mathbf{r}(u, v)}{\partial v} \right|
\tag{24}
$$
Jacobian 的引入用于转换坐标系并确保基函数在不同的 $u, v$ 方向上具有合适的比例关系。

由于不太了解光学,以下为个人理解。高斯光束是激光发射出去的时候,在行波场中间部分出现往内部凹陷的一种现象,换一句话说高斯光束是描述光在横截面上的能量分布。而平面波和球面波的重点是描述能量传播的方向。在传播过程中,高斯光束的波前形状近似为球面波。
Gouy 相位(Gouy phase)是高斯光束传播中的一种相位延迟效应,光束通过焦点后相位会额外增加。另一方面,高斯光束满足麦克斯韦方程组在傍轴条件下的一个解,可以近似为非均匀的球面波。感觉目前也不用太深入研究。
有关高斯光束的资料:

回到原论文,高斯光束好处在于可以控制入射场的大小,进而能够控制一个稍微比照射区域大的区域的表面感应电流密度是非零数值。

高斯光束是一种电磁波,其振幅在垂直于传播方向的平面上呈二维高斯分布[Paschotta 2008],它的能量主要集中在光束中心附近。看上方图(a),高斯光束可以用焦平面 $P$ 、中心点 $o$ 、和光束腰径(beam waist) $w$ 来描述。场强随位置的衰减关系为 $e^{-r^2 / w^2}$ ,当距离中心超过 $2.5w$ 时,场强衰减至极小,可认为几乎为零。

虽然但是,高斯光束也具有一定的发散性。发散角 $\theta$ 近似与波长 $\lambda$ 成正比,与光束腰径 $w$ 成反比。公式:
$$
\theta = \frac{\lambda}{\pi \eta w} \tag{25}
$$
当光束斜着射入表面时,高斯光束在焦平面上有一个椭圆形的横截面。如下图所示。在两个垂直方向上有不同的腰斑尺寸(beam waist):一个平行于入射方向和表面法线的平面,另一个与之垂直。

为了保证不同方向上的高斯光束在表面上的照射区域相同,这里引入了两个横向方向的束腰宽度:
$$
w_1 = w, \quad w_2 = w \cos \theta_i\tag{26}
$$
即使在不同入射角度下,表面上的照射面积保持一致。这对推导BRDF而言非常重要。

但是如果按上面的方法硬算,是不可能会有结果的。因此需要一些加速手段。
想要直接计算上面公式(12)的方程组,计算量是不可接受的。
$$ \begin{bmatrix} A_{EJ} & A_{EM} \ A_{HJ} & A_{HM} \end{bmatrix} \begin{bmatrix} I_J \ I_M \end{bmatrix} = \begin{bmatrix} V_E \ V_H \end{bmatrix} \tag{12} $$
按照原本的思路,用 $N$ 个基函数来表示电流磁流密度,矩阵的规模就是 $2N \times 2N$ 。如果直接求解矩阵(LU分解,Cholesky分解等),总复杂度可能在 $\mathcal{O}(N^3)$ 。就算用共轭梯度法总复杂度也在 $\mathcal{O}(N^2)$ 。在一些小规模的仿真中,基函数的规模大概在 $960*960$ ,存储需求大概就在 29.4GB 。用了Adaptive Integral Method, AIM,按8字节来算总存储需求约在 76.8 MB。究竟是什么方法这么神奇呢?小编接下来就带大家一起看看吧!
AIM最初是由Bleszynski等人[1996]提出的。AIM的核心思想是将每个基函数的作用近似为一组点源的作用,避免直接计算每一对基函数之间的精确相互作用,同时通过FFT将各基函数的影响传播开来,提升计算效率。
AIM中矩阵元素的计算方式是对矩阵元素的某些项的线性组合来近似计算。这就是为什么在上面公式(13)-(16)后面让读者们进一步推导,推导最终的结果使其符合AIM的形式。
$$
\int_{f_m} \int_{f_n} \psi_m(r) g(r – r{\prime}) \xi_n(r{\prime}) \, dr{\prime} \, dr
\tag{27}
$$
AIM首先会在包含电磁场和场源的空间内创建一个全局3D笛卡尔网格,如下图(6)所示。

为了进一步化简公式(27),AIM算法会让原本的基函数近似为在这个三维笛卡尔坐标上一组网格点上的点源。说白了就是连续变离散,并且方便后续FFT。
$$ \psi_m(r) \approx \tilde{\psi}m(r) := \sum{p \in S_m} \Lambda_{mp} \delta^3(r – p) \\ \xi_n(r{\prime}) \approx \tilde{\xi}n(r{\prime}) := \sum{q \in S_n} \Lambda{\prime}_{nq} \delta^3(r{\prime} – q) \tag{28} $$
将公式(27)代入公式(28),换句话说,就是将双重积分的形式转化为了一个双重求和的形式。
$$
\sum{p \in S_m} \sum_{q \in S_n} \Lambda_{mp} g(p – q) \Lambda{\prime}_{nq}
\tag{29}
$$
方法详细参考:
Kai Yang and Ali E Yilmaz. 2011. Comparison of precorrected FFT/adaptive integral method matching schemes. Microwave and Optical Technology Letters 53, 6 (2011), 1368–1372.
基于公式(29)定义一组基础近似(base approximation)矩阵 $B_{EJ}, B_{EM}, B_{HJ}, B_{HM}$ 作为近似,专门处理距离较远的基函数对。这些矩阵通过引入 $\Lambda$ 矩阵和卷积等操作化简计算。同时,对于距离较近($d_{near}$)的基函数对,再引入修正矩阵(Correction Matrices)来减少误差。 $C_{EJ}, C_{EM}, C_{HJ}, C_{HM}$ 是一种稀疏矩阵,定义如下:
$$ C_{\mathrm{X}}^{m n}=\left\{\begin{array}{ll} A_{\mathrm{X}}^{m n}-B_{\mathrm{X}}^{m n} & d_{m n} \leq d_{\text {near }} \\ 0 & \text { otherwise } \end{array} \quad \mathrm{X} \in\{\mathrm{EJ}, \mathrm{EM}, \mathrm{HJ}, \mathrm{HM}\}\right. \tag{30} $$
$A_X^{mn}$ 是原始矩阵的精确值,而 $B_X^{mn}$ 是基础矩阵的近似值。通过减去基础矩阵的近似值,得到一个较准确的修正项,用于补偿近距离基函数对的误差。
综上所述,AIM方法中每个矩阵的最终近似形式可以写成如下关系:
$$ \begin{aligned} A_{\mathrm{EJ}} \approx B_{\mathrm{EJ}}+C_{\mathrm{EJ}} ; & A_{\mathrm{EM}} \approx B_{\mathrm{EM}}+C_{\mathrm{EM}} ; \\ A_{\mathrm{HJ}} \approx B_{\mathrm{HJ}}+C_{\mathrm{HJ}} ; & A_{\mathrm{HM}} \approx B_{\mathrm{HM}}+C_{\mathrm{HM}} \end{aligned} $$
换句话说,原始矩阵可以通过基础矩阵和修正矩阵的组合来近似。
快速矩阵-向量乘法(Fast Matrix-Vector Multiplication)是AIM的核心。
由于上面得到的修正矩阵 $C$ 是稀疏矩阵, $C$ 只在近距离的基函数上有非零值,因此矩阵 $C$ 的乘法操作是很快的。
利用基础近似矩阵 $B$ 的卷积特性,计算了矩阵 $B$ 与向量的乘积。计算过程分为三步:
$$
y_1 = \Lambda_2^T x, \quad y_2 = G y_1, \quad y_3 = \Lambda_1 y_2
\tag{32}
$$
第一步把向量投影到一个稀疏矩阵网格上。
第二步也是核心步骤,把网格点的数据传播到整个网络,也就是计算每个点对其他点的影响。两个点比较接近,矩阵 $G$ 中的传播函数就大。通过FFT来做加速。
$$
y_2 = \mathcal{F}^{-1} { \mathcal{F}(g) \mathcal{F}(y_1) }
\tag{33}
$$
第三步骤将结果映射回原来的基函数空间。
在GPU上将AIM方法中的计算重点转移到快速傅里叶变换(FFT)和稀疏矩阵操作上。总结一下,目前将大型矩阵分为基础矩阵 $B$ 和修正矩阵 $C$ ,分别处理远距离和近距离的基函数对。

并且优化计算策略:
对于小规模仿真任务(例如 $12 \mu m \times 12 \mu m$), 必须事先计算并存储传播函数的傅里叶变换值(即矩阵 $G$ 的傅里叶变换)。在小规模任务中稀疏修正矩阵 C 占用的显存不到5GB,一张GPU就可以搞掂。
对于大规模仿真任务(例如 $24 \mu m \times 24 \mu m$),由于单个GPU的显存不足以存储所有数据,作者将计算任务分配到4个GPU上。在这个尺度的仿真上,基函数的个数会达到960 × 960个,存储所有修正矩阵的非零元素(包括行列索引和复数浮点数值)大约需要20GB显存。策略还是和小规模一样,每个GPU分配大约5GB内存来存储修正矩阵 $C$ 。
MINRES求解器在主机CPU上执行,而矩阵-向量乘积 $y = Ax$ 的计算在GPU上完成。但是不需要担心传输时间,这个向量大概只有30MB。
用FFT加速计算散射场。在远场区域上评估从表面散射的场最终求出表面BRDF。
在求解BEM后,得到了表面的电流密度 $\mathbf{J}$ 和磁流密度 $\mathbf{M}$ 。这些密度分布定义了表面上的电磁源,可以用来计算在远场区域上的散射场。公式很简单,随着距离衰弱同时还会具有一定的相位变化:
$$
\mathbf{E_s}(r) \approx \mathbf{E}(\hat{r}) \frac{e^{-jkr}}{r}; \quad \mathbf{H_s}(r) \approx \mathbf{H}(\hat{r}) \frac{e^{-jkr}}{r}
\tag{36}
$$
公式右边的 $\mathbf{E}(\hat{r})$ 和 $\mathbf{H}(\hat{r})$ 是在远场上特定方向 $\hat{r}$ 的振幅。在不同的方向上,散射场的强度可能不同。
$$
\begin{aligned}
F_1(\hat{\mathbf{r}})=\int_V J_x\left(\mathbf{r}^{\prime}\right) e^{j k \mathbf{r}^{\prime} \cdot \hat{\mathbf{r}}} d \mathbf{r}^{\prime} ; & F_2(\hat{\mathbf{r}})=\int_V J_y\left(\mathbf{r}^{\prime}\right) e^{j k \mathbf{r}^{\prime} \cdot \hat{\mathbf{r}}} d \mathbf{r}^{\prime} \\
F_3(\hat{\mathbf{r}})=\int_V J_z\left(\mathbf{r}^{\prime}\right) e^{j k \mathbf{r}^{\prime} \cdot \hat{\mathbf{r}}} d \mathbf{r}^{\prime} ; & F_4(\hat{\mathbf{r}})=\int_V M_x\left(\mathbf{r}^{\prime}\right) e^{j k \mathbf{r}^{\prime} \cdot \hat{\mathbf{r}}} d \mathbf{r}^{\prime} \\
F_5(\hat{\mathbf{r}})=\int_V M_y\left(\mathbf{r}^{\prime}\right) e^{j k \mathbf{r}^{\prime} \cdot \hat{\mathbf{r}}} d \mathbf{r}^{\prime} ; & F_6(\hat{\mathbf{r}})=\int_V M_z\left(\mathbf{r}^{\prime}\right) e^{j k \mathbf{r}^{\prime} \cdot \hat{\mathbf{r}}} d \mathbf{r}^{\prime}
\end{aligned}
\tag{37}
$$
为了避免直接求解这些积分,作者利用先前(4.1.2)对 $\mathbf{J}$ 和 $\mathbf{M}$ 的点源近似($\Lambda$ 矩阵),将每个积分项 $F_i(\hat{r})$ 离散化并重写为傅里叶变换的形式,如公式 (38) 所示:
$$
F_i(\hat{r}) = \sum_{p \in S} h_i(p) e^{jp \cdot k \hat{r}}
\tag{38}
$$
将连续的场强计算转化为离散的求和,这样就可以用FFT快速计算了。并且从上式可以观察到, $F_i(\hat{r})$ 实际上是 $h_i(p)$ 在空间频率 $-k\hat{r}$ 上的傅里叶分量。
The required spatial frequencies are not on the FFT grid but can be interpolated; we add zero padding prior to the FFT step, to ensure enough resolution in the frequency domain for the trilinear interpolation to be sufficiently accurate.
搞了一大堆,终于回到熟悉的BRDF计算了。这里关键在于使用小尺度模拟的线性叠加来重建大尺度入射场的远场散射,而不是一口吃成大胖子。$N^2$个小尺度的高斯光束构成的网格来线性组合成近似大尺度的入射场。
这里用到“波束引导”(beam steering)技术。这种方法不用对每个方向都进行一次模拟,从而大幅降低计算成本。
首先,沿某方向 $\mathbf{u}$ 传播的 $N^2$ 个高斯光束组成在接收平面的一个 $N \times N$ 点的网格。这些光束组合后能够生成一个大的总场。
然后给每个高斯光束引入复数缩放因子,调整每个光束的相位,进而调整组合场的传播方向,这些方向称为desired direction。
$$
a_{st} = e^{j k \mathbf{p}{st} \cdot \omega_i} \tag{39}
$$

当目标入射方向 $-\omega_i$ 与基本方向 $\mathbf{u}$ 之间的夹角接近各高斯光束的发散角(divergence of the small beams)时,aliasing artifacts begin to appear. An example is shown in Fig. 8 (d).
In our framework, we decide on a primary waist w and choose a collection of basic incident directions. In general, 较小的腰宽意味着更大的发散角,这样可以从每个基本方向派生出更多的入射方向,从而减少所需的基本方向数量。较大的腰宽会降低每个高斯光束的发散角,使得组合后的总场发散更小,从而产生更精确的入射方向。

每个六边形的中心对应一个基本入射方向。整个半球的所有入射方向划分为若干territories,每个territories归属于一个基本入射方向。在半球投影中,这种比例关系与余弦因子相互抵消,因此可以使用大小相等的六边形来表示。
对于每个基本方向,可以通过“波束引导”产生一些偏离该基本方向的派生方向。
当光的入射角很小时(例如接近表面法线方向),基本入射方向附近的派生方向范围很小,因为小角度的光更集中,不会有很大的扩散。反之,派生方向范围会更大。总结就是,入射角越大(角度越接近水平),派生方向的覆盖范围就越大。公式作者也提到了:$1/\cos \theta_i$。
为了计算BRDF,我们需要知道这个大面积入射光的散射情况。然而,直接模拟这样一个大面积的光会需要很高的计算成本。因此,我们:
使用小尺度模拟的叠加来模拟大尺度入射场。
可以理解为,用很多个小的手电筒(高斯光束)来覆盖一个区域,而不是用一个巨大的探照灯。
首先决定手电筒的尺寸(光束的大小,即腰宽 $w$),并在表面上均匀地分布这些手电筒。写成公式,这个手电筒的排列就是网格点${x_s}, {y_t}$,代表每个高斯光束的中心位置。网格间距一般和腰宽一致,确保光的均匀覆盖,并保持较低的发散角。
让每个高斯光束在其中心区域产生相同的电磁场,只是在不同的位置上重复这一效果。
接下来,想要得到大光束的总散射场,这里需要相位因子来进行“调整”和“叠加”,详细请回看公式(39)。

最终,Combining with Eq. 39, the scattered fields in the far field region corresponding to the pair of directions $(w_i,w_o)$ are given by:
$$ \begin{aligned} \mathbf{E}\left(\omega_i, \omega_o\right) & =\sum_{s=1}^n \sum_{t=1}^n e^{j k \mathbf{p}{s t} \cdot\left(\omega_i+\omega_o\right)} \mathbf{E}{s t}\left(\omega_o\right) \\ \mathbf{H}\left(\omega_i, \omega_o\right) & =\sum_{s=1}^n \sum_{t=1}^n e^{j k \mathbf{p}{s t} \cdot\left(\omega_i+\omega_o\right)} \mathbf{H}{s t}\left(\omega_o\right) \end{aligned} \tag{41} $$
where $\mathbf{E}, \mathbf{H}$ refer to the far field quantities only associated with directions (without the $e^{-j k r} / r$ term).
Lastly, we can compute the surface BRDF value as
$$
f_r\left(\omega_i, \omega_o\right)=\frac{\frac{1}{2}\left|\mathbf{E}\left(\omega_i, \omega_o\right) \times \mathbf{H}\left(\omega_i, \omega_o\right)^*\right|}{\Phi_i \cos \theta_r}
\tag{42}
$$
where the incident power $\Phi_i$ is computed by integrating the incident irradiance over the surface:
$$
\Phi_i=\frac{1}{2} \int_S\left|\left[\mathbf{E}_i\left(\mathbf{r}^{\prime}\right) \times \mathbf{H}_i\left(\mathbf{r}^{\prime}\right)^*\right] \cdot \mathbf{n}\right| d \mathbf{r}^{\prime}
\tag{43}
$$
where $\mathbf{n}$ is the surface normal at the macro scale ( $+\mathbf{z}$ ). Note that Eq. 42 and Eq. 43 can also be applied in single simulations, where $\Phi_i$ is computed from a single Gaussian beam.

原文:https://zhuanlan.zhihu.com/p/830617613
利用波动光学渲染毛发。计算表面电磁场得到散射场,再加入噪声模拟Glints效果。
我发现这个系列的作者颜值都好高。(划掉)

1. 背景
毛发渲染一直以来主要基于光线追踪技术,无法处理波动光学效应(Wave Optics),例如毛发表面强烈的前向散射和微妙的颜色变化。之前的研究【Xia et al. 2020】证明了衍射效应在纤维的颜色和散射方向上起到了关键作用。然而,这项研究并没有考虑如表面粗糙度和纤维表皮层的微观结构(例如倾斜的角质鳞片)。
2. 动机
为了弥补现有的光线光学模型缺少对衍射和前向散射的处理(例如Glints现象)。
尽管全波模拟可以得到非常细致的散射数据,但是计算量仍然太高。必须通过某种方式加速或简化,以实现大规模场景中的毛发或皮毛渲染。
想要开发一种能够高效处理各种纤维几何变化的模型。
3. 方法
毛发建模是基于毛发的扫描电子显微镜(SEM)图像。
用「WAVE SIMULATION WITH 3D FIBER MICROGEOMETRY」计算粗糙纤维表面的反射和衍射。即PO。
引入了散斑理论来分析散射模式的统计特性,用噪声来加速。
结合 Mie 散射、Quetelet 散射(光干涉)以及水滴动态变化,逼真地渲染出水面上和蒸汽中彩虹般的水滴色彩效应,超越了传统的单一 Mie 散射模型。

1. 背景
虹彩现象在自然界中很常见,尤其是在水滴、雾气和蒸汽等情况下。一般可以通过Mie散射来解释。Mie 散射描述了当光线遇到与波长相当的球形颗粒时发生的散射效应,是目前用于模拟水滴、云层、雨雾等自然现象的重要理论之一。
然而,尽管 Mie 散射能够解释孤立水滴的光学特性, Mie 散射不能完全解释诸如水面彩虹色水滴和蒸汽中复杂的彩虹图案等现象。现象不仅依赖于单个粒子如何散射光线,还依赖表面反射、干涉效应以及颗粒大小的动态变化。
2. 动机
Mie 散射只能处理孤立的光散射现象,而无法解释更复杂的光学干涉效应。
准确模拟这些自然现象能够极大提升图像渲染的真实性和观感。
现有的计算机光学模型和渲染方法大多局限于 Mie 散射,无法解释光线在多颗粒环境下的交互现象,比如水滴之间或水滴与表面之间的光干涉和反射。
3. 方法
用「水面上的 Quetelet 散射模型」来解释水面漂浮水滴产生的彩虹色效果。通过建立经验模型,使用热成像技术将温度与水滴的尺寸和高度相关联。使用 Quetelet 散射相函数和 BRDF(双向反射分布函数)来渲染粒子群和水面。
开发了一个水滴生长和蒸发模型,模拟水滴在蒸汽中的动态变化。与 Mie 散射结合,利用非均匀尺寸的水滴来模拟蒸汽中的彩虹色变化。为了提高渲染效率,采用了基于运动模糊的加速算法,相比于传统方法提升了 10 倍的计算速度。
结合了小型多层感知器(MLP,Multilayer Perceptron)的在线学习毛发高阶散射辐射(higher-order scattered radiance online)的方法(这个应该如何翻译?),在路径追踪(path tracing)框架下显著加速了毛发渲染,减少了计算时间并且只引入了少量偏差。

1. 背景
毛发的多次散射(multiple scattering)非常复杂,特别是在路径追踪(path tracing)过程中,由于需要模拟光线在毛发之间的多次散射,导致难以收敛。
2. 动机
开发一种方法,在提升计算效率的同时,保持对多次散射效果的高质量模拟。
现有技术中,一些方法对场景或光照做出简化假设。该论文希望提出一种不对场景做任何假设的通用方法。
3. 方法
使用一个小型多层感知器(MLP,Multilayer Perceptron)来在线学习高阶散射辐射(learning higher-order scattered radiance online),这个 MLP 网络在渲染过程中实时学习毛发的散射特性,不依赖于预先计算的表格或模拟。
在路径追踪框架中集成了 MLP,用来推测和计算高阶散射辐射贡献。
渲染器的偏差和速度(renderer’s bias & speedup)可以实时调节,以便在计算效率和渲染质量之间找到最优平衡。
在区域光源(area lights)下渲染闪光(glints)效果,通过结合线性变换余弦(LTC,Linearly Transformed Cosines)和基于二项分布的微表面计数模型,实现实时渲染。

1. 背景
许多现实材料(如金属、宝石等)具有闪闪发光(Glints)的外观,效果源于微表面的反射。然而闪光是离散现象,涉及波动光学模拟计算量太大。
以往的研究大多集中在使用无穷小的点光源来渲染闪光效果,对于像太阳这样远距离的光源来说这是合理的简化,但现实中大多数光源本质上都是区域光源。现有技术未能有效处理区域光源下的闪光渲染。
2. 动机
处理区域光源下的闪光(glint rendering under area lights)。面积光源(例如通过窗口照射进房间的灯光)是常见的光源类型,如何在这种光源下高效地渲染闪光效果是一个尚未完全解决的问题。希望开发一种方法,能够在面积光源下准确渲染闪光效果,同时满足实时渲染的需求。
希望能够轻松集成到现有的实时渲染框架中,且不对已有的面积光源着色方法带来显著额外开销。
3. 方法
闪光反射概率估算(estimating glint reflection probability)来计算微表面(microfacet)正确定向以反射来自光源的光线到观察者的概率。大光源通过线性变换余弦(LTC,Linearly Transformed Cosines),小光源用局部常量法(locally constant approximation)。
基于二项分布的计数模型(binomial distribution-based counting model)来计算反射微表面的数量。
与现有框架的集成(integration with existing frameworks)。
提出了一种创新的实时基于发束(strand-based)毛发渲染框架,通过无缝的细节层次(LoD,Level-of-Detail)过渡,确保毛发在不同视距下保持一致的外观,并实现显著的渲染加速。

1. 背景
在影视和游戏制作中,基于发束的毛发渲染(strand-based hair rendering)因其逼真的外观而越来越受欢迎,但它的计算成本非常高,尤其是在远视距下。
当前 LoD 方法,从发束到卡片的过渡中容易出现明显的不连续导致的外观不一致。
2. 动机
解决动态和视觉不连续性(discontinuity in dynamics and appearance)。现有的从发束到毛发卡片的转化方案在外观和动画表现上有显著差异。论文的目标是实现从远到近无缝的 LoD 过渡,消除过渡时的外观变化,同时保持计算效率。
3. 方法
使用椭圆形厚毛发模型(elliptical thick hair model)将多个发束封装在一个椭圆形的体积内。在不同 LoD 下保持毛发簇(hair cluster)的形状和整体结构,从而在视距变化时提供一致的外观。
椭圆双向曲线散射分布函数(elliptical Bidirectional Curve Scattering Distribution Function, BCSDF)模拟毛发簇内的单次和多次散射现象,适用于从稀疏到密集、从静态到动态的毛发分布场景。
动态 LoD 调整与毛发宽度计算(dynamic LoD adjustment and hair width calculation)。
一种基于小型样本微结构(tiny example microstructures)的模型,实时渲染glinty的效果,大幅减少了内存占用和计算开销,同时保持了高频反射细节的真实感。

1. 背景
复杂微观结构产生的闪光细节能够显著提升渲染的真实感,特别是在金属、宝石等材质上。这些细节通常需要高分辨率的法线贴图(normal maps)来定义每个微观几何形状,然而这类方法对内存需求很高,不适合实时渲染应用。
2. 动机
降低内存和计算开销(reduce memory and computational overhead)。
利用材料的自相似性(leveraging material self-similarity)。观察到许多材质具有独立的结构特征和自相似性,通过小型样本来隐式表示复杂微结构从而降低内存需求。
3. 方法
基于小型样本微结构的程序化模型(tiny example-based procedural model),基于材质的自相似性,能够通过重复利用少量样本来生成复杂的闪光细节。
法线分布函数预计算(precomputed Normal Distribution Functions, NDFs),使用四维高斯分布(4D Gaussians)预计算并存储小型样本的法线分布函数(NDFs)。存储在多尺度 NDF 图中(multi-scale NDF maps),并在渲染时通过简单的纹理采样调用。
基于小型样本的 NDF 评估方法(tiny example-based NDF evaluation method),通过纹理采样结合小型样本 NDF 评估方法,快速生成复杂表面的闪光外观。
一种实用的毛发外观聚合模型,通过减少几何毛发数量并结合光线多次散射,利用神经网络实现实时动态简化,显著加速毛发渲染,同时保持逼真的视觉效果。

1. 背景
毛发数量太多,每根毛发的光线散射和反射会大幅增加计算量,尤其是在模拟多次光线散射时。
现有简化方法大多通过减少毛发数量来提高渲染效率,局限性(limitations of existing simplification methods)很大。这种方法会导致毛发看起来过于粗糙或干燥,光线的反射和散射效果也不真实。
2. 动机
减少几何复杂性(reducing geometric complexity)。
提高渲染效率(improving rendering efficiency)。
3. 方法
提出一个聚合毛发外观模型(aggregated fur appearance model),用一个粗大的圆柱体来表示一组毛发簇的光学行为。通过分析单根毛发的光学属性(如光线入射角度等),该模型能够准确反映毛发簇的聚合外观。
使用一个轻量级神经网络(lightweight neural network),将单根毛发的光学特性映射到聚合模型中的参数。
提出了一个基于视距和光线反弹次数的动态细节层次方案(dynamic level-of-detail scheme),动态简化毛发的几何结构。
多模态数据(multi-modal data)对于预测性渲染(predictive rendering)很重要,特别是在准确建模材料反射行为方面,通过结合光谱、空间信息及微观几何细节,提升反射模型的真实性和计算效率。

1. 背景
预测性渲染的需求(need for predictive rendering)旨在精确模拟材料的外观。
目前的材料反射行为数据库大多局限于单一维度,通常只涵盖光谱域(spectral domain)或空间域(spatial domain),并且缺乏对微观几何细节(microgeometry)的描述。
2. 动机
为了弥补数据不足(addressing data limitations),通过多模态数据,不仅能够更好地模拟材料在不同光照条件下的反射,还能揭示材料表面微观几何对光散射的影响。
多模态反射数据有助于开发更加真实且高效的反射模型。
3. 方法
多模态反射数据的构建(building a multi-modal reflection database),包含材料的光谱信息(spectral data)、空间分布信息(spatial distribution data)以及微观几何特征(microgeometry details)。
对材料表面的微观几何进行微观几何模拟(simulating microgeometry)。
光谱和空间域的综合(integrating spectral and spatial domains)。
一种基于自由空间衍射的双向散射分布函数(BSDF),通过光线追踪在不需要几何预处理的情况下,能够高效模拟复杂场景中光绕过物体边缘的衍射现象,特别适用于路径追踪技术。

1. 背景
自由空间衍射(free-space diffraction)是一种光学现象:当光线遇到物体的边缘或角落时会发生绕射,部分能量弯曲进入阴影区。这种现象对模拟光波的传播非常重要,尤其是在长波长(如雷达、WiFi 和蜂窝信号)条件下。
传统方法如几何衍射理论(GTD)和统一衍射理论(UTD)的局限性(limitations of traditional methods)在于需要处理尤其是在复杂几何场景中互相干涉的光线导致的极高计算复杂性。现有方法依赖于场景简化和特定几何结构,无法有效处理复杂的三维场景。
2. 动机
解决复杂场景中的衍射渲染问题(addressing diffraction in complex scenes)。现有的衍射模拟方法难以扩展并与路径追踪技术兼容。
现有衍射方法往往依赖复杂的非线性干涉计算,而路径追踪采用线性渲染方程。本文希望设计一种在路径追踪框架内高效工作的自由空间衍射 BSDF,不需要对路径追踪器做大修改。
3. 方法
基于 Fraunhofer 衍射的边缘衍射模型(Fraunhofer diffraction edge model)。在光线与几何物体交点附近,识别相关的边缘并计算绕射效应。当光线照射到物体时,通过几何分析构建自由空间衍射的 BSDF,量化光线如何在几何物体周围传播,以及有多少能量发生衍射。
重要性采样策略(importance sampling strategy)评估光线与物体的交互点周围的几何边缘,并对绕射光线进行采样和追踪。
路径追踪中的无缝集成(seamless integration in path tracing)
一种多层干涉渲染方法。表现周期性多层结构的虹彩效应,通过引入生物学中的 Huxley 方法,实现了独立于层数的高效计算.

1. 背景
薄膜干涉(thin-film interference)是一种光波的波动特性引起光学现象,在视角或光照角度变化时会产生虹彩效果(iridescence)。通常出现在自然界中的单层或多层结构中,比如蝴蝶翅膀、甲虫壳和介电镜等。
现有方法例如递归计算法和转移矩阵法(Transfer Matrix Method, TMM)的局限性(limitations of existing methods)在于计算复杂度随着层数的增加而显著提高。简化方法则会忽略薄膜中的多重反射。
2. 动机
提高多层结构的渲染效率(improving efficiency for multilayer structures)。
应用于复杂材料的物理渲染(physical rendering of complex materials)。
3. 方法
提出一种基于 Huxley 方法的多层干涉模型(multilayer interference model based on Huxley’s approach)。高效计算周期性多层结构中的反射和透射系数。且支持多种材料和吸收效应(support for multiple materials and absorption effects)。
基于 BRDF 实现(BRDF implementation)。被实现为一个 BRDF(双向反射分布函数),可以集成到传统渲染系统中,如 PBRT-v3。
基于边界元法(BEM)的全波模拟器,可以高精度计算粗糙表面上的光散射,用于评估和改进计算机图形学中的近似反射模型,特别是在多次散射、干涉和衍射效应显著时。

1. 背景
表面反射模型通常基于几何光学(geometric optics),假定光以光线的形式传播。对于表面特征与光波长相当的场景,几何光学模型无法准确捕捉如衍射和干涉等波动效应(wave effects)。
基于波动光学近似,如 Beckmann-Kirchhoff 理论和 Harvey-Shack 模型,它们在多次散射和复杂几何结构下仍然会产生误差。
2. 动机
由于现有的反射模型在不同情况下精度各异,缺乏可靠的基准来验证其准确性。本文的目标是开发一个基于全波理论的模拟器以最大限度地减少近似并通过数值离散化实现高精度的表面反射计算,从而提供一个可以用于评估各种反射模型准确性的参考工具。
解决多次散射和波动效应(addressing multiple scattering and wave effects)。
3. 方法
边界元法(Boundary Element Method, BEM),用自适应积分法(Adaptive Integral Method, AIM)来加速。
模拟器的全波模拟(full-wave simulation)完整解决了 Maxwell 方程,能够准确模拟光的传播、干涉、散射等波动现象。
并且能高效计算 BRDF(efficient BRDF computation)。
提出了一个高效的物理光传输(PLT)框架,利用部分相干光和波动光学的原理,通过改进的渲染算法,在复杂场景中实现了精确的干涉、衍射和极化效应的渲染,并使其性能接近经典的“物理基础”渲染方法。

1. 背景
现有的渲染方法大多忽略了光的波动特性,特别是在复杂场景中,这导致无法渲染诸如光的干涉、衍射等物理现象,这些现象在某些材料(如彩虹色涂层、光盘等)上尤为重要。为了解决这一问题提出一种基于麦克斯韦电磁理论的渲染框架。
虽然 PLT 提供了理论上的全波模型,能够模拟光的相干性、干涉和衍射,但现有的方法计算难度非常大。
2. 动机
简化物理光传输模型(simplifying the physical light transport model)。
引入新材料(introducing new coherence-aware materials),开发能够感知光相干性的材料模型,提高 PLT 在实际场景中的可用性。
3. 方法
限制光的相干性形状(restricting the coherence shape of light),通过热力学推导,证明这种近似在大多数自然光源下是合理的。
采用了扩展的斯托克斯-穆勒方法(Stokes-Mueller calculus),将光的辐射、极化和相干性属性结合在一起,作为新的渲染原语。广义的斯托克斯参数可以完整量化光的所有属性,并能精确模拟由这些属性引起的复杂光学现象,如干涉和衍射。
波动 BSDF 和重要性采样(wave BSDF and importance sampling)。
新相干感知材料模型(new coherence-aware material models)充分利用光的相干属性扩展了 PLT 的适用范围。
提出了首个基于微表面理论的毛发散射模型准确地描述毛发的散射行为。非可分离的散射瓣结构、椭圆形截面、高效的重要性采样和前向散射光斑(glint-like)效果。

1. 背景
毛发渲染的复杂性(complexity of hair rendering)。大多数现有的毛发散射模型通过可分离的散射瓣(separable lobes)来简化数学计算,虽然快但并不是Ground Truth的。
大多数毛发散射模型基于几何简化,将毛发当作光滑圆柱体处理。导致了散射行为的偏差。
2. 动机
引入物理合理的微表面模型(introducing a physically-plausible microfacet model)更准确地描述毛发的散射行为:表面的微观粗糙度、倾斜的鳞片结构以及非可分离的散射瓣形状。
改善采样效率和物理精度(improving sampling efficiency and physical accuracy)。
3. 方法
将毛发建模结合微表面(microfacet)理论,应用 GGX 或 Beckmann 正态分布来描述表面的微观粗糙度。并且是非可分离的散射瓣(non-separable lobes)。
毛发散射的分布函数(bidirectional curve scattering distribution function, BCSDF)描述光线在毛发表面上的复杂交互行为。
支持椭圆截面和高效采样(support for elliptical cross-sections and efficient sampling)。支持椭圆的毛发截面。
提出了首个基于麦克斯韦电磁理论能够处理部分相干光的全局光传输框架,准确模拟光的干涉和衍射效应,并将传统的基于辐射度的光传输理论扩展到波动光学领域。

1. 背景
现有的光传输模型通常基于几何光学和辐射度(radiometry)忽略了光的波动特性,无法模拟干涉和衍射等现象。不能准确再现如彩虹色效应、光栅、薄膜干涉、光偏振等波动光学效应,也就是经典辐射度光传输模型的局限性(limitations of classical radiometric light transport models)。
目前的模型只能处理局部处理波动效应(local treatment of wave effects),对于全局场景中光的传输和相干性搞不了。
2. 动机
实现全局光传输中波动效应的物理一致性(achieving global wave-optics consistency in light transport),也就是结合麦克斯韦电磁理论。
结合波动光学与传统几何光学(integrating wave optics with classical geometric optics),处理光的波动效应,又能在短波长极限下与经典几何光学一致。
3. 方法
光的部分相干性建模(modelling partially-coherent light)分为两个部分。两点相干性描述(two-point coherence description)和光源模型(light source model)。与传统的辐射度不同,本文基于光的部分相干性引入了“交叉谱密度函数”(cross-spectral density function),能够捕捉光的干涉特性。自然光源的物理模型,基于量子力学中的自发辐射原理。
光传输方程的推广(generalizing the light transport equation)。利用谱密度传输方程(spectral-density transport equation)计算光在传播过程中的干涉和衍射效应。并且本文证明了该框架在短波长极限下简化为经典的几何光学,因而可以与现有的光传输方法无缝衔接。
衍射与传播模型(diffraction and propagation model)。
提出了一种广义光线(generalized ray)形式化模型,用于波动光学渲染,通过解决采样问题,使得弱局部性、线性和完备性在波动光学中同时成立。实现了复杂场景下的双向波动光学路径追踪和高效渲染。

1. 背景
光传输的经典模型基于射线光学(ray optics),假设光作为线性传播的点查询。然而,射线光学无法捕捉光的波动特性,忽略了干涉、衍射等现象,例如虹彩效应、薄膜干涉和长波辐射的绕射等。
虽然波动光学能够精确描述光的干涉和衍射效应,但由于其非线性行为,传统的采样和路径追踪技术难以应用。
2. 动机
解决波动光学中的采样问题(solving the sampling problem in wave optics)。为了在双向光传输中应用波动光学,需要解决弱局部性下的采样问题。
开发一种新型的波动光学形式化,使其能够在逆向路径追踪和双向光传输中有效应用,同时保持线性和完备性。
提高波动光学渲染效率(improving wave-optics rendering efficiency),使得波动光学渲染的收敛速度能够接近经典射线光学的渲染系统。
3. 方法
广义射线的引入(introduction of the generalized ray)。进行弱局部的线性查询。广义射线不再局限于单一位置的点查询,而是占据一个小的空间区域。能够捕捉光的干涉和衍射效应。
弱局部性和线性化(weak locality and linearization)。在波动光学中,完美的局部性和线性化是无法同时实现的。因此放弃完全局部性。采用弱局部性确保广义射线可以线性叠加。
逆向波动光传输模型(backward wave-optical light transport model)。
双向路径追踪中的应用(application in bidirectional path tracing)。
提出了一种新的光-物质相互作用框架,通过将部分相干光分解到 Hermite-Gauss 空间,并将物质建模为局部平稳的随机过程,从而统一了散射和衍射的公式,并实现了对复杂光学现象的高效计算和描述。

1. 背景
日常观察到的光通常由许多独立的电磁波组成。由于部分相干光的复杂性(complexity of partially-coherent light),部分相干光的相干特性在微观几何表面的反射、涂层材料的外观、光栅效应等现象经典的辐射度理论无法解释。
现有工具的局限性(limitations of existing tools)只能渲染特定材料,难以推广。
2. 动机
构建通用的光-物质相互作用框架(building a general-purpose light-matter interaction framework),高效处理部分相干光,简化现有计算工具的复杂性。
分解光的相干特性(decomposing light coherence properties),引入 Hermite-Gauss 空间,希望以计算可行的方式分解和表示光的相干性,从而广泛适用于各种光学现象。
3. 方法
Hermite-Gauss 空间中的光传输(light transport in Hermite-Gauss space)。
局部平稳物质模型(locally-stationary matter model)。
光-物质相互作用的分析(analysis of light-matter interaction)。
光-物质相互作用公式的统一(unifying light-matter interaction formulae)。
模拟珍珠光材料的光学特性。为珍珠光材质的设计和逆向渲染提供了理论基础。

1. 背景
珍珠光材料的广泛应用(Wide Applications of Pearlescent Materials),并且这些材质具有独特的光泽和变色效果,广泛应用于包装、陶瓷、印刷和化妆品等领域。
珍珠光效应的复杂光学过程(Complex Optical Processes of Pearlescence)源于颜料片之间的多重散射和波动光学干涉。现有的模型难以全面描述这些复杂的光学行为。
2. 动机
建立更广泛适用的珍珠光材质模型(Building a More Comprehensive Model for Pearlescent Materials)。现有的珍珠光材质模型对颜料的复杂结构和制造过程的影响考虑不足。目标是通过引入新的光学模拟模型,扩展可表示的珍珠光外观范围。
一个通用的珍珠光材质模型还可以用于逆向渲染中。
3. 方法
提出基于干涉颜料的光学模型(Optical Model Based on Interference Pigments)。将颜料片的多层结构、粒子的方向相关性、厚度变化等特性纳入考虑。
参数空间的系统研究(Systematic Study of Parameter Space),探讨了颜料片的方向性、厚度和排列对材料外观的影响。
逆向渲染(Inverse Rendering)帮助解读真实世界中的光散射现象。
基于非旁轴标量衍射理论的波动光学模型,用于模拟微观划痕表面的虹彩效应,从局部光斑到远距离下的光滑反射。

1. 背景
划痕引起的光学效应(Optical Effects of Scratches),定向光照下(如阳光或卤素灯),这些划痕表面会显示出复杂的虹彩图案,是由划痕结构对入射光的衍射引起的。在几何光学模型中无法再现。
虽然现有的解析模型能够重现一些微结构(如光盘)的虹彩效果,但对于局部分辨的划痕光学行为的模拟仍然是一个难题。
2. 动机
提供一个波动光学的划痕渲染框架(Provide a Wave-Optical Scratch Rendering Framework)。能够精确模拟划痕引起的光学效应,包括光斑、虹彩等视觉现象。
3. 方法
基于非旁轴标量衍射理论的波动光学模型(Wave-Optical Model Based on Non-Paraxial Scalar Diffraction Theory)。本文的方法能够在入射和反射大角度下准确模拟光在微尺度表面特征上的衍射行为。
划痕表面结构的矢量图形表示(Vector Graphics Representation of Scratch Surfaces)。
多尺度行为的 BRDF 模型(Multi-Scale BRDF Model)。
物理基础渲染系统中的集成与优化(Integration and Optimization in Physically-Based Rendering Systems)。
描述 1D 光子晶体(即 Bragg 镜)的材料虹彩效果。特定条件下简化为快速计算的单次反射BRDF。

1. 背景
自然界中的虹彩现象(Iridescence in Nature)体现在生物、植物或宝石中。这是由特定的微观几何结构引起的,这些结构的尺寸与可见光波长相当。最显著的例子是光子晶体(photonic crystals),在一维、二维或三维结构中重复排列产生结构色。
1D 光子晶体,即 Bragg 镜的光学特性(Optical Properties of Bragg Mirrors)。现有的工作大多使用经典的传递矩阵法(transfer matrix method)来计算多层薄膜的光学效应,但随着薄膜数量的增加,计算复杂度也显著增加。
2. 动机
简化 Bragg 镜反射计算(Simplifying the computation of Bragg mirror reflectance),引入一个更简洁、封闭形式的反射公式探索在 RGB 光谱渲染中的快速近似方法。
研究粗糙 Bragg 层的效果(Investigating the effects of rough Bragg layers),探究表面粗糙度对光学表现的影响。
3. 方法
引入封闭形式的反射公式(Closed-form Reflectance Formula)。基于 Yeh 的公式(Yeh88 Formula),做 RGB 光谱近似(RGB Spectral Approximation)。
分析粗糙度对光学传输的影响(Effect of Roughness on Optical Transmission)。
利用单次反射 BRDF 模型(Single-reflection BRDF Model)高效地渲染粗糙 Bragg 层的外观。
在散射介质中模拟近场成像条件下的散斑统计,加速生物组织成像应用中的散斑渲染,为基于散斑的成像技术提供支持。

1. 背景
在生物组织中进行深层成像时,由于光在组织内部的多重散射,成像变得非常困难。在相干光(如激光)照射下,组织内部会产生高频的散斑图案。散斑图案的统计学特性,特别是记忆效应(memory effect),为组织成像技术(如荧光成像和自适应光学聚焦)提供了基础。
现有模型的局限性(Limitations of Existing Models)在于当前主要是集中在远场成像。近场条件都被忽略了。
2. 动机
提供物理精确且高效的近场散斑渲染模型(Developing a Physically Accurate and Efficient Model for Near-Field Speckle Rendering)。
提升散斑模拟的计算效率(Improving Computational Efficiency of Speckle Simulations),波动方程求解器计算量太大了。
3. 方法
基于蒙特卡洛路径积分的渲染框架(Monte Carlo Path Integral Rendering Framework)。
光学孔径和散射相函数的近似(Aperture and Phase Function Approximations)。
重要性采样(Importance Sampling)。
毛发简化为细长圆柱体,并通过扩展 Phong 模型模拟毛发表面的光反射行为。

1. 背景
基于 Phong 光照模型的概念,将其扩展为适应毛发渲染的经验模型。
2. 动机
毛发具有非常独特的光学特性,如高光反射、次表面散射等,而这些现象的出现与毛发的几何形状和表面结构密切相关。
3. 方法
Kajiya-Kay 模型基于 Phong 模型的思想,扩展 Phong 模型(Extension of the Phong Model)。
细长圆柱体假设(Cylindrical Hair Representation)。
能够捕捉现有Kajiya-Kay模型无法描述的关键视觉效果,如多个高光和与纤维轴旋转相关的散射变化。

1. 背景
Kajiya-Kay模型的局限性(Limitations of the Kajiya-Kay Model)仅假设毛发为不透明的圆柱体,忽略了内部反射和透射等关键现象.
2. 动机
毛发是介电材料,尤其是浅色头发(如金色、棕色、红色)具有显著的半透明性。因此更真实的毛发散射模型需求(Need for a More Accurate Hair Scattering Model)。
3. 方法
测量了单根毛发的3D全半球光散射。
提出透明椭圆柱体模型(Transparent Elliptical Cylinder Model)。
简化的阴影模型(Simplified Shading Model)。
一个结合散射和衍射的新模型,能够在无需预计算的情况下模拟具有椭圆形截面的毛发的光散射和衍射现象。

1. 背景
依旧是波动光学为背景。当光与尺寸接近光波长的物体相互作用时,干涉和衍射效应变得显著。
毛发渲染需要考虑其几何特性以及光的波动效应。虽然射线追踪可以模拟大部分散射现象,但对于毛发中的衍射现象,它显得不足。
2. 动机
解决衍射和椭圆形截面问题(Addressing Diffraction and Elliptical Cross-sections)。提出了一个结合光的波动和射线特性的模型,能够在无需预计算的情况下处理毛发的光衍射现象。支持任意椭圆形截面的毛发纤维。
3. 方法
射线部分(Ray Interaction with Elliptical Fibers)引入完整的光传输模型,延续了传统的射线模型,处理了大多数散射效应。
波动部分(Wave Diffraction by Elliptical Fibers)引入了一个新的衍射散射瓣函数,捕捉光与毛发相互作用时产生的强向前散射效应。
免预计算(Precomputation-free Approach)。
现代离线渲染器集成(Integration with Modern Ray Tracers)。
“双重散射”模型广泛运用于实时渲染,经典模型无需多言。

1. 背景
在浅色密集的头发中,多次散射是决定整体头发颜色的关键因素。
现有的基于路径追踪或光子映射的方法渲染太慢,且往往忽略了头发纤维的圆形截面。
2. 动机
一个物理精确且高效的多次散射模型需求(Need for Physically Accurate and Efficient Multiple Scattering Model)。
3. 方法
双重散射模型(Dual Scattering Model),全局多重散射和局部多重散射。全局多重散射部分旨在计算穿过头发体积并到达目标点邻域的光,而局部多重散射则考虑该邻域内的散射事件。

声明:这篇文章主要是关于SIG23年这篇黑狗毛论文的个人笔记。应该也没啥阅读门槛,因为我自己也没有入门图形学。公式有但是不多。公式tag跟原论文一样。所有内容都是我瞎捣鼓的,公式如果有理解错误请多多指正,感谢感谢!
原文:https://zhuanlan.zhihu.com/p/809636731
关键词:图形学入门、离线渲染、基于波动光学渲染、毛发渲染
Mengqi Xia, Bruce Walter, Christophe Hery, Olivier Maury, Eric Michielssen, and Steve Marschner, “A Practical Wave Optics Reflection Model for Hair and Fur,” ACM Transactions on Graphics (TOG), vol. 42, no. 4, article 39, pp. 1-15, Jul. 2023.
毛发建模是基于毛发的扫描电子显微镜(SEM)图像。可以准确还原毛发的微观结构,例如毛鳞片、粗糙度。

接下来,用「WAVE SIMULATION WITH 3D FIBER MICROGEOMETRY」计算粗糙纤维表面的反射和衍射。

在这个基础上,引入了散斑理论来分析散射模式的统计特性。并且用噪声来描述这些散斑,大幅优化模型。

然后通过与实际测量数据的对比,推导出合理的纤维参数(例如尺寸、表皮角度和表面粗糙度)。最后集成进渲染系统中。
这个我翻译成纤维散射模型。这个东西描述的是单根纤维发生相互作用。这里的关键核心是BCSDF(双向曲线散射分布函数)。有别于在表面反射和折射中常用的双向散射分布函数(BSDF),BCSDF是专门为曲线形状的纤维设计的。下面这个公式讲的是,给定某波长的光照射在一根纤维上时,它从某个方向射入后,会从另一个方向反射或透射出来。
$$
L_r(\omega_r, \lambda) = \int L_i(\omega_i, \lambda) S(\omega_i, \omega_r, \lambda) \cos \theta_i d\omega_i \tag{1}
$$
公式左边表示给定波长 $\lambda$ ,出射方向 $\omega_r$ 下的辐射亮度。$ L_i(\omega_i, \lambda)$ 是入射方向 $\omega_i$ 的辐射亮度。 $S(\omega_i, \omega_r, \lambda)$ 是双向曲线散射分布函数,描述了光线如何被纤维”打散”。$\cos \theta_i$ 是为了考虑入射角度的影响,如果光线以一个很平的角度照射到纤维上,它的影响会比垂直照射时小。
把上面这个公式写成球坐标,并且把每一种不同的光线与毛发纤维的交互当作不同的模式,然后把不同的散射项累加起来:
$$
S(\theta_i, \theta_r, \phi_i, \phi_r, \lambda) = \sum_{p=0}^{\infty} S_p(\theta_i, \theta_r, \phi_i, \phi_r, \lambda)
\tag{2}
$$
第一散射项 $S_0$ 描述表面反射,即以前经常说的直接反射项 $R$ 。这一项是一般代表从光滑纤维的反射或者粗糙纤维表面反射的统计平均值。论文这里能更加精确地计算这一项。
回想以前的渲染方法(比如Marschner[2003]),通常是将每一个散射模式 $S_p$ 分解为两个独立的函数:longitudinal function $M_p$ 和anazimuthal function $N_p$ ,这样的方法已经被批判过是不准确的,因此应该避免使用下面这种可分离的近似方法。
$$
S_p(\theta_i, \theta_r, \phi_i, \phi_r, \lambda) = M_p(\theta_i, \theta_r)N_p(\theta_i, \phi_i, \phi_r, \lambda)
\tag{3}
$$
因此,XIA[2023]采样了多个粗糙纤维的散射参数并且取均值,记为 $S_0,avg$ 。 $f(\theta_h, \phi_h, \lambda)$ 是噪声分量,通过两个半程向量角度和波长来表示,用来修正当前的特定纤维实例和均值的偏差。
$$
S_{0,\text{sim}}(\theta_i, \theta_r, \phi_i, \phi_r, \lambda) \approx S_{0,\text{avg}}(\theta_i, \theta_r, \phi_i, \phi_r, \lambda) f(\theta_h, \phi_h, \lambda)
\tag{4}
$$
当前,完整的纤维散射模型如下。第一项表示纤维表面的反射的散射模式,结合了3D波动模拟。后面的求和项是其他高阶的散射模式之和。
$$
S_{\text{prac}}(\theta_i, \theta_r, \phi_i, \phi_r, \lambda) = S_{0,\text{prac}}(\theta_i, \theta_r, \phi_i, \phi_r, \lambda) + \sum_{p=1}^{\infty} S_p(\theta_i, \theta_r, \phi_i, \phi_r, \lambda)
\tag{5}
$$
实际上,最终的散射公式更为简洁,以适应有更复杂几何结构的表面。
散斑理论(Speckle Theory)描述光与粗糙表面相互作用时产生的随机光强分布现象。Goodman[2007]公式中的 $A$ 表示所有相位向量的叠加,即结果相位向量(Phasor):
$$
\mathbf{A} = \frac{1}{\sqrt{N}} \sum_{n=1}^{N} a_n = \frac{1}{\sqrt{N}} \sum_{n=1}^{N} a_n e^{i\phi_n}
$$
上式为散斑强度的综合表达,换而言之,用来表示散射后的光线强度。产生该现象的原因是光线会在许多微小表面之间相互反射、折射并相互干涉。光线传播发生的相位差导致明暗不均的图案。通过该公式,可以统计性地计算出光线如何在纤维表面相互干涉,得到散斑图案。
在波动光学模拟中,光看作一种电磁波。由相互垂直的磁场和电场组成。光线与毛发的相互作用(如散射)可以转化为分析电磁场如何受到物体的影响。
首先需要明白,当电磁场随着时间周期变化时,称该场为时偕场(Time-Harmonic Fields)。在时谐场中,电场和磁场可以通过复数表示为相位向量(phasors)。巧妙的是,电场和磁场本身就是相互垂直。
$$
E_{\text{inst}} = \Re(E e^{j\omega t}), \quad H_{\text{inst}} = \Re(H e^{j\omega t})
\tag{6}
$$
分别是电场和磁场,只不过是分别取了实数部分。复数部分包含了场的振幅和相位信息。
下面这两组方程是麦克斯韦方程组在时谐场中的形式:
$$
\nabla \times \mathbf{E} = -\mathbf{M} – j\omega \mu \mathbf{H}
\
\nabla \times \mathbf{H} = \mathbf{J} + j\omega \varepsilon \mathbf{E}
\tag{7}
$$
其中, $\varepsilon$ 是介电常数(影响电场), $\mu$ 是磁导率(影响磁场)。这两项描述了材料怎么影响电磁场的传播。
当物体(如纤维)被一束入射波照射时,入射电场和磁场分别用 $\mathbf{E}_i$ 和 $\mathbf{H}_i$ 表示。但是物体的存在改变了这些场,使得我们观察到的是总场。
$$
\mathbf{E}_1 = \mathbf{E}_i + \mathbf{E}_s, \quad \mathbf{H}_1 = \mathbf{H}_i + \mathbf{H}_s
\tag{8}
$$
简而言之,总场 = 入射场 + 散射场。
光能量随着散射场 $\mathbf{E}_s$ 和 $\mathbf{H}_s$ 向外传播,因此计算纤维的散射函数是关键。怎么算呢?
全波模拟是最为准确的。进行全波模拟需要将物体离散化为网格,并且需要高分辨率(一般来说,每个波长至少10个网格单元),这导致需要处理百万级别的网格单元。在上一篇文章也有提及。
也就是说,即便是模拟一个仅仅几十微米长的短纤维段,也需要处理数百万个网格单元。
因此,采用 物理光学近似(PO)。在PO中,物体表面的电流和磁流(分别记作 $J$ 和 $M$ )可以看作是散射场的次级源头。电磁流产生了二次辐射,形成散射波。PO假设物体表面只会发生单次反射,忽略多次反射和复杂的衍射效应。得到表面的电流和磁流之后,计算他们产生的散射波。通过从表面电流和磁流中推导出这些远场波的性质。
光一个PO还不够,还得揉个八叉树算法进去加速远场计算。
具体地,PO做了两个简化假设:单次散射与局部平面假设。这个方法也足够通用。

如上图,某物体表面采样了多个点,近似为平面。计算切平面电流和磁场,进而产生一个散射场。通过这个散射场,计算这些电流和磁流产生的远场散射波。与此同时,使用Octree结构划分为更小的体素。每个叶节点的计算结果会聚合至父节点,得到总的辐射贡献。
表面电流、磁流的计算是PO模拟中非常关键的一步。对于每一个采样点,存储其法向量 $n(r{\prime})$ 和面积信息。接下来再每个小平面计算入射波和表面电流的相互作用。
根据入射波的方向 $e_i$ 和表面法向 $n(r{\prime})$ ,将入射电场分解为平行极化和垂直极化分量。分解的原因是,平行极化和垂直极化在菲涅尔方程中,是完全不同的表达。
平行极化分量:光的电场平行于入射光线的反射面。
垂直极化分量:光的电场垂直于入射光线的反射面。
因此,得到入射场 $E_i$ 被分解为平行极化的分量 $E_i^p$ 和垂直极化的分量 $E_i^s$ ,长这个样子: $E_i = E_i^p + E_i^s$ 。
反射场 $E_r$ 被表示为平行极化和垂直极化的分量之和,入射场旁边的系数表示菲涅尔方程中的反射:
$$
E_r = E_r^p + E_r^s = F^p E_i^p + F^s E_i^s
\tag{9-1}
$$
然后,总电场 $E_1$ 是入射场和反射场的总和:
$$
E_1 = E_i + E_r
\tag{9-2}
$$
根据中学物理,我们知道电会生磁,磁也会生电。因此有如下表达:
$$
M = -n \times E_1,
J = n \times H_1
\tag{10}
$$
因此,根据入射场和反射场就可以计算出表面的感应电流和磁流。得到电流和磁流后,计算远场的散射波。
在理论上,入射场可以是任意的。但是这里作者用了Gaussian-windowed平面波。这种波的振幅遵循正态分布,好算。
总结一下,这里将入射光分解为两个分量,用菲涅尔方程算反射场。进而将反射场与入射场相加,得到总场。通过电/磁场与电/磁流的关系,计算表面的感应电/磁流。这样就可以模拟纤维的散射了。
也就是说,计算纤维表面的电流和磁流的确可以得到光的散射行为。
上一节通过表面电流得到表面电流和磁流。本节用这个信息来计算远场散射。
基于惠更斯原理(Huygens’s Principle)将原本的散射问题转化为辐射问题。
惠更斯原理指出,每个波前的电都可以看作新的次级波源。一环扣一环的感觉。
毛发纤维表面的电流 $J$ 和 磁流 $M$ 被视为光线的次级光源,然后重新辐射出来,得到散射场。
这里就有点难了,涉及到电磁学中的矩量法(Method of Moments, MoM)。读者可以深入研究一下Gibson[2021]这本书,学会了一定要好好教我。但是没关系,我从闫老师2021年的paper中找了一张图,保证你能看懂。

图中的红色小球表示的次级辐射源,各自向外辐射,类似于表面电流和磁流产生的次级辐射波。
次级辐射源向各个方向发射等强度的波,这与本文散射公式中每个表面点对所有方向都有散射贡献的思想一致。
图中观察了距离光源远场区域(距离为 $r$ )的一小片区域( $\delta \mathbf{r}$ )。在远场区域中,分析波在不同位置 $\mathbf{r}_1$ 和 $\mathbf{r}_2$ 的行为,分别沿着 $\hat{r}_1$ 和 $\hat{r}_2$ 两个方向观察。这与散射公式中,在远场处计算散射电场的行为非常相似。
图中右侧的光波会在远场叠加形成复杂的干涉条纹,这类似于散射公式中的积分项,将次级辐射源的电磁波在远处叠加。
用公式则表示为:
$$
E_s(\mathbf{r}) = j \omega \mu_0 \frac{e^{-jk_0 R}}{4\pi R} \hat{r} \times \int_\Gamma \left[ \hat{r} \times \mathbf{J}(r{\prime}) + \frac{1}{Z_0} \mathbf{M}(r{\prime}) \right] e^{jk_0 r{\prime} \cdot \hat{r}} d\mathbf{r{\prime}}
\tag{11}
$$
结合图来理解,公式描述的是散射电场 $E_s(\mathbf{r})$ 在远处(远场)某一点 $\mathbf{r}$ 处的表现,与距离呈 $1/R$ 关系衰减。这个公式是一个二维复数平面,也就是把麦克斯韦方程组的解看作时谐电磁波的形式。

看这个上式结构,形式上跟 $\mathbf{E}(\mathbf{r}, t) = \mathbf{E}_0 e^{j(\omega t – k \cdot \mathbf{r})}$ 很像,叫电场的常见时谐解。
对应起来。 $ j \omega \mu_0$ 这虚数项描述磁场对电场的影响,与电磁场的频率 $\omega$ 和真空中的磁导率 $\mu_0$ 相关。光波的频率越高,电场越强。 $e^{-jk_0 R}$ 是相位因子,表示光波在传播中的相位变化。波数 $k_0 = \frac{2\pi}{\lambda}$ , $\lambda$ 是电磁波的波长。表示波传播到距离 R 的地方时,电场的相位会发生变化。 $\hat{r}$ 是从散射物体指向观察点的单位向量,表示波的传播方向。叉乘 $\times$ 操作符表示计算的是电场的方向。确保计算出的电场和波传播的方向一致。
积分项 $ \int_\Gamma \left[ \hat{r} \times \mathbf{J}(r{\prime}) + \frac{1}{Z_0} \mathbf{M}(r{\prime}) \right] e^{jk_0 r{\prime} \cdot \hat{r}} d\mathbf{r{\prime}} $ 是该公式的核心。对物体表面 $\Gamma$ 进行积分,得到毛发表面每个点对散射电场的贡献。每个点的表面电流加表面磁流之和,再点乘相位因子。进一步的, $\mathbf{J}(r{\prime})$ 是表面电流密度, $\hat{r} \times$ 确保了电流产生的散射电场与波的传播方向 $\hat{r}$ 正交。 $Z_0$ 是自由空间阻抗(free space impedance),具体数值 $Z_0 = \sqrt{\frac{\mu_0}{\varepsilon_0}} \approx 377 \, \Omega$ ,个人理解该常数是真空中电场和磁场的比例关系,电场和磁场的抗阻不同因此需要统一尺度才能线性相加,即将磁流规范化到和电流类似的形式。指数项也是相位因子,不做过多解释。
细心的读者可能发现,为何表面电流密度 $\mathbf{J}(r{\prime})$ 有叉乘 $\hat{r} \times \mathbf{J}(r{\prime})$ ,而表面磁流密度 $\mathbf{M}(r{\prime})$ 没有叉乘。
根据麦克斯韦方程组,电场和磁场是互相正交的。电流 $\mathbf{J}$ 会产生磁场,变化的磁场再反过来产生电场。电场和磁场是相互耦合的。但是,我们重新看看麦克斯韦方程组的下面两条。
$$
\nabla \times \mathbf{E} = -\frac{\partial \mathbf{B}}{\partial t}
\
\nabla \times \mathbf{B} = \mu_0 \mathbf{J} + \mu_0 \varepsilon_0 \frac{\partial \mathbf{E}}{\partial t}
$$
磁场的生成是直接通过位移电场来实现的,方向已经和电场正交。而电场的产生是磁场的变化率,方向性需要调整。
换一个角度来理解,积分项左边描述的是电磁场强度随距离衰减,也考虑了相位变化和方向性。积分项描述每个表面点的电磁流与相位贡献。
总结,公式(11)是一个精确的表达,描述物体表面电磁场如何在距离 $r$ 处散射。得到了电场的公式,磁场就很容易计算了。
当散射距离 $R$ 足够大时,远场的简化表达式如下,可以直接忽略近场效应。换句话说,在远场中,传播特性已经趋于稳定,因此可以把积分项简化为与散射方向 $\hat{r}$ 相关的项,即 $E_s^{\text{far}}(\hat{r})$ 。
$$
E_s(r) = \frac{e^{-jk_0 R}}{R} E_s^{\text{far}}(\hat{r}), \quad H_s(r) = \frac{e^{-jk_0 R}}{R} H_s^{\text{far}}(\hat{r})
\tag{12}
$$
此外,若直接计算每个点的贡献,时间复杂度为 $O(MN)$ ,即离散点数$M$ $*$ 散射方向数$N$ 。此处引入八叉树,通过空间划分减少计算表面的离散点数,时间复杂度降到了 $O(M+log(M)N)$ 。具体实现方式在4.3。
用多层快速物理光学(Multilevel Fast Physical Optics, MFPO)加速远场散射计算。
Chew[2001]提出的多层快速多极子算法(MLFMA),用于加速求解电磁场散射问题。这个算法首先为例如毛发表面构建一个八叉树结构,每个叶节点表示一个采样点。构建完Octree后计算每个叶节点的表面电流、磁流。接着从叶节点出发逐层向上累积。从原本的 $O(MN)$ 降低到 $O(M + \log(M)N)$ 。
接着作者介绍了八叉树加速算法的三个关键部分。首先是远场散射核(far-field scattering kernel)。
$$
e^{jk_0 r{\prime} \cdot \hat{r}} = e^{jk_0 (r{\prime} – c_L) \cdot \hat{r}} \prod_{i=1}^{L} e^{jk_0 (c_i – c_{i-1}) \cdot \hat{r}}
\tag{13}
$$
最终目标是计算物体表面每个点的电磁波对某个远场观察区域(距离为 $R$ ,方向为 $\hat{r}$ )的散射贡献。具体是求散射电场 $E_s(r)$ 和磁场 $H_s(r)$ ,即从毛发表面上的每个点 $r{\prime}$ 发出的电磁波在远场中的贡献。公式等号左边是某表面点 $r{\prime}$ 到远场观察方向 $\hat{r}$ 的相位变化。最终的时间复杂度为 $O(MN)$ 。作者把表面分为不同的区域,每个区域指定一个参考中心点,公式中的 $c_0, c_1, …, c_L$ 是八叉树中不同层次的节点中心。
光是这样也没办法减少计算量。因此需要将距离较近的表面点,由于它们的相位变化差别很小,通过八叉树的高层节点合并这些点的贡献。
还是用闫老师这幅图来解释。对于远场的某个区域 $\delta \mathbf{r} $ ,首先还是会精确计算所有采样点对参考点 $\mathbf{r}$ 的贡献。但是该区域的其他点则用八叉树的父节点进行近似计算。也就是说,旁边的 $\mathbf{r}_1$ 和 $\mathbf{r}_2$ 就不再需要考虑这么多的采样点了,而是直接用八叉树得到的总贡献。

作者定义了一个方向集,八叉树每个父节点都存储了关于不同方向集的累积贡献数据。因此,父节点不仅包含空间上的信息,还包含多个散射方向上的累积信息。最终在根节点得到完整的360度散射场分布。

接下来,从树的第二层开始,依次向上合并。上采样具体方法是对子节点的方向集中的散射贡献做正向FFT,接着zero-padding扩充频域数据最后逆向FFT转换为空间域。最终,使得父节点可以在不同方向上得到更加精确的散射信息。
八叉树加速效果很好。三层树效果最佳。越复杂的纤维优化效果越好。

毛发纤维横截面一般不是完美的圆形,而是椭圆形。通过椭圆的主半径 $r_1$ 和次半径 $r_2$ 来定义纤维的几何参数。为了模拟纤维表面的微观粗糙度,作者在椭圆柱体的表面上叠加了一个高斯随机高度场(Gaussian random height field),模拟真实的纤维表面。进一步地,加入了角质层倾斜(cuticle tilt),模拟薄片在纤维表面倾斜排列。
通过对比传统的基于光线的毛发模型,波动光学模拟发现,除了XIA[2020]预测到的显著的向前散射(forward-scattering)现象,还观察到了复杂的波长依赖颗粒图案(wavelength-dependent granular patterns)。在转换为RGB颜色时,会生成丰富的色彩效果。

研究指出了一些从模拟中观察到的规律:

实用纤维散射模型(A PRACTICAL FIBER SCATTERING MODEL)旨在解决纤维的微观几何变化和复杂散射行为。
以前的研究一般是用Lut存散射分布函数,这种方法空间消耗巨大,需要同时记录纵向和方位角散射分布。
现在,作者提出了一种基于小波噪声表示的紧凑纤维散射模型,可表示的几何复杂度提高了,散射效果更好了。
简单的说,作者想要紧凑的统计散斑现象,使其可以通过均值、方差、自相关函数(ACF)等统计量来表示。因此作者借助了散斑理论(Speckle Theory)来描述光随机干涉所产生的图样。
这里作者上来就提到完全发展的散斑 (Fully Developed Speckle)这个概念。以下是个人理解。在光线照射到一个粗糙的表面(比如纤维/毛发表面)时,表面上的每个小区域都会散射光线。由于表面的微小不规则性,散射的光线之间会相互干涉,产生一个复杂的光强分布。这种分布表现为一系列亮点和暗点,我们称之为散斑。表面的微小特征(比如粗糙度)在整个照射区域(相对于光线的波长来说)变得足够不规则,导致散射光线在各个点上的相位和强度是随机的,这就是所谓的完全发展的散斑。
这个时候,可以用Goodman[2007]的complex Gaussian distribution来描述Fully Developed Speckle。即,电磁场的实部 $\mathcal{R}$ 和虚部 $\mathcal{I}$ 在空间上服从复高斯分布(complex Gaussian distribution)。
$$
p_{\mathcal{R},\mathcal{I}}(\mathcal{R}, \mathcal{I}) = \frac{1}{2 \pi \sigma^2} \exp\left( – \frac{\mathcal{R}^2 + \mathcal{I}^2}{2\sigma^2} \right)
\tag{14}
$$
场的实部和虚部是独立且正态分布的。均值为零,方差相同。
电磁场光强 $I$ 和该光强分布的服从指数分布(exponential distribution)的概率密度函数:
$$
I = \mathcal{R}^2 + \mathcal{I}^2 \ p_I(I) = \frac{1}{2\sigma^2} \exp\left( -\frac{I}{2\sigma^2} \right)
\tag{15}
$$
这些公式没啥可讲的,总之散斑场就是很随机哒!
作者让光强遵循指数分布,确保在单个方向的统计特性。其次,通过研究两个点之间的光强统计关系,衡量两个点的ensemble average。这里用autocorrelation function (ACF)。
$$
C(I_{p_1}, I_{p_2}) = \frac{\overline{(I_{p_1} – \overline{I_{p_1}})(I_{p_2} – \overline{I_{p_2}})}}{\sigma(I_{p_1}) \sigma(I_{p_2})}
\tag{16}
$$
自相关函数的值介于 -1 和 1 之间,当值接近 1 时,说明两个光强的散射行为非常相近。这是高效再现纤维散射场中颗粒结构的关键。
作者引入小波噪声(Wavelet noise)来表示散斑的噪声分量 $f(\theta_h, \phi_h, \lambda)$ 。具体公式如下:
$$
f(\mathbf{x}) = \sum_{b=0}^{n-1} w_b(\mathbf{x}) I\left(2^b g_{\lambda}(\mathbf{x})\right)
\tag{17}
$$
公式的核心思想是将散斑的光强分解为不同频率层次的噪声,并且加权组合。
通过调整不同频率带的权重,生成自相关函数 $ C_f(\mathbf{x}_1, \mathbf{x}_2)$ 接近与目标自相关函数的最终噪声。
根据维纳-辛钦定理(Wiener-Khinchin theorem),自相关函数可以通过傅里叶变换(Fourier Transform)来计算。具体公式如下:
$$
C_f(\mathbf{x}_1, \mathbf{x}2) = \mathcal{F} \left( \mathcal{F}^{-1} \left( \sum{b=0}^{n-1} w_b I_b \right)^2 \right)
\tag{18}
$$
这表示我们可以通过计算小波噪声的傅里叶变换,来获得自相关函数。自相关函数和功率谱密度函数是一对傅里叶变换,太Amazing了。
这里原论文给了一个通过频率带加权求和近似计算ACF的证明。
省流:通过对噪声的各个频率带进行加权,可以近似得到整个噪声的自相关函数,而不用处理不同频率带之间的交互。
通过最小二乘法找到非负权重 $v_b$ ,以使得每个频率带的自相关函数 $C_b(\mathbf{x}1, \mathbf{x}_2)$ 的加权和可以逼近目标自相关函数 $C_t(\mathbf{x}_1, \mathbf{x}_2)$ 。
$$ C_t(\mathbf{x}_1, \mathbf{x}2) \approx \sum{b=0}^{n-1} v_b C_b(\mathbf{x}_1, \mathbf{x}_2) \tag{19} $$ 计算完权重后,要确保能量守恒。也就是调整噪声函数 $f(\mathbf{x})$ 的期望值 $\mathbb{E}[f(\mathbf{x})] = 1$ 。 $$ \begin{aligned} & \mathrm{E}\left[S{\text {avg }}\left(\theta_i, \theta_r, \phi_r, \phi_r, \lambda\right) f\left(\theta_h, \phi_h, \lambda\right)\right] \\\
& =S_{\text {avg }}\left(\theta_i, \theta_r, \phi_r, \phi_r, \lambda\right) \mathrm{E}[f(\mathbf{x})] \
& \approx S_{\text {avg }}\left(\theta_i, \theta_r, \phi_r, \phi_r, \lambda\right)
\end{aligned}
\tag{20}
$$
虽然效果好,但是有局限性。比如在grazing incidence angles的地方(光线几乎平行表面的情况),拟合准确性下降,导致散射准确度下降。Degeneration in the Forward Direction问题,当光线处于正前方方向(光线方向与表面法线一致)时,半向量方向会退化。
计算了x-y平面中的散射强度,并通过3600个方位角 $\phi_r$ 进行计算,最终将这些角度平均到360个方向上。
首先对比Mie散射。在grazing angles不如Mie散射。物体的半径相对于波长较大时,PO近似更为精确。当物体曲率较小,就不准。

然后对比BEM。模拟一个小椭球体的波散射。BEM用了三个小时,PO花了两秒。
最后对比2D BEM。用一维高斯高度场(1D Gaussian height fields)包裹在圆形和椭圆形的横截面上。PO完胜。
使用了波长为 633nm 的 HeNe 激光器,光束的光斑大小为 0.7mm(沿着头发的长度方向)× 3mm(垂直于头发方向)。激光通过一个小孔照射在人类头发样本的一个小区域。

总之就是效果好!
一个字,好!
整合进PBRT-v3。原本的基于光线的模型记作 $S_{\text{ray}}$ ,而衍射模型记作 $S_{\text{diffract}}$ 。
对于衍射,这里近似为单缝衍射,而缝的宽度等于圆柱体(纤维)的直径。
$$
f_{\text{diffract}}(\theta_i, \phi_d, a) = a \cos \theta_i \cdot \text{sinc}^2(a \cos \theta_i \sin \phi_d)
\tag{22}
$$
这种衍射模型被用来和纵向函数结合,得到一个完整的双向曲面散射分布函数(BCSDF)。将衍射因子以 $50 \times 50 \times 200$ 的表格形式进行预计算。并使用同样大小的表格进行重要性采样。

消光截面可以简单理解为光与物体相互作用的“有效面积”。 纤维的消光截面会比它的实际几何截面大。消光截面会接近于几何截面的两倍。光在纤维上既发生反射也发生衍射,因此我们需要把总能量分配给这两种现象。根据经验,可以把一半的能量用于衍射,另一半用于反射。
$$
S_{\text{diffract}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) = \frac{1}{2} \left[S_{\text{ray}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) + f_{\text{diffract}}(\theta_i, \phi_d, D/\lambda)\right]
\tag{23}
$$
通过重要性采样,公平地考虑光的反射和衍射。
接下来,最终的描述光散射现象的渲染公式,形式整得挺好:
$$
S_{0,\text{prac}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) = S_{0,\text{avg}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) f(\theta_h, \phi_h, \lambda)\ \\
= \frac{1}{2} \left[ S_{\text{ray}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) + f_{\text{diffract}}(\theta_i, \phi_d, D/\lambda) \right] f(\theta_h, \phi_h, \lambda)\
\tag{24}
$$
反射+衍射+噪声。噪声函数 $f(\theta_h, \phi_h, \lambda)$ 在最后,使得散射的光线不在集中在少数方向。
重点看这个部分:
$$
S_{0,\text{prac}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) = S_{0,\text{avg}}(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) f(\theta_h, \phi_h, \lambda)
$$
$S_{0,\text{avg}}$ 表示毛发表面平均反射/折射和衍射的行为,这是通过预处理(BSDF表格)计算得到的。
接下来讲讲如何从PO提取BCSDF。
通过麦克斯韦方程得到散射的电场和磁场($E_s^{\text{far}}$ 和 $H_s^{\text{far}}$)。
接着用坡印廷矢量(Poynting vector)计算能量流。相当于计算光的强度。
$$
\langle S \rangle = \frac{1}{2} \text{Re}(E \times H^) \tag{25}
$$
为了将模拟结果用于渲染,将散射强度与入射功率关联起来。散射强度的计算公式,其中 $R^2$ 是远场球面面积:
$$
I_s(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) = \langle S(\mathbf{r}) \rangle \cdot \hat{n} R^2 \tag{26}
$$
散射功率 $P_s$ 和吸收功率 $P_a$ 分别通过积分散射光和吸收光的强度来计算。
$$
P_s = \int_{\Omega} I_s(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) \, d\omega \tag{27}
$$
对于吸收功率 $P_a$ ,通过表面上的坡印廷矢量积分计算。
$$
\begin{aligned}
P_a & =\int_{\Gamma} \frac{1}{2} \operatorname{Re}\left(\mathbf{E}1 \times \mathbf{H}_1^{}\right) \cdot \hat{\mathbf{n}}_1(A) d A \ & = \\
\int{\Gamma} \frac{1}{2} \operatorname{Re}\left(\mathbf{J}^{} \times \mathbf{M}\right) \cdot \hat{\mathbf{n}}_1(s) d s
\end{aligned}
\tag{28}
$$
最终,BCSDF搞出来了。
$$
S(\theta_i, \phi_i, \theta_r, \phi_r, \lambda) = \frac{I_s(\theta_i, \phi_i, \theta_r, \phi_r, \lambda)}{|P_a – P_s|}
\tag{30}
$$
最后用了一个5D的表格。
1D 维度描述波长。
2D 描述入射光的方向。
2D 描述出射光的方向。
可以通过散射的记忆效应减少存储需求。

渲染时,对于每个入射光方向,查询相邻的表格数据,应用相应的角度偏移(记忆效应中的角度偏移量)。
最终使用的表格大小为 $25 \times 32 \times 72 \times 180 \times 360$ ,非常大,约15GB的内存需求。


与XIA[2020]相比,新模型更加鲜艳。色彩光斑(colorful glints)更好。体现多种波长对毛发产生的光斑。

第一篇能够实际应用的 3D 波动光学纤维散射模型。
能够生成光学散射中常见的细微光斑(speckle patterns)。
虽然 3D 模拟的精度很高,但它的内存占用和计算成本非常大。提出了噪声实用模型,通过捕捉纤维散射光斑的统计特性(如自相关函数),减少计算量。
目前该模型主要用于第一阶反射模式的模拟。未来可以扩展到更高阶的散射模式。
高阶模式时可能需要进一步开发新技术来预测或测量高阶模式的统计特性。