前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >light transport小结

light transport小结

作者头像
Peter Lu
发布2020-12-17 17:08:41
7870
发布2020-12-17 17:08:41
举报
文章被收录于专栏:LETLET

Rendering Equation

图配渲染方程:

Material主要讨论

,今天我们把重点放在这个积分上,也就是整个光路(light transport)。

首先,我们引入participating media,将RE扩展到Volume Rendering Equation(VRE),更具有一般性。

是transmittance,计算光路在volume中的透过率。

如上图,我们对比一下同一个场景中,有无participating media的区别,右侧没有时,采样空间是场景的整个表面O(N^2),而在左侧,采样空间是场景中任意一点O(N^3),这反应了VRE的计算量。

如上图,我们引入一个概念,geometry factor

,通过换元法,我们用dA替换dω,积分的作用域则由以前的Ω半球变为整个场景空间对应的A面积:

我们可以用场景中任意一个点来替换之前的角度solid angle。把整个场景中可以采样的点构成一个集合,比如所有物体的表面,形成一个path space,这种方式更直观,方便采用基于路径空间的优化算法。

积分求解

积分求解的方法很多,但我们看积分中的

这一项,

处可能是一个光源,也可能surface上的一点,然后其他方向有光源打到

,以此类推,可以无限扩展,从这个角度,这是一个高维积分,复杂度取决于整个空间的采样点。

如上图,我们可以通过Monte Carlo来求解该积分,理论上,只要我们遍历该场景中所有可能的光路并累计其对应的贡献,我们就可以得到最终的渲染效果。实际上,这个计算成本很大,不过得益于大数定理,只要我们的样本足够多,我们保证其期望值是准确的,unbiased,随着样本的不断增加,variance会不断的减小,最终收敛到正确的结果,这里要强调一点,这个是理论上,或者说是统计上的结果,实际并不一定如此。用

表示上图中这样的一条光路,f表示光路的radiance,p为对应的pdf,该积分的解可以表达为:

如上是对该积分直观上,基于recursive的拆解,最终求得积分解。我们还可以换一个方式来理解。根据公式(1),我们可以计算整个场景中任一点x对任一点

的贡献值,如果我们把所有的情况都列举出来,则会形成如下的线性方程组:

通过Neumann series:

该公式告诉我们,L是直射光,1次反弹,2次反弹,N次反弹等所有光路的累加,路径越短,贡献通常越大,也告诉我们,如果要针对公式2采样时,尽可能采样贡献大的,对应下图:

可见,Monte Carlo求解积分的思路是简单的,但光路本身会反弹,bounce,所以求解该高维积分也是异常复杂的,昂贵的计算量往往很难达到real time的要求,而rasterization本质上是一种近似解,只考虑了较短路径对应的光路的贡献(从相机到物体到光源这样一个路径为3,1次反弹光路),而不考虑其他光路的贡献,以此来获取较好的性能,自然效果上略有不足。如下对比ambient occlusion效果,可以看到,ray tracing的更为细腻,效果上自然逼真.

Light Transport常用算法

以相机为起点,构建一条光路,这种思路是Path tracing,但问题是我们不太容易和光源相交。

这时,我们引入Next event estimator的策略,主动和光源相交,确保能够构建一条完整的光路,但这里也有问题,如果遇到一个玻璃球,因为要满足折射率(fresnel,费马定理),这种情况下很难找到光源。

这种情况下,如果我们从光源出发,则比较容易构建光路,我们称为light tracing,但如右图,这种SDS的组合,无论是path tracing还是light tracing都很难搞定

这时,有一种方式成为photon mapping,光源会发射photon,通常用一个kd tree来记录photon在diffuse表面的分布强度,这时,我们从相机处构建光路,在diffuse处查询周边的photon,用一个kernel函数来近似获取该点的radiance(上图中半圆处),从而解决这种问题。但photon mapping本身是以近似解来替代该点的真实radiance,所以是biased,但通过不断缩小半球的半径提高准确度,所以当photon无限多时,能够收敛到真实的radiance值,因此可以保证一致性,consistency。

这里,还有两种更为复杂的光路算法,一个是BDPT:

该算法是path tracing + light tracing的综合,如上图,构建该光路时有四种策略(可能),s表示从光源出发的路径对应的点数,t表示相机对应路径的点数,BDPT通过一个方法,判断四种可能的路径的好坏,按照各自的权重来计算不同策略的贡献。这里我们需要保证光路的能量守恒,主要是refraction和shading normal。

另一个则是MLT,基于Markov,当我找到了一条光路时,则基于该光路做微调,从而很可能找到另一条可行的光路。该算法是Metropolis-Hastings算法在light transport中的应用。

Importance sampling techniques

这些不同的路径算法,从数学的角度,都是为了提高采样的效果,进而降低variance,提高收敛效率。针对公式(1),受限于场景的复杂,通常我们很难得到整体的,包括

的整体的pdf,这也是一个鸡生蛋的问题,好比你打魔兽,前期需要探路,才能知道敌人的位置,问题是我们往往需要在不探路的前提下抓敌人的位置,这里的因素就很多了,地图不同,对手习惯不同。所以,通常只是针对一个变量的pdf,比如材质,光源等,这些物体的pdf是可以估算的,而我们希望通过不同的光路算法因地制宜,来保证其他因素能有一个不错的pdf,以及保证我们能够找到光。

材质通常会提供自己的sample,pdf方法,除去这一大块,在VRE中,也有一些采样算法,要比单纯的对Tr和

(Phase function)采样要好。

另外一种path guiding的策略,考虑到每次采样完就丢弃,下一次采样也是完全独立的,我们是否可以记住之前的采样位置和效果,来优化pdf,这样可以更好的指导我们的下一次采样。这块内容也比较多,也涉及到一些机器学习的算法,目前,我对这块了解不多。

Variance reduction techniques

刚刚介绍了IS以及常见的策略,IS本质上也是属于variance reduction的一种。我们再进一步,除了重要性采样,还有其他的方式来降低variance。这里还有两个常用的策略。

Control variable。当我们已知g(x),或该函数具有较小的方差时,我们不需要直接计算f(x),而是获取两者之间的差,这种方式下获取f(x)时,方差也会较小。

Gradient-Domain Rendering就是基于这种思路,我们获取较为粗糙的渲染结果,然后把计算量集中在像素变化比较大的区域(高频)区域,获取最终的渲染效果。这样,我们在渲染时,计算的是每个像素和周围像素之间的差别,pixel-based gradient。

另一个则是stratification,如何提供一种较好的随机算法。这里,我们要区分random和discrepancy之间的区别。

如上图,左侧是纯随机的,而右侧属于一种quasi-random,直观上,我们会觉得右侧的更均匀。所以,通常我们并不建议用uniform的随机算法,而是用low discrepancy sequence的算法,比如常见的blue noise。这里,我们可以用

来判断其质量,如下对应的区域面积正比于区域内采样点的百分比。另一种是通过Fourier,在频率域上做对比(fourier analysis of numerical integration in monte carlo rendering)

Advanced light transport

另外一个问题,IS,Random这些方面的优化,都可以通过接口来封装,我们可以在同一个渲染器中调用不同的采样技术来优化效果,但不同的light transport算法策略差别比较大,特别是photon mapping和其他路径算法差异较大,在实际应用中,我们不知道哪些场景适用哪类算法,甚至一个场景中不同的区域适合不同的light transport算法,所以,人们希望能够将BDPT和photon mapping算法兼容,统一成一种light transport,满足各类场景,本质上,这也是一种MIS策略,将Photon mapping归为一种采样技术。

该思路也扩展到volume rendering中‘Unifying Points, Beams, and Paths in Volumetric Light Transport Simulation’

前面提到的MLT,是一种基于MCMC的light transport,基于Markov Chain的correlated path,样本之间不再独立,而是有关联。它的特别点在于用户可以自己设计策略,从一条光路x1转移到光路x2,前提是保证该转移满足细致平稳条件detailed balance,目标是提高转移的接受率acceptance。如果其他光路算法都不能很好的解决一些特殊场景和需求时,我们可以通过MLT使用一些自定义的渲染机制,来满足特定的要求。

比如所有物体的材质都是specular,构建一条光路的难度大大增加,因为要满足光线的折射率。该算法构建一个在切空间 tangent space下满足反射率和折射率的constraint function,保证在移动某一点的情况下始终满足该约束条件,这样,当我们移动起点或终点时,对应x1或x7,可以同步其他点的delta,保证C始终为零,约束条件始终成立。该算法实现了在该特定复杂场景下构建有效光路,下图移动红点时。

另外,我们计算一条光路的gradient,可以把该gradient当作重力方向,然后随机赋给该光路一个初始动量,这样,当上升时,动量变小,势能变大,下降时则相反,整体的energy不变,通过这一机制,则可以大大提高MLT采样的接受率。该算法称为Hessian-Hamiltonian MC,属于MLT的一种。因为该算法要计算Hessian,二阶导数,计算量过大,还有一种基于Langevin MC,基于布朗运动,避免计算Hessian矩阵,算是前者的简化版。两者都是利用gradient进行local exploration,提高接受率的一种策略。

参考内容太多,每一个点涉及的技术细节也很多,也很难给出具体的参考,给出一些入门材料,希望你能够感受到渲染的乐趣和魅力。

Rendering tutorial 1~4 http://games-cn.org/previouswebinar-ppt/

真实图形渲染科研入门 https://www.bilibili.com/video/BV1my4y1z76s?p=3

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rendering Equation
  • 积分求解
  • Light Transport常用算法
  • Importance sampling techniques
  • Variance reduction techniques
  • Advanced light transport
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档