PBRT-V3体渲染笔记

一 基本原理整理

影响radiance在参与介质分布的三个过程:

Absortion,Emission,Scattering(分为out-scattering和in-scattering)。

Absortion

吸收系数为σa,入射radiance Li经过距离dt,吸收后的出射radiance Lo的关系如下:

L_o(p,\omega) - Li(p, -\omega) = dL_o(p,\omega) = -\sigma _a L_i(p, -\omega)\mathrm{d}t      (1)

对上式解微分方程得到一个值,表示经过d距离后的剩余比例:

e^{-\int _0 ^d \sigma_a(p + t\omega, \omega)\mathrm{d}t}     (2)

Emission

这个没什么好说的,直接上公式:

dL_o(p, \omega) = L_e(p, \omega)dt

Out-Scattering

out-scattering也是radiance衰减的一个表现,散射系数为σt,方程如下:

dL_o = -\sigma _s(p, \omega)L_i(p, -\omega)\mathrm{d}t     (3)

该方程和方程(1)完全一样,除了系数σ,因此Absortion和Out-Scattering合并可以得到一个衰减系数σt。

\sigma _t = \sigma _a + \sigma _s

所以整体的transmittance的微分方程解为:

T_r(\mathrm{p}\rightarrow \mathrm{p}') = e^{-\int _0 ^d \sigma _t(\mathrm{p} + t\omega, \omega)\mathrm{d}t}    (4)

其中d = |p - p'|。

Transmittance的意义是:radiance经过距离d后,得到的fraction。

公式(4)中的指数部分的负数,叫两点之间的optical thickness

\tau(\mathrm{p}\rightarrow \mathrm{p}') = \int _0 ^d \sigma _t(\mathrm{p} + t\omega, -\omega)\mathrm{d} t

In-scattering

In-scattering能增加出射的radiance,那么在确定一个出射方向时,有多少radiance能散射到出射方向呢?

这里引入一个phase function,描述一个点在某个方向的出射分布,可以理解成是每个出射方向的概率密度函数,假设出射方向是ω,入射方向是ω',那么有如下的公式:

\int _{S^2}p(\omega, \omega ')\mathrm{d} \omega ' = 1

in-scattering得到的radiance是:

L_{is} = \sigma _s(\mathrm{p}, \omega)\int _{S^2}p(\mathrm{p}, \omega _i, \omega)L_i(\mathrm{p}, \omega_i)\mathrm{d} t        (5)

假设p点上的自发光是Le,那么p点增加的radiance可以表示如下:

     (6)

传输方程

传输方程描述的某个点延某条路径的radiance。

现在只考虑从一个surface的p0点反射出来的radiance的某一点p的传输方程:

公式如下:

L_i(\mathrm{p}, \omega) = T_r(\mathrm{p_0 \rightarrow p})L_o(\mathrm{p_0}, -\omega) + \int _0 ^t T_r(\mathrm{p' \rightarrow p})L_s(\mathrm{p'}, -\omega)\mathrm{d}t            (7)

公式(7)的第二项表示路径里所有点的In-Scattering贡献。

回顾LTE方程,需要把bsdf函数,积分域,几何函数全部做一个针对参与介质的修改。

二 实现

采样t

提到采样,那就要问,到底我们要采样什么?

和普通的LTE不一样,LTE采样的是BSDF的方向,而带参与介质的渲染,还需要采样路径方向上的,用于估计该路径的radiance贡献。

这里有个先决条件,就是射线是一定会和surface相交的,即射线的tMax一定不是无穷大,该射线会经过参与介质medium。

假设surface的点是p,射线方向是-ω,那么射线方向的点的概率是pt(t),改点的位置是p + tω。

那么取得surface上的顶点的概率是:

p_{surf} = 1 - \int _0 ^{t_{max}}p_t(t)\mathrm{d}t            (8)

有了概率,就可以对贡献做估计,β是估计出来的throughput。

surface上一点的throughput估计:

\beta _{surf} = \frac{T_r(p \rightarrow p + t\omega)}{p_{surf}}

medium上一点的throughput估计:

\beta _{med} = \frac{\sigma_s(p + t\omega) T_r(p \rightarrow p + t\omega)}{p_t(t)}

这里为什么要加上σs?Out-Scattering的衰减要考虑在内。

到目前为止,我们已经根据采样点和该点的概率密度估计出Throughput,接下来我们还需要估计光照的radiance。

也是分两种情况:

如果采样点是surface,直接采样bsdf进行估计。

如果采样点是medium,那么我们要估计的是公式(7)的第二项的积分(自发光忽略):

\int _0 ^t T_r(\mathrm{p' \rightarrow p})L_s(\mathrm{p'}, -\omega)\mathrm{d}t

根据重要性采样,取一个pdf形状接近Tr或Ls的,pbrt中用Tr作为pdf的分布。

T_r = e^{-\sigma _t t}

反函数法求t:

\\t = -\frac{ln(1 - \xi )}{\sigma _t} \\ \\ 1 - \xi = T_r

当t < tMax的时候,那么pdf函数是:

p_t(t) = \frac{\mathrm{d} T_r}{\mathrm{d} t} = \sigma _t e^{-\sigma _t t} = \sigma _t T_r

当t > tMax时,说明采样到的点是surface上的交点,这时的pdf是:

\\p_{surf} = 1 - \int _0 ^{t_{max}}p_t(t)\mathrm{d}t = 1 - \int_0 ^{t_{max}}\sigma _t e^{-\sigma _tt}\mathrm{d}t = 1 + (e^{-\sigma _t x})|_0 ^{t_{max}} \\ \\ \\= e^{-\sigma _t t_{max}}

由于pdf是一个float值,而σt,Tr都是Spetrum,所以需要随机采样一个Spetrum的channel,然后按上述反函数法求t,

然后在把channel的pdf加取来取平均值。

接下来就是要采样Li了,类似bsdf,如果是介质中一点,通过phase函数采样入射光。

采样Phase function

均匀介质的phase函数用的是Henyey–Greenstein,公式如下:

对phase function做积分:

\int _S p_{HG}(\cos \theta) \mathrm{d}\omega = 1

所以概率密度函数是:

p(\omega) = p_{HG}(\cos \theta)

根据概率密度函数的转换:p(θ, φ) = sinθp(ω)

边际概率密度函数求p(θ)

条件概率公式:

p(φ | θ) = p(θ, φ) / p(θ) = 1 / 2π

反函数求φ:φ = 2πξ1。

下面求p(θ)的CDF,过程很复杂,需要借工具来求,https://www.symbolab.com/solver/calculus-calculator

最后可以得到pbrt的结论(g ≠ 0)

g = 0时,pHG = 1/4π,概率密度按如下算:

p(\theta) = \int _0 ^{2\pi} \frac{1}{4\pi}\sin\theta \mathrm{d}\phi = \frac{\sin\theta}{2}

θ的CDF如下:

\int _0 ^{\theta}p(\theta)\mathrm{d}\theta = \frac{1}{2}(1 - \cos \theta) = \xi

所以这个时候有:

\cos\theta = 1 - 2\xi

整个采样过程完毕。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值