渲染中的数学知识

渲染中的数学知识

《全局光照技术》的众筹过10万了,按照约定我将赠送每名众筹支持者一份学习路线图以及总结我的一些学习方法,而学习路线图的其中一项内容就是介绍图形学中的一些数学知识,所以这里先简要做个概述。

《全局光照技术》正在摩点网众筹

很显然,数学是理解3D渲染算法的重要基础,那么这是不是意味着你需要重新去复习整个大学工科数学的知识呢?实际上作为工程师,我们的目标只是要理解工业技术(而非背后的数学知识)的原理,这本也是工程技术和理论研究的区别。一门数学学科本身是需要去解决更一般的问题的,然而对于理解一种工程技术,如果你不需要去设计和改进算法本身,你往往只需要了解它的(可能是非常简化的)一部分或者说理解它的意义即可,当你对整个工程技术的架构比较熟悉之后,你可以从某个方面深入去学习,定制和甚至改进。

以下我从渲染方面做一些简要分析以及归类,列出一些大概需要掌握的相对比较重要的数学知识,并对每种知识做一个简要概述,以及说明每个知识点用于解决渲染中什么样的问题。


蒙特卡洛方法

蒙特卡洛方法是整个离线渲染最核心的基础,由于渲染方程是一个(理论上无限)高维积分,所以它不可能通过分析的方法求解。你需要深刻明白对一个概率密度函数进行抽样,并用所得样本来求解一个积分值的概念,我们称作对积分的一个估计,不仅仅是渲染方程,渲染中的很多积分计算可能都需要使用蒙特卡洛方法进行计算;在这个过程中由于随机数本身的方差属性,因此估计值也具有方差,减少估计的方差是渲染当中的核心内容,你需要明白每个样本参与估计的“贡献值”的概念,贡献值越小的样本越容易产生较大的方差,使每个样本的贡献值尽可能大,这个概率密度函数与被积函数需要尽可能的相似,这又称为重要性采样;然而我们很难找到与被积函数相似的概率密度函数,但是很容易找到与被积函数的部分相似的概率密度函数,因此我们希望将多个重要性采样组合起来,这就是复合重要性采样,你要明白复合重要性采样的核心是使来自每个重要性采样的样本的贡献值尽可能相似。除了数学层面,你还需要理解双向路径采样中顶点连接涉及的一个重要方面,那就是顶点连接不是一个随机的过程,因此这个它使得连接起来的路径具有独一无二的组合概率密度函数,因此对于同一长度的路径,在不同位置处进行连接是一种不同的采样技术,因此当你产生一条完整路径之后,实际上你(通过在不同位置处连接两条子路径)产生了多个采样的结果,然后你使用复合重要性采样对所有这些采样技术进行组合。


傅里叶分析

傅里叶分析可能是仅次于蒙特卡洛方法的数学工具,它广泛运用于过滤,平滑,以及数据压缩等方面,它也是小波分析和球谐函数的重要基础。如同一系列正交的坐标轴(如(0,0,1), (0,1,0), (1,0,0))构成一个矢量空间,然后该空间中的任何矢量都是这组正交基矢量的线性组合一样,如果一系列的函数是相互正交的(即它们每两个函数的乘积的积分值均为0,除非两个函数相同,此时积分值为1),则这些函数构成一个函数空间,因此该函数空间的任意一个函数都可以表述为这些基函数的线性组合,傅里叶变换使用的正余弦函数正是这样的一组无限个数量的基函数,因此这就是为什么任意函数都可以进行傅里叶变换,傅里叶变换的本质就是将一个函数转换为所有这些无限个正余弦函数的线性组合,这些线性组合的系数是由一个称为投影的方法计算的,该方法的算法就是通过求原始信号函数与某个基函数乘积的积分值,理论上我们记住这无数个线性组合的系数就可以重合合成为原始的信号函数,这个过程称为重建。所有这些投影形成的系数形成一个连续的函数,它反映的是原始信号函数的频率分布,如果你去掉该频率分布中的某些区间,你就丢掉了原始信号对应的频率部分,通常对于一个方差比较大的采样结果,我们可以丢弃掉频率高的部分,它们通常都是导致方差较大的罪魁祸首,因此函数的高频部分需要更多的样本,而由于计算资源限制我们通常都无法满足这样的条件。你会发现一个在频率域对频率分布进行带限的函数,在原始的时间域或空间域变成了一个平滑函数,这也是通过对这个带限函数本身进行傅里叶逆变换得到的,这就是过滤的思想。你还会发现在频率域计算两个函数的乘积变成了时间域或空间域对一个数组(例如所有像素组成的一个图像)元素中的每个元素都执行一次过滤计算,这就是卷积的概念。


小波分析

函数空间的投影和重建的概念也是小波分析的基础,小波函数是一类特殊的正交基函数,即低频率的基函数构成的函数空间是高频率基函数构成的函数空间的一个子集,这就使得高频部分的基函数系数可以表述为与低频部分基函数系数的差值,这种特性使得小波变换形成了一个多分辨率的结构,你可以想象对于多级纹理(mipmap),低分辨率的图像是高分辨率图像中相邻元素平滑过滤得到的,例如对于较远的表面,使用低分辨率的纹理就可以得到很好的近似,这种结构特性被天然使用到辐射度方法中,你会发现原来我们不需要对每两个细分曲面进行光照传输的计算,因为有些较远或者立体角较小的范围,这部分可以使用低分辨率的曲面细分网格结构,这称为阶层式曲面细分方法。


球谐函数

函数空间的投影和重建也是所谓球谐函数的基础,球谐函数本质上就是将傅里叶变换使用的单位圆上的正余弦函数扩展到单位球面上,这些基函数实际上就是将三维空间的勒让德多项式进过缩放是之恰好位于球面上,由于单位球面坐标上的长度固定为1,因此球面坐标系退化为一个二维的单位球面坐标系,其两个坐标值构成一个空间的方向,因此球谐函数的线性组合可以用来表述一个与位置无关的方向函数,而方向函数在渲染中太普遍了,例如环境贴图就是一个与位置无关的方向函数,表面的反射方程也是一个方向函数,它根据一个入射方向分布计算出一个出射方向分布,因此球谐函数可以用来表述光照传输函数和环境贴图光源,同样去掉高频的部分,使用少量的系数就可以近似一个方向函数的低频部分,这就是预计算辐射度方法的数学基础,此外球谐函数的一些特性,如旋转不变性,卷积,内积等,这些也是辐射照度缓存算法的基础。


几何光学

除了光滑平面上的反射/折射定理,光学部分最重要的内容是关于微观表面的光照传输。在数字场景表述中,我们可以使用纹理贴图来表述一个表面的属性,例如BRDF双向反射函数,折射率等,然而要知道实际物体的微观表面结构的尺寸是非常小的,它甚至比一个像素的尺寸还要小得多,这个时候用贴图是没有办法描述的。然而我们可以使用一个像素的表面“展开”成一个分布函数,注意,原始纹理像素表述中,每个像素只产生一个确定的值,入射对于一个固定的入射方向,始终会反射到一个固定的出射方向,但是现在对于一个像素,相同的入射方向可以根据概率被反射到不同的出射方向,其中每一个不同的交互结果模拟了一个微观粒子(可理解为一个微观平面)的行为,这就使得光照传输可以在像素级别处理微观粒子结构的交互,这就是著名的微面元理论,不同的微面元的方法就是建立不同的分布函数模型,它们主要是建立一个这些微观粒子的法线分布,同时还有建立这些粒子形成的不平整曲面见的遮挡等关系,最终将菲涅尔函数融入到分布函数中,形成了最终的微面元双向分布函数。


梅特波利斯算法

如果采样使用的概率密度函数与被积函数不相似,那么样本的贡献值就不是一个常数,这意味着某些样本更重要或者更不重要,这就是使得估计的方差比较大,我们需要调整概率密度函数。如果采样使用的概率密度函数完全正比于被积函数,则样本的贡献值为一个常数,估计的方差为0,并且这意味着每个样本的计算都不需要计算贡献值,我们只需要数每个区间样本的数量就可以得出被积函数(即最终图像)的分布。梅特波利斯算法正是通过一种取舍的机制使得采样的概率密度函数正比于被积函数。其原理来源于马尔可夫链,马尔可夫链是一种在稳定状态下,系统之间各个状态之间转移概率的分布,梅特波利斯算法将整个被积函数的分布当做一个马尔可夫链,然后通过定义一个状态之间的转移概率分布使整个状态之间的分布相似于被积函数。由于梅特波利斯算法能够产生完全相似于被积函数的样本,因此可以很轻易地找到一些特别困难的路径,是离线渲染当中一种非常重要的采样方法。


模拟退火/总体蒙特卡洛方法

传统的梅特波利斯算法并没有说明样本的产生方法,在光线追踪中一般是使用传统的如双向路径追踪来产生一个样本路径,然而对于同一路径,双向路径追踪可以使用多种采样技术采样而得,得到一条贡献值较大的路径的概率取决于其使用的采样技术,在原始的MLT或PSSMLT算法中,每种采样路径是随机选择的,然而除了可以对路径的几何信息(如位置)进行突变外,采样技术之间也是可以突变的,因为对于一些特定的几何场景,一些采样技术会优于另一些采样技术。在蒙特卡洛方法中,有一类方法可以将原始的单个马尔可夫链按照某种度量进行区分,注意这种区分并不是空间上的划分,而是每种区分本身都是一个独立的马尔可夫链,只是遵循不同的转移概率分布,这种方法称为总体蒙特卡洛方法,其中一个具体算法是所谓模拟退火的思路,想象一下一个物体由高温逐渐冷却的过程,在其中的每一个温度下,粒子之间都是出于一种平衡状态的,然而在不同温度下物质之间的转移概率分布是不一样的,这种思路使我们可以通过寻找一种影响状态转移的因素,并将该因素对应的状态转移定义为一个子平衡系统,通过在这些子系统之间跳跃,我们可以寻找到最快的遍历全部状态的方式。显然路径的不同的采样技术就是一个这样的因素,每种采样技术都可以产生一个独立的平衡系统,但是对于某些路径,另一些采样技术可能是更有效的,通过在路径之间的跳跃,我们可以寻找最快收敛的方法。这些思路在近几年的MMLT和RJMCMC算法中有着重要运用(参见:https://zhuanlan.zhihu.com/p/28345852)。


微分几何/流形

传统的路径的采样都是完全随机的,例如无论是基于蒙特卡洛方法的单/双向路径追踪,还是基于马尔可夫链蒙特卡洛方法的梅特波利斯光照传输等,本质上都是使用ray tracing的方式从每个顶点的BRDF函数对方向进行随机采样以形成一条路径,这些方法都是基于对场景的几何信息是未知的。如果我们能够结合场景的几何信息,那么能否更有效地产生一条路径呢?这就是近几年非常重要的流形探索算法的核心思路。流形是指一个用一个隐函数描述的几何体,它是欧几里得空间的一个部分,它的整个几何体是通过局部的关系描述的,而不是像欧几里得空间其用全局的位置等信息描述,这种局部特征使得我们可以很好地探索场景的几何信息。由于反射定理和折射定理也是基于局部的定理,结合这些局部几何信息(往往是指能够获得几何体局部位置的变化,如导数等),我们可以得出光照传输的局部微分信息,而根据牛顿方法,如果已知几何体各个位置处的微分信息,则我们可以通过一系列连续迭代的过程寻找到一个给定函数的根的近似值,这用在流形中即是我们能够通过确定性的方法“找出”一条相似路径,这就是流形探索的核心思路,它用于梅特波利斯算法中高效地寻找相似路径。


有限元方法

如果光照的分布函数具有较低的频率,例如对于由漫反射表面构成的场景,我们可以将被积函数进行比较低分辨率的划分,然后对每个较大的区间使用一个值进行近似,这种方法就是有限元方法,在渲染中称为辐射度方法,在该方法中,场景被划分为一些曲面片,然后通过预计算出这些曲面片之间近似的光照传输,以形成一个传输矩阵,那么对于任意给定光照,我们便可以通过该矩阵的线性变换计算这些光照的传输结果。


迭代法

在辐射度方法中,我们通过预计算得到一个光照传输矩阵,它可以将任意一个给定的光源分布进行线性变换得到最终的光照结果。对于线性方程组的求解,数学上常用的方法是高斯消元法,它们通过对方程组的系数构成的矩阵执行一系列行交换操作将其转换为一个上三角矩阵(upper triangular matrix)进行求解。然而这样精确求解的方法在数字计算机中运用时却会遭遇被称为取整误差带来的问题。 在数字计算中,一个实数被保存为浮点数的形式 ,计算机中存储尾数的数字位是有限的,如果有 n 个数字位供存储,那么超 出 n 的部分则按四舍五入法进行取整,取整后被存储进计算机的值称为存储值, 上述的高斯消元法是由一系列操作组成的,对于每一次操作计算,它都需要将结果写回到内存中供后续的计算使用,每次存储都可能出现这种取整误差,随着整个消元法的进行,这些误差被传播并累计下去,导致最终结果出现比较大的误差,辐射度方法中矩阵的维度更是可能上万,这种误差是不可能忽略的。 高斯消元法计算的是一个直接的结果,它没有提供一种修正的机制,对于这样的误差,我们希望能够有一种修正的机制用于通过一个迭代过程将误差逼近至某个可接受的范围。所以在计算机中,我们通常使用迭代法来求解线性方程组,例如前面介绍的牛顿迭代法,它每次计算的可能不是一个直接准确的结 果,但是它提供一种机制使可以逐渐收敛到正确结果,在这个收敛过程中,我们就有机会将最终结果限定在一个可接受的误差范围。 常见的迭代法如雅可比方法,高斯-赛德尔方法等。此外,你还可以对传输矩阵执行分解以得出一个全局的传输操作符。


概率密度估计

在回归分析中,对于给定的一些数据抽样值,我们可以根据这些样本拟合出一个真实函数出来,例如核估计通过对周围一定邻域范围内的样本求加权平均来计算某个位置的真实值,与此类似,核密度估计方法则是要根据一些(往往具有相同值)的样本拟合出一个概率密度函数,因此我们可以首先将光子根据光照传输随机分布到场景表面上形成一个光子图,然后通过对这些光子执行概率密度估计来计算出它的光照分布,然后再从摄像机收集这些光照来计算最终看到的图像的分布,这就是光子映射的基本思路。和回归的思路类似,概率密度估计通过对周围的样本进行平滑来拟合概率密度分布,这个平滑的过程导致了偏差,但是却减小了估计方差,更重要的是,将一条路径的顶点与该顶点附近的光子进行“合并”以产生一条全路径,这相比于前面介绍的双向路径追踪的顶点“连接”,它大大提升了漫反射顶点与光泽路径的连接效率,使得其成为渲染如焦散效果的最有效的方法,如今,基于概率密度估计的光子映射方法也几乎是离线渲染器的标配。


【上述以及更多渲染相关数学知识以后在本专栏会以系列的形式更详细介绍】


上述所有这些数学方法都会在《全局光照技术》中详细讨论,并且是以比较容易理解的方式讨论,我的目标是甚至不需要你专门去查询和复习相关数学概念,就可以理解它们的基本意义以及在渲染中的运用。


《全局光照技术》正在摩点网众筹预购,该书历时三年创作,为了更好的理解这些数学概念及思路,以便为了更好的学习图形学,建议您够买一本《全局光照技术》,这也是对我写作的一种鼓励和支持,感谢!

预购地址:《全局光照技术》出版在即!揭秘工业中最前沿的渲染技术-发现项目-摩点会想

编辑于 2017-12-10

文章被以下专栏收录

    这个专栏的内容会包含渲染相关的各个层面和维度的内容,不光会有各种流行技术原理的剖析,还会从数学方法,基础概念,图形学领域著名人物的研究领域分析等各种维度来辅助我们更好地了解图形学产业。更多信息请访问《全局光照技术:从离线到实时渲染》官网:http://www.thegibook.com