跳过正文

Interview III: 项目分析

·8760 字·18 分钟

Virtual Position
#

ReBLUR计算镜面反射虚拟位置使用高斯球面镜成像公式解出像距/物距.

mag=12cOz1 \begin{equation} \mathrm{mag} = \frac{1}{2 \cdot c \cdot O_z - 1} \end{equation}

整体光路如下: 主光线从像素打到着色点X=PX=P, 再沿反射方向走hitDist\mathrm{hitDist}命中物点OO; 把表面当作曲面镜, 用mag\mathrm{mag}算出虚像XvirtX_{virt}, 沿视线方向摆放, 供时间重投影使用.

reblur-path

下面把表面局部视为曲率为cc的球面镜, 推导mag\mathrm{mag}.

设球面镜:

  • 半径RR, 曲率中心CC, 顶点PP, 焦点FF(PF=R/2\overline{PF}=R/2)
  • 光轴为直线CPCP
  • 轴外物点OO, 物距do=OPd_o = \overline{OP}(沿轴), 物高hoh_o
  • 像点II, 像距di=IPd_i = \overline{IP}, 像高hih_i

从物点顶端发出两条特殊光线, 汇聚到像点II.

  • 平行光线: 平行于光轴入射, 反射后过焦点FF
  • 主光线: 射向顶点PP, PP处法线即光轴

mirror-geometry

由相似三角形可得:

hiho=dido. \begin{equation} \frac{|h_i|}{h_o} = \frac{d_i}{d_o}. \end{equation}

凹面镜像在负轴, 故倒立, 横向放大率为:

m=hiho=dido, \begin{equation} m = \frac{h_i}{h_o} = -\frac{d_i}{d_o}, \end{equation}

傍轴近似认为镜面在位置上为平面, 以FF为公共顶点的两个相似三角形给出

hof=hidif,f=R2, \begin{equation} \frac{h_o}{f} = \frac{|h_i|}{d_i - f}, \qquad f = \frac{R}{2}, \end{equation}

两式联立消去hi/ho|h_i|/h_o:

dido=diff=dif1. \begin{equation} \frac{d_i}{d_o} = \frac{d_i - f}{f} = \frac{d_i}{f} - 1. \end{equation}

两边同除did_i并整理, 得Gaussian镜面方程.

1do+1di=1f=2R. \begin{equation} \frac{1}{d_o} + \frac{1}{d_i} = \frac{1}{f} = \frac{2}{R}. \end{equation}

记曲率c=1Rc = \dfrac{1}{R}, 物距do=Ozd_o = O_z, 解像距:

1di=2c1do=2cdo1do,di=do2cdo1. \begin{equation} \frac{1}{d_i} = 2c - \frac{1}{d_o} = \frac{2c\,d_o - 1}{d_o}, \qquad d_i = \frac{d_o}{2c\,d_o - 1}. \end{equation}

ReBLUR需要的是沿视线的像距与物距之比:

mag=dido=12cOz1, \begin{equation} \mathrm{mag} = \frac{d_i}{d_o} = \frac{1}{2 \cdot c \cdot O_z - 1}, \end{equation}

平面镜即RR \to \infty, 亦即c=0c = 0, 此时di=dod_i = -d_o, 虚像在镜后.

mag=101=1, \begin{equation} \mathrm{mag} = \frac{1}{0 - 1} = -1, \end{equation}

Ray Cone
#

光锥从像素以张角α\alpha射出, 命中点距相机tt时, cone在该点的宽度为:

w0=2ttanα2αt. \begin{equation} w_0 = 2t\tan\frac{\alpha}{2} \approx \alpha t. \end{equation}

在曲面上反射时, 曲率会改变cone的张角. RT Gems用标量β\beta建模: 平面 β=0\beta=0 张角不变, 凸面张角增大, 凹面 张角减小, 曲率较大的凹面导致张角为负, 在镜面上方汇聚.

raycone-curve

反射算子R(n)=I2nnR(\mathbf{n})=I-2\mathbf{n}\mathbf{n}^\top给出dr=d2(dn)n\mathbf{d}_r=\mathbf{d}-2(\mathbf{d}\cdot\mathbf{n})\mathbf{n}, 每条光线的天顶角关系为:

θr=2θnθd, \begin{equation} \theta_r = 2\theta_n - \theta_d, \end{equation}

求相邻光线微分, dθd\mathrm{d}\theta_d为入射锥张角, dθr\mathrm{d}\theta_r为出射锥体张角, 2dθn2\mathrm{d}\theta_n为曲率贡献. 例如平面镜dθn=0\mathrm{d}\theta_n=0, dθr=dθd\mathrm{d}\theta_r=-\mathrm{d}\theta_d

dθr=2dθndθd. \begin{equation} \mathrm{d}\theta_r = 2\,\mathrm{d}\theta_n - \mathrm{d}\theta_d. \end{equation}

记法线变化角ϕ=dθn\phi=\mathrm{d}\theta_n:

β=2dθn=2ϕ. \begin{equation} \beta = 2\,\mathrm{d}\theta_n = 2\phi. \end{equation}

单位法线满足nn=1\mathbf{n}\cdot\mathbf{n}=1, 像素坐标微分为nnx=0\mathbf{n}\cdot\frac{\partial\mathbf{n}}{\partial x}=0, 即nxn\frac{\partial\mathbf{n}}{\partial x}\perp\mathbf{n}. 移动一个像素得一阶近似新法线n+nx\mathbf{n}+\frac{\partial\mathbf{n}}{\partial x}, 可基于二者形成的直角三角形计算曲率贡献.

ϕx=arctannx,ϕy=arctanny. \begin{equation} \phi_x=\arctan\left\|\frac{\partial \mathbf{n}}{\partial x}\right\|,\qquad \phi_y=\arctan\left\|\frac{\partial \mathbf{n}}{\partial y}\right\|. \end{equation}

凸面上位置与法线沿同向变化, 反之为凹面, 可基于符号区分.

s=sign(Pxnx+Pyny) \begin{equation} s=\mathrm{sign}\left(\frac{\partial P}{\partial x}\cdot\frac{\partial \mathbf{n}}{\partial x}+\frac{\partial P}{\partial y}\cdot\frac{\partial \mathbf{n}}{\partial y}\right) \end{equation}

代入β=2ϕ\beta=2\phi得:

β=2sϕ=2sϕx2+ϕy2=2sarctan2nx+arctan2ny2snx2+ny2. \begin{equation} \begin{aligned} \beta &= 2s\phi = 2s\sqrt{\phi_x^2+\phi_y^2}\\ &= 2s\sqrt{\arctan^2\left\|\frac{\partial \mathbf{n}}{\partial x}\right\|+\arctan^2\left\|\frac{\partial \mathbf{n}}{\partial y}\right\|}\\ &\approx 2s\sqrt{\left\|\frac{\partial \mathbf{n}}{\partial x}\right\|^2+\left\|\frac{\partial \mathbf{n}}{\partial y}\right\|^2}. \end{aligned} \end{equation}

nx\frac{\partial\mathbf{n}}{\partial x}不依赖G-Buffer, 可用光线微分计算. 相机单位基为x\mathbf{x}(右)、y\mathbf{y}(上)、z\mathbf{z}(前), 令aa为宽高比, f=tanfov2f = \tan\frac{\mathrm{fov}}{2}, cx,yc_{x,y}为NDC坐标, 非归一化方向D=cxafx+cyfy+z\mathbf{D}=c_x\,af\,\mathbf{x}+c_y\,f\,\mathbf{y}+\mathbf{z}. 令分辨率为w×hw \times h, 对像素坐标求微分:

xˉ=Dx=2afwx,yˉ=Dy=2fhy. \begin{equation} \bar{\mathbf{x}}=\frac{\partial\mathbf{D}}{\partial x}=\frac{2af}{w}\mathbf{x},\qquad \bar{\mathbf{y}}=\frac{\partial\mathbf{D}}{\partial y}=\frac{2f}{h}\mathbf{y}. \end{equation}

单位方向d=DD\mathbf{d}=\frac{\mathbf{D}}{\lVert\mathbf{D}\rVert}的微分使用归一化雅可比:

dx=(DD)xˉ(Dxˉ)D(DD)3/2, \begin{equation} \frac{\partial\mathbf{d}}{\partial x}=\frac{(\mathbf{D}\cdot\mathbf{D})\,\bar{\mathbf{x}}-(\mathbf{D}\cdot\bar{\mathbf{x}})\,\mathbf{D}}{(\mathbf{D}\cdot\mathbf{D})^{3/2}}, \end{equation}

命中点P=O+tdP=O+t\,\mathbf{d}, 针孔相机光线共原点, 因此Ox=0\frac{\partial O}{\partial x}=0, 令qx=tdx\mathbf{q}_x=t\frac{\partial\mathbf{d}}{\partial x}. 令三角形边为e1=P1P0\mathbf{e}_1=P_1-P_0, e2=P2P0\mathbf{e}_2=P_2-P_0, 记

c0=e2×d,c1=d×e1,k=(e1×e2)d, \begin{equation} \mathbf{c}_0=\mathbf{e}_2\times\mathbf{d},\quad \mathbf{c}_1=\mathbf{d}\times\mathbf{e}_1,\quad k=(\mathbf{e}_1\times\mathbf{e}_2)\cdot\mathbf{d}, \end{equation}

重心参数化得P=P0+b0e1+b1e2P=P_0+b_0\mathbf{e}_1+b_1\mathbf{e}_2, 它又等于光线式 P=O+tdP=O+t\mathbf{d}, 等式求微分:

b0xe1+b1xe2=qx+txd. \begin{equation} \frac{\partial b_0}{\partial x}\mathbf{e}_1+\frac{\partial b_1}{\partial x}\mathbf{e}_2=\mathbf{q}_x+\frac{\partial t}{\partial x}\mathbf{d}. \end{equation}

两边点乘c0\mathbf{c}_0可用正交性消去b1x\frac{\partial b_1}{\partial x}tx\frac{\partial t}{\partial x}项, 点乘 c1\mathbf{c}_1 同理, 再除以 kk:

b0x=c0qxk,b1x=c1qxk. \begin{equation} \frac{\partial b_0}{\partial x}=\frac{\mathbf{c}_0\cdot\mathbf{q}_x}{k},\qquad \frac{\partial b_1}{\partial x}=\frac{\mathbf{c}_1\cdot\mathbf{q}_x}{k}. \end{equation}

对法线重心重新插值求微分:

nx=b0x(n1n0)+b1x(n2n0), \begin{equation} \frac{\partial\mathbf{n}}{\partial x}=\frac{\partial b_0}{\partial x}(\mathbf{n}_1-\mathbf{n}_0)+\frac{\partial b_1}{\partial x}(\mathbf{n}_2-\mathbf{n}_0), \end{equation}

raycone-sphere

多次弹射缺少屏幕空间法线微分, 近似图元为圆, 使用边曲率定义k=ΔϕΔs=1rk = \frac{\Delta\phi}{\Delta s} = \frac{1}{r}估计Δϕ\Delta \phi.

Δϕ=rΔs=2rarcsinw2r=2karcsinkw2nd \begin{equation} \Delta \phi = r\Delta s = 2r\arcsin\frac{|w'|}{2r} = \frac{2}{k}\arcsin\frac{k|w|}{-2\mathbf{n}\cdot\mathbf{d}} \end{equation}

小张角下arcsinxx\arcsin x \approx x, Δsw\Delta s \approx |w'|, 张角变化简化为:

βc=2kwnd. \begin{equation} \beta_c = -2k\frac{|w|}{\mathbf{n}\cdot\mathbf{d}}. \end{equation}

三角形曲率不易精确求得, 退而用逐边近似. 边P0P1P_0P_1的曲率(Reed)为

k01=1r=(n1n0)(P1P0)(P1P0)(P1P0), \begin{equation} k_{01} = \frac{1}{r} = \frac{(\mathbf{n}_1-\mathbf{n}_0)\cdot(P_1-P_0)}{(P_1-P_0)\cdot(P_1-P_0)}, \end{equation}

多次弹射对精度要求低, 取三边平均即可:

k=k01+k12+k203. \begin{equation} k = \frac{k_{01}+k_{12}+k_{20}}{3}. \end{equation}

除几何曲率外, 材质粗糙度α\alpha也会展宽cone. 实践中主光线β=σ4\beta = \frac{\sigma}{4}, 次级光线β=σ\beta = \sigma.

σ2=12α21α2, \begin{equation} \sigma^2 = \frac{1}{2}\frac{\alpha^2}{1-\alpha^2}, \end{equation}

光锥近似成沿d\mathbf{d}, 半径wi2\frac{w_i}{2}的圆柱, 与法线为n\mathbf{n}的三角形相交, 施密特正交化得椭圆轴h1\mathbf{h}_1, h2\mathbf{h}_2. 相似三角形把轴伸到圆柱面(k=1,2k=1,2), 在命中点PP沿轴取P+a1P+\mathbf{a}_1P+a2P+\mathbf{a}_2, 用重心坐标插值纹理坐标, 减去中心纹理坐标得梯度.

ak=wi/2hk(dhk)dhk. \begin{equation} \mathbf{a}_k = \frac{w_i/2}{\lVert \mathbf{h}_k-(\mathbf{d}\cdot\mathbf{h}_k)\mathbf{d}\rVert}\,\mathbf{h}_k. \end{equation}

Ambient Occlusion
#

屏幕空间像素共线则代表对应的光线共面, 因此可求基于中心像素光线的半球切面积分. 环境光遮蔽是基于法线的, 转为基于视线. 法线拆分为投影到/垂直于切面的分量, 切面上立体角和法线点积相当于只点积投影分量, 因此γ=vnp\gamma=\mathbf{v}\cdot\mathbf{n}_p.

在屏幕空间沿ϕ\phi对应的切面向两侧搜索, 评估深度得到的最大视线夹角为θ0(ϕ)\theta_0(\phi)θ1(ϕ)\theta_1(\phi), 令h0=max(θ0(ϕ),γpi2)h_0=\max(-\theta_0(\phi), \gamma - \frac{pi}{2}), h1=min(θ1(ϕ),γ+pi2)h_1=\min(\theta_1(\phi), \gamma + \frac{pi}{2}), 可得:

A(p)=1π0πh0h1cos(θγ)sinθdθdϕ \begin{equation} A(p)=\frac{1}{\pi}\int_0^\pi\int_{h_0}^{h_1}\cos(\theta-\gamma)|\sin\theta|\mathrm{d}\theta\mathrm{d}\phi \end{equation}

h0,1h_{0,1}已知时可得解析解, 被积函数积化和差展开:

cos(θγ)sinθ=12cosγsin2θ+12sinγ12sinγcos2θcos(θγ)sinθdθ=12θsinγ14cos(2θγ)A(p)ϕ=14i{1,2}(cosγ+2hisinγcos(2hiγ)). \begin{equation} \begin{aligned} \cos(\theta-\gamma)\sin\theta&=\tfrac{1}{2}\cos\gamma\sin2\theta+\tfrac{1}{2}\sin\gamma-\tfrac{1}{2}\sin\gamma\cos2\theta\\ \int\cos(\theta-\gamma)\sin\theta\,\mathrm{d}\theta&=\tfrac{1}{2}\theta\sin\gamma-\tfrac{1}{4}\cos(2\theta-\gamma)\\ A(p)_\phi&=\frac{1}{4}\sum_{i\in\{1,2\}}\Big(\cos\gamma+2h_i\sin\gamma-\cos(2h_i-\gamma)\Big). \end{aligned} \end{equation}

Depth Of Field
#

薄透镜成像公式给出物距dod_o与像距did_i的关系:

1do+1di=1F. \begin{equation} \frac{1}{d_o} + \frac{1}{d_i} = \frac{1}{F}. \end{equation}

令对焦平面为PP, 像距为v=FPPFv = \dfrac{FP}{P-F}. 物点偏离对焦面时像点不聚焦于传感器, 光圈形成锥体在传感器上截出弥散圆. 令光圈直径A=F/NA = F/N, 物距dd处像距vd=FddFv_d = \dfrac{Fd}{d-F}, 由相似三角形, 传感器上弥散圆直径为c=Avdvvdc = A\dfrac{v_d - v}{v_d}. 代入化简:

c=AFPF(1Pd). \begin{equation} c = \frac{A F}{P - F}(1 - \frac{P}{d}). \end{equation}

近景与远景物体分别成像于传感器之后与之前并形成弥散圆, 落在对焦面上的物点才汇聚.

dof-coc

dd \to \infty1P/d11 - P/d \to 1, 得到最大远景弥散圆.

c=AFPF \begin{equation} c_\infty = \frac{A F}{P - F} \end{equation}

由于光路传播过程的遮挡, 弥散圆存在深度遮蔽; 同样的, 即使针孔相机中被遮挡的物体, 也有部分弥散圆到达成像平面.

dof-occlusion

较大的远景弥散圆对应较远的深度, 实时景深可以由远到近的采样来估计遮蔽以平滑远近交界处的景深, 同时近景像素使用相邻像素补充被遮蔽的远景产生的弥散圆.

Auto Exposure
#

N=N= f-stop, t=t= 快门时间, S=S= 感光度, L=L= 场景亮度, K=K= 校准常数. ISO 2720测光方程如下, 相机自动曝光获取LL后调整NN, SS, tt来满足测光方程.

N2t=LSK. \begin{equation} \frac{N^2}{t} = \frac{L \cdot S}{K}. \end{equation}

根据相机设置得到曝光值EVEV, EVEV+1+1进光量减半.

EV=log2N2t, \begin{equation} EV = \log_2\frac{N^2}{t}, \end{equation}

EVEV未锁定感光度, 归一到ISO 100得EV100EV_{100}, 成为只描述场景亮度的绝对量.

EV100=log2N2t100S=log2L100K. \begin{equation} EV_{100} = \log_2\frac{N^2}{t}\frac{100}{S} = \log_2\frac{L \cdot 100}{K}. \end{equation}

由ISO 2720饱和度公式求EV100EV_{100}某个值下传感器可容纳的最大亮度LmaxL_{max}.

Lmax=78Sq2EV100=781000.652EV100=1.22EV100. \begin{equation} L_{max} = \frac{78}{S \cdot q} \cdot 2^{EV_{100}} = \frac{78}{100 \cdot 0.65} \cdot 2^{EV_{100}} = 1.2 \cdot 2^{EV_{100}}. \end{equation}

取倒数归一化场景亮度, 得到自动曝光结果.

exposure=1Lmax=11.22EV100. \begin{equation} exposure = \frac{1}{L_{max}} = \frac{1}{1.2 \cdot 2^{EV_{100}}}. \end{equation}

实时自动曝光可以将亮度分桶以裁掉极端值. 局部曝光通过读取亮度下采样Mipmap实现, 每个等级的像素只统计局部亮度, 等级越高统计范围越大.

PRTGI
#

以立方体为单元生成探针, 探针摆放在8个顶点. 可设置烘焙LOD, LOD+1则边长翻倍. 根据最粗LOD的立方体划分场景区块.

每个区块执行X/Y/Z三轴投影保守光栅化, 若只做单轴投影, 与投影方向近乎平行的三角形投影面积趋近零,光栅化片元无法覆盖穿过的所有体素.

完成光栅化后基于Jump Flooding生成距离场并摆放探针, 同时使用物理系统光线进行阴影测试, 获取探针的虚拟偏移.

探针将场景光栅化到立方图G-Buffer(基础色, 法线, 世界位置), 用于后续采样面素. 烘焙时将探针分批, 同一批次绘制到一张图集上, 使得多个探针的绘制共享顶点着色器结果.

面素采样时在工作组内求解天空可见性球谐系数, 使用整数位置, 法线主方向和采样光线是否命中得到64位Morton码, 相同时执行面素去重, 高位相同则合并为砖块. 砖块计算平均位置和法线, 用于计算探针使用砖块时的权重.

运行时使用环形寻址流式加载探针, 根据各类优先级策略选择当前帧更新的探针. 为避免砖块由于相机运动被频繁的换入换出, 砖块记录引用计数, 归0后记录LRU, 多次流式加载后仍然未被使用再执行释放.

ReSTIR GI
#

半分辨率执行漫反射的追踪与时空复用, 追踪时以图块为单位执行俄罗斯轮盘, 测试失败后拒绝发射光线, 复用历史帧蓄水池.

空间复用时采样噪声以随机化采样半径与旋转方向, 造成缓存未命中, 通过让同一图块共享随机数提高缓存局部性, 提升五倍性能.

上采样时采样最近的4个蓄水池, 基于蓄水池与切面的距离添加权重, 由于漫反射方向无关, 可以添加余弦项后统计辐照度.

时域降噪时对样本执行色调映射, 且不执行邻域钳制, 避免样本方差导致的不稳定, 同时针对时域累积率较低的像素执行空间降噪.

SSSR
#

UE分离求和方法将镜面反射Monte-Carlo拆成两项, SSSR只统计辐照度积分, PDF不纳入统计, 这使得生成的样本不会超过场景颜色范围, 避免尖峰化的波瓣执行重要性抽样生成的样本方差过大. 同时也会将材质与光照分离, 抑制降噪产生的模糊.

1Nk=1NLi(ωi)f(p,ωi,ωo)cosθip(ωi,ωo)1Nk=1NLi(ωi)1Nk=1Nf(p,ωi,ωo)cosθip(ωi,ωo) \begin{equation} \frac{1}{N}\sum_{k=1}^N\frac{L_i(\omega_i)f(p, \omega_i, \omega_o)\cos\theta_i}{p(\omega_i, \omega_o)} \approx \frac{1}{N}\sum_{k=1}^N L_i(\omega_i)\frac{1}{N}\sum_{k=1}^N\frac{f(p, \omega_i, \omega_o)\cos\theta_i}{p(\omega_i, \omega_o)} \end{equation}

Super Resolution
#

FSR将当前深度反向重投影到上一帧的多个双线性像素来判断遮挡, 这可能导致错误的遮挡关系, 且双线性遮挡较为保守, 引发抖动.

由于可以获取3D运动矢量, 即zw通道存储当前像素在上一帧相机空间的深度, 使用该值重投影结果更准确, 且只投影到单个像素, 避免结果过于保守.

不做重投影, 直接根据3D运动矢量比较上一帧深度是不行的, 例如铁丝网这一帧由于抖动消失, 但在上一帧存在, 判断遮挡会导致该像素无法累积, 通过反向重投影的原子竞争可以声明历史像素是有效的.

但同时考虑以下情况: 某个物体这一帧离开屏幕, 暴露出背后的深层物体, 由于实际历史像素对应的物体当前帧不存在, 深层物体重投影时不会被遮挡, 导致错误的认为历史帧可用. 因此即使反向重投影成功, 也需要搜索历史邻域是否有深度相似的像素.

基于3D运动矢量计算出世界坐标后, 可以区分静态与动态物体. 静态物体拖影主要来自于所累积的历史区域在未来几帧远离当前像素, 因此将历史邻域重投影到当前帧, 计算最远像素距离来调整累积值. 对于动态物体, 使用更保守的方案, 比较当前像素在历史帧的位置和历史邻域切平面的距离, 距离较远则减少累积.

此时不再需要FSR的像素锁和不稳定度检测机制, 保留着色变化检测. 为了动态阴影等着色结果大幅变化的区域保持稳定, 需要采样历史帧的着色变化率, 之后逐帧衰减.

FSR只在当前帧的空间滤波使用Lanczos, 历史帧和当前帧之间做启发式的累积, 导致收敛较慢. 去除像素锁后, 最终累积结果的alpha通道可以用来存储历史帧累积的Lanczos滤波器权重, 实现更快的收敛.

补帧同样可以利用3D运动矢量, 所有静态像素都会不断重投影, 维护背景静态缓冲, 补帧时投影到生成帧以实现更合理的补洞.

Light Grid
#

W17指出使用网格包围球和锥体求交可以实现更精确的聚光灯剔除.

cone-culling

令源立体角为ΔΩ\Delta\Omega, 方向光强度被定义为垂直辐照度E=LiΔΩcosθdωE=L_i\int_{\Delta\Omega}\cos\theta \mathrm{d}\omega, 由此可得LiL_i:

Li=EΔΩcosθdω=E02π0θ0cosθsinθdθdϕ=Eπ2(1cos2θ0) \begin{equation} \begin{aligned} L_i &= \frac{E}{\int_{\Delta\Omega} \cos\theta \mathrm{d}\omega}\\ &= \frac{E}{\int_0^{2\pi}\int_0^{\theta_0} \cos\theta\sin\theta \mathrm{d}\theta\mathrm{d}\phi}\\ &= \frac{E}{\frac{\pi}{2}(1 - \cos2\theta_0)} \end{aligned} \end{equation}

点光与聚光同样通过辐照度定义, 立体角范围和距离相关, 由源半径与距离决定:

sinθ0=rdLi=Eπsin2θ0=Ed2πr2 \begin{equation} \sin\theta_0 = \frac{r}{d} \qquad L_i = \frac{E}{\pi\sin^2\theta_0} = \frac{E d^2}{\pi r^2} \end{equation}