Virtual Position
#
ReBLUR计算镜面反射虚拟位置使用高斯球面镜成像公式解出像距/物距.
mag=2⋅c⋅Oz−11整体光路如下: 主光线从像素打到着色点X=P, 再沿反射方向走hitDist命中物点O; 把表面当作曲面镜, 用mag算出虚像Xvirt, 沿视线方向摆放, 供时间重投影使用.
下面把表面局部视为曲率为c的球面镜, 推导mag.
设球面镜:
- 半径R, 曲率中心C, 命中点P
- 光轴为直线CP
- 轴上物点O, 物距do=OP
- 像点I, 像距di=IP
从物点O发出一条光线, 在镜面上高度为h的点M处发生反射, 反射光线交光轴于像点I. 球面上任意一点的法线都通过球心C, 因此M点处的法线方向为MC.
定义三个相对光轴的夹角:
α=∠(OM, axis),β=∠(MC, axis),γ=∠(MI, axis).在傍轴(paraxial)近似下, 角度很小且h很小, 有:
α≈doh,β≈Rh,γ≈dih.由反射定律和外角定理可得:
β−α=γ−β⟹2β=α+γ.代入傍轴近似:
2⋅Rh=doh+dih.约去h得到Gaussian镜面方程, 可得焦距f=2R:
do1+di1=R2记曲率c=R1, 物距do=Oz. 由镜面方程解像距:
di1=R2−do1=2c−do1=do2cdo−1,di=2cdo−1do.于是放大率即像距与物距之比为:
mag=dodi=2⋅c⋅Oz−11平面镜即R→∞, 亦即c=0:
mag=0−11=−1.