跳过正文

Interview III: 项目分析

·1117 字·3 分钟

Virtual Position
#

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

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

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

reblur-path

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

设球面镜:

  • 半径RR, 曲率中心CC, 命中点PP
  • 光轴为直线CPCP
  • 轴上物点OO, 物距do=OPd_o = \overline{OP}
  • 像点II, 像距di=IPd_i = \overline{IP}

从物点OO发出一条光线, 在镜面上高度为hh的点MM处发生反射, 反射光线交光轴于像点II. 球面上任意一点的法线都通过球心CC, 因此MM点处的法线方向为MC\overrightarrow{MC}.

mirror-geometry

定义三个相对光轴的夹角:

α=(OM, axis),β=(MC, axis),γ=(MI, axis). \alpha = \angle(OM,\ \text{axis}), \qquad \beta = \angle(MC,\ \text{axis}), \qquad \gamma = \angle(MI,\ \text{axis}).

在傍轴(paraxial)近似下, 角度很小且hh很小, 有:

αhdo,βhR,γhdi. \alpha \approx \frac{h}{d_o}, \qquad \beta \approx \frac{h}{R}, \qquad \gamma \approx \frac{h}{d_i}.

由反射定律和外角定理可得:

βα=γβ2β=α+γ. \beta - \alpha = \gamma - \beta \quad\Longrightarrow\quad 2\beta = \alpha + \gamma.

代入傍轴近似:

2hR=hdo+hdi. 2 \cdot \frac{h}{R} = \frac{h}{d_o} + \frac{h}{d_i}.

约去hh得到Gaussian镜面方程, 可得焦距f=R2f = \frac{R}{2}:

1do+1di=2R \frac{1}{d_o} + \frac{1}{d_i} = \frac{2}{R}

记曲率c=1Rc = \dfrac{1}{R}, 物距do=Ozd_o = O_z. 由镜面方程解像距:

1di=2R1do=2c1do=2cdo1do, \frac{1}{d_i} = \frac{2}{R} - \frac{1}{d_o} = 2c - \frac{1}{d_o} = \frac{2c\,d_o - 1}{d_o}, di=do2cdo1. d_i = \frac{d_o}{2c\,d_o - 1}.

于是放大率即像距与物距之比为:

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

平面镜即RR \to \infty, 亦即c=0c = 0:

mag=101=1. \mathrm{mag} = \frac{1}{0 - 1} = -1.