GAMES101 学习18——高级光线传播与外观建模

lutianfei 发表于 2022/05/13 18:27:25 2022/05/13
【摘要】 参考资料:https://www.yuque.com/sugelameiyoudi-jadcc/okgm7e/48f83a1ded1337a138138201e24b53f6https://blog.csdn.net/qq_36242312/article/details/116242599 一、Advanced Light Transport(高级光线传播)主要分为:无偏光照传播(Unbi...

参考资料:
https://www.yuque.com/sugelameiyoudi-jadcc/okgm7e/48f83a1ded1337a138138201e24b53f6
https://blog.csdn.net/qq_36242312/article/details/116242599

image.png

一、Advanced Light Transport(高级光线传播)

主要分为:无偏光照传播(Unbiased light transport)方法、 有偏光照传播(Biased light transport)方法、实时辐射度Instant radiosity (VPL / many light methods)方法。

这里的有偏无偏的出现,是因为在求解光线追踪的过程中采用了蒙特卡洛积分去近似求解。

无偏光照传播方法指: 在多次重复采样下得到的结果接近所估计的真值
有偏光照传播方法指: 在多次重复采样下存在一定系统误差

1.1 Unbiased light transport(无偏光线传播)

1.1.1 Bidirectional Path Tracing (BDPT 双向路径追踪)

定义: 双向光线追踪(BDPT)是指分别从视点打出射线形成一条子路径,再从光源打出一条射线形成一条子路径,然后连接这两条子路径以形成一条正确的光线追踪路径,并进行计算着色:
image.png

好处: BDPT 适用于光源间接照射的情况。从图中可以看到,左边台灯光源直接照射到朝向天花板的区域,场景中大量物体都是通过间接光照明的。

  1. 对于光线追踪来说(左图),假设视线看到场景中的其他非光源物体(红色区域),这些物体随后会通过漫反射来寻找下一条子路径,但是由于场景光源照射区域较小,可能会反射多次才能打到光源。
  2. 对于 BDPT 来说(右图),先从视线打到场景中的其他非光源物体(红色区域),再从光源打出一条子路径,然后直接连接这两条子路径(红色箭头)就可以寻找到一条正确的光线追踪路径。

所以同 samples 下, BDPT 在该场景表现的效果比光线追踪好
坏处: 较难实现,且渲染较慢
image.png

1.1.2 Metropolis Light Transport (MLT Metropolis光线传播)

定义: 它是应用了 Markov Chain Monte Carlo (MCMC) 来求解光线追踪的方法。

Markov Chain(马尔科夫链) 是一种采样方法,相比之前求解蒙特卡洛积分的随机采样过程,它能在当前状态下采样出邻近相似状态的结果,也就是说当寻找到一条光线追踪路径后,通过 Markov Chain Monte Carlo (MCMC) 可以采样到它周围的光线路径。同时,当给定时间足够,Markov Chain 还能够生成符合任意函数的概率密度函数的样本,也就是说通过 Markov Chain 我们可以获得满足任意形状的函数的采样样本,所以此时求解光线追踪的结果也是最优的。

好处: 它能处理较为复杂、困难的场景:
image.png

坏处:由于引入了 Markov Chain Monte Carlo (MCMC),使得每次都能采样光线追踪路径周围的路径,所以它是一种局部的方法,所以很难估计它的收敛速度,并且,不能保证每个像素都能同时收敛,因此会产生一些“脏”的渲染结果:
image.png

1.2 Biased light transport(有偏光线传播)

1.2.1 Photon Mapping(光子映射)

定义: 它是一种有偏,分两步进行的方法。
它擅长于处理光线路径经过 Specular-Diffuse-Specular (SDS,三种材质) 的这种情况,能产生 Caustics 现象。
Caustics 的定义:光线聚焦所产生的图案
image.png

实现步骤:
第一步,从光源出发,打出光线(光子)并进行反射,直至光子接触到漫反射表面上,记录光子的位置;
第二步,从相机出发,打出一系列子路径并进行反射,直至碰撞到漫反射表面。
第三步:计算每个着色点邻近 N 个光子的局部密度: N / A \triangle \mathrm{N} / \triangle \mathrm{A} ,△N 表示邻近光子数量,△A 表示这些光子围成的面积。光子分布越多的区域就应该越亮。

为什么这种方法是有偏的?
因为在计算局部密度时,实际上是用△N/△A 在近似求解dN/dA,当从光源打出的光子数量足够多时,dN/dA=ΔN/△A,如果数量不够时,则近似求解存在一定误差,从而产生模糊:
image.png

image.png

1.2.2 Vertex Connection and Merging(VCM)

定义: 它同时考虑了 BDPTPhoton Mapping 来做光线追踪。

如图所示,红框标记路径为BDPT。下面一条路径,当从视角打出子路径反射至 X 2 X^{*}_{2} ,从光源打出子路径反射至 X 2 X_{2} ,此时 X 2 X^{*}_{2} X 2 X_{2} 位于同一个面上(满足一定条件时),就把这条路径当成是 Photon Mapping 来处理。

image.png

1.3 Instant radiosity(实时辐射度算法)

定义: 从光源打出很多条子路径光线反射至场景,子路径光线停止后,将它们作为光源来渲染场景
image.png

好处: 在 diffuse 场景表现较好
坏处:不能处理 glossy 材质,且会形成图中白色箭头的小光源(与投影光源距离的平方有关)
image.png

二、Advanced Appearance Modeling(高级外观建模)

Appearance Modeling 在计算机图形学中指的是如何用模拟自然界真实物体的材质,课上主要介绍了 Advanced Appearance Modeling 中的 Non-surface models 、 Surface models 和 Procedural appearance 三类方法。

2.1 Non-surface models(非表面模型)

非表面模型主要针对的是与表面无关的材质的建模方法。

2.1.1 Participating media(散射介质,云、雾等)

散射介质指的是光在穿过散射介质后,它会被吸收或散射:
image.png

人们通常使用相位函数来描述光在散射介质某点处的散射角度分布:
image.png

散射介质是如何渲染的?分三步:

  1. 随机选择一个反向进行弹射
  2. 随机选择光线弹射后的距离
  3. 在每一个着色点处与光源相连,并依次计算光源对着色点的贡献
    image.png

散射介质的应用:
image.png

2.1.2 Hair Appearance(BCSDF)

模拟头发是一件较难的事情,因为头发本身不是物体表面(头皮)的材质,它是距离物体表面有一定距离,且自身存在与光照发生一定作用。
image.png

如何对头发进行建模?
Kajiya-Kay Model:它是把每一根头发看成是圆柱体进行建模处理,发生反射时考虑光源会以一个圆锥体的方向进行散射:
image.png
image.png

Marschner Model:在 Kajiya-Kay Model 的基础上,考虑光与圆柱体有三种作用方式:
R: 光线被反射,以圆锥体范围进行散射
TT:光线穿入圆柱体,穿出圆柱体,发生两次折射
TRT:光线穿入圆柱体,光线被反射、光线穿出圆柱体
image.png

这里等于是把人的头发看成是由类似玻璃的圆柱组成,分为两组结构:

  1. 外层由 cuticle 组成
  2. 内层由 cortex 组成

image.png

image.png

2.1.3 Fur Appearance

当直接应用人的头发的模型在动物毛皮上时,效果与真实结果存在一定差距:
image.png

这是因为动物毛皮比人体头发多了一层 Medulla 的结构,它会使光发生散射:
image.png

这种添加了一层 Medulla 结构的建模方式叫做Double Cylinder Model
image.png
image.png

image.png

通过这个结构渲染出来的动物毛皮就会真实许多:
image.png

2.1.4 Granular Material(颗粒材质)

这是一种颗粒状的材质:
image.png

它通常可以通过每个单元格上的 granules 来进行渲染

2.2 Surface Models(表面模型)

2.2.1 Translucent Material(BSSRDF 半透明材质)

这种材质更像是一种“半透明”的材质:
image.png

这种材质所呈现的效果的形成原因是:光线在穿入表面后会在表面内部发生大量散射,再穿出表面(次表面散射)
image.png

基于次表面散射的 BRDF (BSSRDF)其实是对 BRDF 的一种延伸,它不像 BRDF 光线是从哪个点打入,就从哪个点反射出。相反,它由于在表面内部发生了一些散射,所以会从不同的位置反射,由于反射的位置不定,所以在 BSSRDF 中还需要对表面面积A进行积分:
image.png

但是实际上求解 BSSRDF 比较难,这里采用了一种近似求解的方式,即当光线打入到物体表面的着色点时,假设物体表面的底部和顶部分布有两个虚拟光源在照射着周围的着色点,通过这样以近似求解 BSSRDF:
image.png

2.2.2 Cloth(布料)

布料是由不同的 Yarn 所制成的,而 Yarn(线) 是由不同的 Ply(股) 所缠绕得到的, Ply 是由 Fiber 缠绕得到的。所以布料的最基本单位是 Fibers:
image.png

布料的渲染通常三种方式:Surface、Participating Media、Actual Fibers

① Surface
这种方式是把布料当成是物体表面材质进行渲染,通过给定的织布模式,来计算对应的布料 BRDF:
image.png

但是它不适用于一些布料,即在物体表面外还存在一些毛绒纤维(如天鹅绒等):
image.png

② Participating Media

另一种做法是把布料看成是空间中分布的体积进行处理,它把空间分成不同细小的格子,在不同格子里再调整纤维的分布和复杂程度,以模拟布料:
image.png

③ Actual Fibers:

这种方式是把布料当成实际上的每一根纤维进行渲染:
image.png

2.2.3 Detailed material(non-statistical BRDF)复杂的材质

这种材质实际上是用一种不完美的材质进行模拟,以产生更加真实的效果。

在真实世界中,物体表面材质往往存在一定“缺陷”,如刮痕等。在我们之前学习的 Microfacet BRDF 中,物体表面法线分布是通过一些分布计算得到的,如高斯分布等,但是在实际中我们期望的是存在一些扰动的分布,这样会使结果更加真实,所以就定义了 Detailed material 来解决这个问题。
image.png

通过在法线图中定义一些噪声,会使得结果更加真实:
image.png

2.3 Procedural Appearance(程序化生成材质)

通过一定方式生成物体表面材质(纹路等)。即给定x,y,z 坐标,通过某个函数f(x,y,z) 可以立即得到该点对应的纹理noise,这种方式就叫做 Procedural Appearance,这种函数也叫做 noise 函数

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。