Advertisement

《Ray Tracing: The Rest of Your Life》读书笔记

阅读量:

本系列的最后一卷同样会涉及大量内容, 本博客仅用于记录个人研究成果. 这一章包含一部分个人理解的内容, 如有不妥之处, 恳请指正. 另外, 如果发现其中存在错误, 我会及时改正.

蒙特卡洛方法

蒙特卡洛方法是一种解决思路,在众多重复试验的基础上趋近于某个特定值的估算手段,并非绝对精确。该方法的关键在于通过大量重复试验来获取统计结果的近似解。例如,在正方形中随机选取一点并判断其落在内切圆内的概率,则可以通过以下步骤进行计算:首先在单位正方形内均匀分布地生成n个随机样本点(x_i, y_i),然后计算满足x_i² + y_i² ≤ 1条件的样本点数量m;最后根据m/n的比例来估计π/4的值。这种计算方式在初始阶段收敛速度较快(即误差随n增大按O(1/√n)速率减小),但随着样本数量n的增长(即实验次数提升),收敛速度会逐渐减缓(Law of Diminishing Returns)。为了克服这一缺陷,研究者提出了一种分层采样的策略以提高收敛效率。

蒙特卡洛积分

蒙特卡洛积分常用于难以直接求解的积分问题,在某些情况下(比如下图所示),我们需要计算函数f(x)从a到b区间的定积分(实际上该曲线是可表示的,在此假设其难以直接计算)。为了计算这个定积分值,在区间内部进行划分操作:将区间分割成无数个微小的部分Δx,并使用累加法来计算总和值。当Δx趋近于零时,

\int_a^b f(x)\,{d}x = \sum_{i=1}^n f(\varepsilon_i)\Delta x_i

在这里插入图片描述

假设我们能够确定区间[a, b]内某变量x的变化范围x_a及对应的增量\Delta x之间的关系,则\Delta x所占的比例p(x)即为概率密度函数pdf(x)的具体值。具体而言,在区间x_a内满足条件的变量x的数量之比为p(x), 即:

p(x) = \frac{S_{\Delta x}}{S_x^{a}}

其中,S_{\Delta x}表示离散区间内满足条件的所有可能取值之和, 即:

S_{\Delta x} = \sum f(\varepsilon_i) \Delta x_i

而:

S_x^{a} = \int_a^b f(x) {\rm d}x

由此可得:

\int_a^b f(x) {\rm d}x = \frac{S_{\Delta x}}{p(x)}

其中p(x)即为概率密度函数pdf(x), 通常记为pdf(x)。在实际应用中, 我们通常需要通过多次采样来估计这个积分值, 这种方法类似于蒙特卡洛方法的思想: 通过多次采样并计算平均值来逼近真实结果, 即将S_{\Delta x}表示为f(x_k)/pdf(x_k)的形式:

F_n (x) = \frac{1}{n} \sum_{k=1}^{n} \frac{f (x_k)}{{pdf}(x_k)}

其中,F_n (x)表示积分估计值,n是样本数量

蒙特卡洛积分在球面应用

为了在球面上生成随机向量,在一个圆内均匀分布的向量被单位化即为该点位于单位球面上的坐标。为了确定该点在整个空间中的占比,在计算过程中我们使用了立体角方法。已知整个单位球面所对应的立体角为4π,则概率密度函数pdf(x)等于\frac{1}{4π}

光线散射

在之前的定义中我们假设光线被散射的概率是A,那被吸收的概率就是1-A,这个A是由定义的材质决定的。但光线进行反射的时候,会有一个方向上的概率分布,将其定义为pdf即为s(direction),那现在每一个点的颜色是由散射概率,散射pdf和着色函数共同决定的Color=\int A*s(direction)*color(direction) 运用蒙特卡洛的思想,添加一个随机生成方向的pdfColor=A*s(direction)*color(direction) /p(direction)
在Lambertian中其实已经隐式的使用过这个方法了:假设Lambertian表面的s()与p()都是一个余弦函数,θ为法线平面与反射光线的夹角,当cosθ<0的时候,半球的积分为π,由单位角dA=sin(θ)dθdφ得出
半球面积=\int_0^{2π}\int_0^{\frac{π}{2}}cos(θ)sin(θ)dθdφ
所以s(diretion)和p(direction)的值都与cos(θ)/π成正比。可以从上面颜色的公式看到两者相除得到一个常数,就简化成了现在Lambertian的公式。

重要性采样

通过相机捕捉光线并与其物体相交构造出的景象都是基于射线与物体相交的基本原理。因此希望灯光采样时更加集中就需要对灯光采样的策略进行调整。假设我们发送的一束朝向光源的光线其概率密度函数(pLight)为pLight(direction)再结合与s相关的另一个概率密度函数(pSurface),我们可以将两者进行加权平均得到一个综合的概率密度函数:lightPDF(direction) = 0.5 * pLight(direction) + 0.5 * pSurface(direction)。在这里权重必须是正数并且两者的总和必须等于1这样才能保证合成后的概率密度函数具有合法的有效性。为了实现s(direction)* color(direction)这一指标越大越好就需要找到一种能够使该指标达到最大值的最佳概率密度函数从而实现更真实的颜色比例效果。对于漫反射表面我们推测其对于颜色因子更为敏感大多数渲染器采用镜面设计只是隐含地使用了s / p来进行计算而我们的方案则是直接采用这种方法来模拟漫反射特性。

三维方向随机向量生成

如何生成随机方向,假定z轴为表面法线,规定θ为法线张开的角度,此时只关注z轴,其他相关的来量都为均匀分布。假设一个在圆上的方向pdf,p(direction)=f(θ),在一维中θ和φ的pdf分别是:a(φ)=\frac{1}{2π}b(θ)=2*π*f(θ)sin(θ)
两个随即生成的均匀变量r1和r2r_1=\int_0^φ \frac{1}{2π}=\frac{φ}{2π}ϕ=2π*r_1r_2=\int_0^θ2πf(t)sin(t)
尝试找到一个f(),当在球面上均匀密度采样,整个球面为4π,p(direction)=\frac{1}{4π}r_2=\frac{-cos(θ)}{2}-\frac{-cos(0)}{2}=\frac{1-cos(θ)}{2}cos(θ)=1-2r_2
然后用球坐标转换方程,生成向量
x=cos(φ)*sin(θ)y=sin(φ)*sin(θ)z=cos(θ)然后把(r_1,r_2)代入方程
x=cos(2πr_1)*2\sqrt {r_2(1-r_2)}y=sin(2πr_1)*2\sqrt {r_2(1-r_2)}z=1-2r_2
然后我们再用我们之前假设的Lambertian的表面散射pdf,p(direction)=\frac{cosθ}{π}试试。依旧是:b(θ)=2*π*\frac{cosθ}{π}sin(θ)r_2=\int_0^θ2π\frac{cost}{π}sin(t)=1-cos^2(θ)cos(θ)=\sqrt{1-r_2}代入坐标系转换方程:x=cos(φ)*sin(θ)=cos(2πr_1)\sqrt{r_2}y=sin(φ)*sin(θ)=sin(2πr_1)\sqrt{r_2}z=cos(θ)=\sqrt{1-r_2}

标准正交基

在生成随机方向时,默认情况下基于z轴作为基准法线。为了扩展至真实情况下的任意法线方向,请使用标准正交基来进行空间变换。这本质上是一个空间变换的过程,在本实现中采用直接计算的方式同样地,在这里我们采用向量运算的方法。具体来说,在这里我们采用向量运算的方法通过将基准法线与上方向量进行叉乘运算得到切向量t。接着将切向量t与基准法线n再次进行叉乘运算以获得另一个基向量s。最后通过将任意点的(x,y,z)坐标分别投影到s,t,n三个基向量上即可完成坐标系的转换过程

直接光照采样

我们是从相机出发发射射线进行光线求交运算,并希望增加朝向光源方向发射的射线数量。对于单位球面来说,在点q处取一个微小面积元素dA时(即dq^2),其对应的单位球面面积上的微小区域面积元素为dw = \frac{dA \cdot \cos\alpha}{distance(p,q)^2}。为了保证在单位球面上均匀采样到该微小区域的概率与在三维空间中均匀采样到该微小面积元素的概率相等,则需满足\frac{dA \cdot \cos\alpha}{distance(p,q)^2} \cdot p(direction) = P_q(q)dA = \frac{dA}{A})。由此可得p(direction) = \frac{distance(p,q)^2}{dA \cdot cos\alpha}即为我们所要求的概率密度函数(PDF)。

总结

对基本原理和工作机制进行了简要介绍。这一章中的PDF文件可以通过多种数学方法进行求解,并且同时支持混合运算。最终目标是使光线发射和反射方向更倾向于光源区域,并通过逐步调试不同配比公式来优化效果。

这三本书内容精炼地介绍了核心概念。随着技术的发展进步,已有诸多改进方案可实现更好的效果表现。然而,在基础理论体系上仍以这些经典方法为基础构建框架。

全部评论 (0)

还没有任何评论哟~