目录
GAMES101-现代计算机图形学入门-闫令琪——Lecture 18 Advanced Topics in Rendering
Advanced Light Transport (高级光线传播)
-
Unbiased light transport methods
– Bidirectional path tracing (BDPT)
– Metropolis light transport (MLT) -
Biased light transport methods
– Photon mapping
– Vertex connection and merging (VCM) -
Instant radiosity (VPL / many light methods)
Biased vs. Unbiased Monte Carlo Estimators
-
An unbiased Monte Carlo technique does not have any systematic error
– The expected value of an unbiased estimator will always be the correct value, no matter how many samples are used -
Otherwise, biased
– One special case, the expected value converges to the correct value as infinite #samples are used — consistent
We’ll look again at this page after introducing Photon Mapping
无偏(Unbiased):蒙特卡洛积分估计出来的结果的期望(无论用多少样本)永远都是我们要的真实值(期望永远是对的)
有偏(Biased):所有其他情况都是有偏。估计出来的期望和实际的值不一样。
虽然取多少样本,得到的结果都是有偏的,但是,在一个极限的定义下,用的样本数足够多,期望值会收敛到正确值。这时候我们称这个值是一致(consistent)。
Bidirectional Path Tracing (BDPT)双向路径追踪
-
Recall: a path connects the camera and the light
-
BDPT
– Traces sub-paths from both the camera and the light
– Connects the end points from both sub-paths
把两个半路径相连
双向路径追踪(无偏):生成两个不同的半路径(子路径),一个是从光源出发的半路径,另一个是从摄像机出发的半路径,把两条半路径的端点连起来(如上图虚线部分)。 -
Suitable if the light transport is complex on the light’s side
-
Difficult to implement & quite slow
双向路径追踪实现起来非常复杂,但是在一些情况下渲染出来的结果很好。如上图场景。这个场景里光源仅仅往一个角落里打,那么实际上整个场景几乎都是被间接光所照亮的,再加上整个场景几乎都是漫反射材质,光线打上去会往各个方向弹,那么如果这时候用路径追踪,就不容易弹到光源处。那么这时候用路径追踪就很难照亮整个场景。这时候用双向路径追踪,在光源处发出一些光线打到场景中,再从相机发出一些光线打到场景中,把他们端点连起来,就会得到一些很合理的路径。(但是BDPT算起来比较慢)
(BDPT实现起来非常不容易!如果能把这个写对,自己开发渲染器应该没有任何问题!)
Metropolis Light Transport (MLT)
- A Markov Chain Monte Carlo (MCMC) application
– Jumping from the current sample to the next with some PDF - Very good at locally exploring difficult light paths
- Key idea
– Locally perturb an existing path to get a new path
MLT(无偏)用统计学上一个采样的工具:马尔科夫链。马尔科夫链可以根据一个样本生成靠近它的另一个样本。他可以以任意函数的形状为PDF生成样本,使得这一系列样本的分布与被积函数形状一致。
那么将其反应在产生路径上,在给定一个路径的情况下,可以在周围产生很多与其相似的路径(一个局部的方法)。如上图中,已经生成一条蓝色的光路,对其进行一些微小的扰动,就形成了一条新的红色路径
-
Works great with difficult light paths
-
Also unbiased
MLT特别适合做光路传播复杂的计算。因为只需要找出一条光线的路径,就可以以其为种子,生成更多路径。如上图,左侧图的光线仅仅从门缝出来,照亮整个场景,光路复杂;右侧图是水波,光线在水中的传播,会产生焦散现象,光线聚集,光路也极其复杂。 -
Difficult to estimate the convergence rate
-
Does not guarantee equal convergence rate per pixel
-
So, usually produces “dirty” results
-
Therefore, usually not used to render animations
但是其也有坏处。
MLT方法很难在理论上分析其最后收敛的速度(什么时候变成没有噪声的),而且由于所有操作都是局部的,也就是说每个像素自己做自己的,那么最后有一些像素收敛的快,有一些像素收敛的慢,得到的渲染图看上去就会比较脏(如上图)。那么用这种方法渲染动画就不可以。
Photon Mapping 光子映射(有偏)
- A biased approach & A two-stage method
- Very good at handling Specular-Diffuse-Specular (SDS) paths and generating caustics
光子映射(有偏)
特别适合用来渲染caustics(焦散)由于光聚焦所产生的图案(如上图) - Stage 1 — photon tracing
– Emitting photons from the light source, bouncing them around, then recording photons on diffuse surfaces
第一步,光子(光线)从光源出发,在空间中碰到物体该反射还是反射,该折射还是折射,直到碰到diffuse(漫反射)物体,就停下来。当这一步做完后,就可以把所有光子整理起来,就知道了各个光子在哪里。
- Stage 2 — photon collection (final gathering)
– Shoot sub-paths from the camera, bouncing them around, until they hit diffuse surfaces
第二步,光子(光线)从摄像机出发,与第一步一样,在空间中碰到物体该反射还是反射,该折射还是折射,直到碰到diffuse(漫反射)物体,就停下来。当这一步做完后,也可以把所有光子整理起来。
- Calculation — local density estimation
– Idea: areas with more photons should be brighter
– For each shading point, find the nearest N photons. Take the surface area they over
把前两步合起来,就可以做一个局部的密度估计。建立在观察的角度上去看哪部分亮哪部分暗,那么光子分布越集中的地方就会越亮。
局部密度估计:对于任何一个点,取其最近的N个光子,找到后去求这N个光子所占的面的面积,那么光子的密度就是用N除以面积。那么N取多少?取小了图片噪声会很明显,取大了得到的结果会模糊。为什么会模糊?也就是为什么这种方式是有偏的?
-
Why biased?
Local Density estimation dN / dA != ΔN / ΔA
But in the sense of limit
More photons emitted ——>the same N photons covers a smaller ΔA ——> ΔA is closer to dA
So, biased but consistent!
在做密度估计时,我们想算的密度应该是当前一个点周围取一个微小的面积dA,里面有dN个光子,即 dN / dA,但是我们实际上算的密度是ΔA面积中有ΔN个光子,即 ΔN / ΔA。正常情况下两者很接近,但绝对不是相等的,所以对密度的估计是一个不对的估计,只有当dA无限小才会趋向于正确。那么何时ΔA会无限小?只有当打出的光子数无限大的时候,有更多的光子被打在面上,那么得到一个着色点周围同样数量N的光子覆盖的面积才会无限小。这时才会更接近dA。也就是当有无限多数量的光子时,才会接近正确的结果,因此是一个有偏但是一致的方法,所以会糊。 -
An easier understanding bias in rendering
– Biased == blurry
– Consistent == not blurry with infinite #samples
那么由此我们可以得出一种判断有偏和一致的方法:和正确的结果相比,如果得到的结果有任何一点的模糊,那就是有偏的;
如果虽然是模糊的,但是只要样本足够多,最后就会收敛到不模糊的结果,那么就是一致的。
Vertex Connection and Merging(VCM)
- A combination of BDPT and Photon Mapping
- Key idea
– Let’s not waste the sub-paths in BDPT if their end points cannot be connected but can be merged
– Use photon mapping to handle the merging of nearby “photons”
VCM的思想是把双向路径追踪与光子映射结合起来。在做BDPT时,双向发出来的认为是光子,如果两个光子相邻很近(如上图,在一个局部的面里),那么这时候就用光子映射,将这两部分的sub-path结合在一块儿,从而得到了更好的结果。
Instant Radiosity (IR)
-
Sometimes also called many-light approaches
-
Key idea
– Lit surfaces can be treated as light sources -
Approach
– Shoot light sub-paths and assume the end point of each sub-path is a Virtual Point Light (VPL)
– Render the scene as usual using these VPLs
实时辐射