光线传播、外观建模
高级光线传播与复杂外观建模(lecture 18)
内容:- 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)
- Unbiased light transport methods
- Advanced Appearance Modeling
- Non-surface models
- Participating media
- Hair
- fur
- Granular material
- Surface models
- Translucent material
- Cloth
- Details material
- Non-surface models
- Procedural appearance
Bidirectional path tracing (BDPT)
- 相对于一般的路径追踪,双向路径追踪的想法是从光源以及摄像机分别引出一系列的半路径,最后再将二者端点连接起来。
- 每个着色点打出的方向比较随机,有时候path打到的地方不太合理。故通过BDRT,光源与摄像机都打出一条光线,最后将二者连接起来,得到的path会更加合理些。


Metropolis Light Transport (MLT)
- 在之前的蒙特卡洛积分时,可以用任意的PDF去采样一个函数,但是当采样的PDF与被积函数的形状一致的时候,得到的误差是最小的。
- 采用马尔科夫链的方法生成的样本分布对应的PDF与被积函数形状一致
- 马尔科夫链通俗的理解:当前有一个样本,马尔科夫链可根据当前的样本在其周围生成与它靠近的下一个样本
- 马尔科夫链的蒙特卡洛方法:在足够的时间内,可以生成任意函数形状的PDF样本。
- Metropolis光线传播方法正基于此
- 局部性
- 在已经有一个路径的前提下,在其周围生成与其相似的路径
- 在一个path产生更多的path最后找到所有的path
- 适合复杂的光路传播,只要找到一个path就能在其周围找到更多的path


简单的蒙特卡洛方法能够知道其收敛速度,但是MLT不知道其收敛速度,并且有些像素会收敛快有些地方收敛慢导致画面看起脏。

Photon Mapping 光子映射
-
光子映射有多种实现方法,以一种为例:
- 第一步:
- 光源散发出众多的光子,当光子打到发生漫反射的物体时就停在那里。
- 第二步:
- 从摄像机打路径,该反射反射,该折射折射,直到打到diffuse的物体上就停止。
- 计算:
- 每个路径最终都打到一个着色点上,对于每个着色点,光子分布集中的地方就越亮。因此,通过着色点的局部的密度估计,通过取其最近的N个光子,并且找出着N个光子占据的面积,求出密度。
- 第一步:
-
N少的时候,噪声多,当N取很多的时候,结果会好一些,但是得到的结果会有模糊。
- 在做密度估计时,每个着色点的实际密度应该是在一个微小的面积内里面的光子的数目相对于的比值,与实际计算上是有误差的。
-
当实际的覆盖面积足够小时,即打出的光子数越来越多,更多的光子辐射出去,同样的光子数目会集中在一个更小的区域,那么与真实结果越来越接近
-
当光子无穷的时候,得到的就是最终的结果---也就是光子映射是一个一致的方法。
-
但是只要光子数目不是无穷的,那么结果就不是真正正确的,多少会有些糊。
-
有偏的--与正确的渲染结果相比,最终的渲染画面只要有一点模糊,称对应的方法就是有偏的(Biased)
-
一致的--虽然是有模糊的,但是只要样本足够多,最后的结果就会收敛到真正的。
-
如果规定区域求光子数目进而得出密度,那么对应的结果不可能是一致的因为始终ΔS不会变小,规定了之后就是一个确定的值了不满足极限中的任意的概念了。



光子映射适用:

Vertex Connection and Merging (VCM)
- 结合双向的路径追踪与光子映射
- 当双向路径追踪两个端点十分接近的时候,两个端点不可能再弹一次光线的时候,又不想浪费。就认为其中的一半过来的不再认为是光路而是光子,然后进行推导。

Instant Radiosity (IR) 实时辐射度
- 想法:将认为已经被照亮的地方当成光源(VPL),然后用它们来照亮别的地方
- 用直接光照方法得到间接光照的结果。

但是本身也有些问题:

Non-surface models
外观就是材质,对表面模型来说材质就是BRDF。
Non-surface models
Participating Media
类似雾、云,定义在空间中的Participating Media(散射/参与介质)

如何描述这种散射介质:
- 当光线在行进过程中,穿进了散射介质(想象一根光线穿过了云),会发生能量的吸收(类似乌云)以及散射(方向为向内或者向外)。

怎么散射:
- Phase Function来定义,决定了光线如何散射

渲染方式:
- 根据能量的吸收以及散射的方向的关系,从而产生path,进而进一步计算贡献。
- 渲染方程只告诉了光线如何与物体表面进行作用,有其他的方程描述光线如何与物体体积进行作用。
- 考虑光的穿透性,很多材质看起来是个表面材质实际上不是,光线是有可能进入物体里的,只是进的多还是少。
Hair Appearance

对于每一根头发,将其抽象出一个物理模型--Marschner Model:

Marschner 模型考虑:
- 将头发当成一个圆柱体
- 光线与圆柱体作用时:
- 直接反射 R
- 穿过圆柱体即折射两次 TT
- 折射进去再反射出来TRT
- 并将圆柱体当成一种玻璃材质,其中有色素,有能量的吸收

进一步考虑多根头发的相互作用:

Animal Fur
直接将人的头发模型用于渲染动物的毛发,会发现不对劲。

考虑到动物毛发的实际模型:

引入髓质(影响散射)进行渲染:


进一步对之前的Marschner Model进行修正:

引入散射项:


应用:


Granular Material
对于类似颗粒状的一粒一粒的材质,渲染起来需要大量的时间,可通过对模型进行简化处理。

Surface models
Translucent Material
类似玉石这类Translucent Material(半透明),光线进去后,经过作用散射后改变方向再从物体另一个地方出来。

反映在物理上,光线从一个点进入到某个表面,然后在下面发生了大量的散射,从另外一个地方钻出去。----次表面散射(Subsurface Scattering )

次表面散射对应的BSSDF可以看出对BRDF的延申,规定了光线从哪个方向进来,从哪个地方进来,从哪个方向出去,从哪个地方出去。
对应的渲染方程也要延申修改。

由于计算量的复杂,可以进一步的对这种Translucent Material进行简化。
我们发现,当光线进入到Translucent Material发生次表面散射时,就好像Translucent Material表面底下有个光源在发光(如手指放在闪光灯底下),从底下照亮周围的一片着色点。
为了物理上真实,进一步推出应该是有两个光源去照亮Translucent Material,这样最终得到的结果就与次表面散射十分接近(Dipole Approximation)



Cloth
布料:一系列缠绕的纤维构成的。不同的Fibers(纤维)经过缠绕形成Ply(股),不同的ply再缠绕形成Yarn(纱),最终通过织成衣物。

一种渲染方法是把织物看成空间中分布的体积,然后将其划分为微小的格子,在每个小格子里面找到纤维的分布,走向,然后将其转换为光线的吸收、散射情况,将布料的渲染当成类似云一样的散射介质的渲染。

或者把每一根纤维渲染出来,最终得到布料材质。

或者直接当成物体表面通过BRDF渲染。
details
有时候渲染的结果过于完美,导致渲染出来反而不真实,真实的物体实际上会有更多的细节。
考虑物体本身的细节渲染,得到的结果将更加真实。
基于微表面模型渲染的结果:

在微表面模型中,修改法线的分布去渲染细节:


考虑细节后,渲染的结果会相对真实,但是渲染时间会变长:

渲染时间长的主要原因是因为微表面模型认为光打到微小的表面发生的是完全镜面反射,导致许多反射的光线打不到光源,即无效路径。

考虑一个像素覆盖的微表面的法线分布,替代之前的光滑的分布。

一些像素覆盖微表面的法线分布,显现出的一些独特的统计规律:

当细节考虑到一定程度的时候,就要考虑波动光学而不是几何光学。


Procedural Appearance
Procedural Appearance:程序化生成材质:
在很多时候,我们不用去真正的生成某种材质,而用一定的方式去指导它的生成,并且可以动态查询。通过定义在三维空间中的噪声函数去查询对应的材质,而不是真正的花费大量的内存去存储。随用随取。
直接查询相关的函数而不去预先真正的定义的一些结果:


reference:
[1] GAMES101-现代计算机图形学入门-闫令琪

浙公网安备 33010602011771号