games101学习笔记_Advance Topics in Rendering

Advanced Light Transport

在这里插入图片描述
有偏和无偏的光线传播:

  • 无偏:使用蒙特卡洛方法解积分时,不管用多少样本,得到的期望是我们需要的真实值。
  • 有偏:估计出来的期望与真实值不一样。
  • 极限情况下,也就是样本足够多,多到收敛到真实值。但这也是也是有偏的,称为consistent。对应到渲染结果,如果结果相对真实值较模糊,则是有偏的,但当样本足够多结果接近真实值就是一致的。

无偏光线传播方法(Unbiased light transport methods)

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

之前做的路径追踪,利用了光路的可逆性,从相机开始产生路径,最后连接相机与光源。

但对于双向路径追踪来说,就需要把路径追踪这个概念拓展一下:

  • 它会生成两个半路径或子路径,即从相机和光源两个点出发,分别打出一系列伴路径(sub-paths)。
  • 双向路径追踪把两个伴路径的最终端点给连接起来。
  • 虽然双向路径追踪思想简单,但要想实现是非常难的。

在这里插入图片描述
下图是同等条件下,做单向路径追踪和双向路径追踪的对比举例:
在这里插入图片描述

Metropolis Light Transport (MLT)

简单理解马尔科夫链:当前有一个样本,马尔科夫链可以根据当前样本,生成当前样本靠近的下一个样本,因此与之前的均匀采样不一样。

MLT使用了马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo, MCMC),给定足够的时间,能生成一系列以任意函数的形状为pdf的样本。而当采样的pdf与要积分的函数形状一致的时候,这时候的variance最小,效果最好。

对于任何未知的函数,都可以使用马尔科夫链方法生成一系列的样本,使得这些样本分布,就是和这些被积函数形状一致。

对应在光路上是一个局部方法,当存在一条路径时,可以产生与该路径相似的路径。如下橙色与蓝色路径。
在这里插入图片描述
比如说蓝色的光路是我们已经找到的,在这个基础上对蓝色的光路进行一些扰动,各个交点都动一动,就会形成一条新的路径。通过不断地在周围产生新的样本的方法,最后就可以找出所有的path。

在这里插入图片描述
上图是BDPT和MLT的对比图,说一下MLT的优点:

  • 越难的场景(间接光照较多的场景),使用MLT效果越好。
  • 是无偏(unbiased)光线传播方法。

再说一下MLT的缺点:

  • 很难在理论上分析其收敛速度,不知道什么时候收敛;
  • 所有操作都是局部的,有些地方收敛快,有些地方收敛慢;
  • 通常会创造出比较脏的结果;
    在这里插入图片描述
  • 因此不能用来渲染动画。

有偏光线传播方法(Biased light transport methods)

光子映射(Photon Mapping)

  • 一种有偏光线传播方法,也是一个两步地做法;
  • 适合复杂的光线传播,Specular-Diffuse-Specular(SDS);
  • 适合渲染caustics(翻译成聚焦,没有发散的意思):是由于光线聚焦产生的一种非常强的图案,如下图:
    在这里插入图片描述
光子映射的一种实现方法
  • 阶段一——光子追踪
    从光源出发,会辐射出很多光子,光子往各个方向打出去,碰到物体也会做相应地反射或者折射或者其他操作,直到光子打到一个漫反射表面上停止。
    在这里插入图片描述

  • 阶段二——光子收集(最后生成)
    从眼睛(或者说摄像机)开始,打出一系列地sub-paths,这些伴路径也是该反射反射,该折射折射,直到打到漫反射物体表面上。

  • 阶段三——局部密度估计

    • 已知第一步已经把所有光子都记录在diffuse表面上了,第二部从视角出发也弹射了很多次停在diffuse表面上,然后把这两步合起来进行计算,计算局部的密度估计。
    • 所以光子聚集越多的地方月亮,反之越暗。
    • 对于任何一个着色点,取它周围的最近的N个光子(使用加速结构模式进行计算),计算这些光子占据的面积有多大,然后就可以计算出该面积上的光子的密度。
      在这里插入图片描述
Why biased?

从计算局部密度估计上就可以看出原因:
在这里插入图片描述
右边的ΔA与左边的dA本质上就不同,ΔA是根据具体的面积,而dA则是单位面积,所以正常情况下两边的公式不等。除非ΔA无限小,两边的公式才可能相等。

但当N取较小时,噪声大,N取较大时,会模糊。

如果将原先只打出大量的光子改成打出巨量的光子,同时N的取值不变,所以N个光子一定会覆盖更小的区域,但是结果多少有点糊。这时的ΔA就会更接近dA。

在渲染中有偏更容易理解的解释:

  • 有偏(biased)——只要结果有任何一点模糊。
  • 一致(consistent)——虽然有模糊,但是只要样本足够多,最后就会让它收敛到不模糊的结果。

为什么不取一个固定的面积?

  • 因为如果确定取一个固定面积,那么不管有多少光子,ΔA都是确定的,那这样的结果求出来永远都是有偏的。

Vertex Connection and Merging(VCM)

在这里插入图片描述

  • 是BDPT和光子追踪的结合体;
  • 主要思想:
    • 如果伴路径的端点无法连接但可以合并,则不要浪费BDPT中的伴路径;
    • 使用光子映射处理附近“光子”的合并。
      在这里插入图片描述

Instant Radiosity(IR,实时辐射度)

  • 有时又称为many-light(许多光源)方法。
  • 主要思想:
    • 已经被照亮的面可以认为它们是光源,用它们继续照亮其他地方。
  • 方法:
    • 先从光源打出很多light sub-paths,会停在很多地方。
    • 接着将这些地方当作新的光源。
    • 当摄像机看向一个点的时候,就用所有光源来照亮这个点。

在这里插入图片描述

优点:

  • 快速,并且经常能在漫反射场景中得到好的结果。
    在这里插入图片描述

上图采用的是许多光源的方法,并不是真正的IR方法。

缺点:

  • Spikes will emerge when VPLs are close to shading points.(如下图,在一些地方会出现莫名其妙的光点。)
    在这里插入图片描述
  • 不能处理Glossy材质。

Advanced Appearance Modeling

在这里插入图片描述

非表面模型(Non-surface Models)

散射介质(Participating media)

下面是雾气介质:
在这里插入图片描述
下面是云介质:
在这里插入图片描述
云,雾等介质。光打过来会被小颗粒散射到四面八方。
在这里插入图片描述

  • 图1:光线在传播的过程中逐渐消失,能量被吸收。(比如乌云)
  • 图2:光线在行进的过程中,传进了一个会发光的光源。(先不考虑)
  • 图3:光线在行进的过程中,碰到了冰晶,于是将光线随机传播到其他方向上去。
  • 图4:传播过程中也可能收到从其他不同方向反射过来的光线,然后收集到的能量往一个方向上反射出去。
  • 也就是光在传播过程中会发生两件事情:被吸收和传播。

那么怎么散射?
通常情况下我们认为碰到了diffuse表面上会进行均匀的散射。

散射介质有点像BRDF,但对于散射介质来说,相位函数(Phase Function)定义了散射的方式。使用相位函数描述参与介质中任意点x处光散射的角分布。
在这里插入图片描述

散射介质的渲染:

  • Randomly choose a direction to bounce
  • Randomly choose a distance to go straight
  • At each ‘shading point’, connect to the light

光线往某方向走多远取决于介质的吸收能力,遇到小颗粒会反射,在任何一点都可能改变方向,找到一个与光源相连的路径计算其贡献。
在这里插入图片描述

应用:
在这里插入图片描述

头发外形(Hair Appearance)

也是一种不是定义在物体表面上的材质。
在这里插入图片描述
上面有两种高光:

  • 无色的高光;
  • 有色的高光。
Kajiya-Kay Model

一开始人们研究毛发,采用的是简单的模型——Kajiya-Kay模型
在这里插入图片描述
将一根头发当成一根圆柱,所以当有一根光线打到圆柱上,会产生一个漏斗形的散射范围。
在这里插入图片描述

Marschner Model

这才是一种现在广泛使用的模型。
在这里插入图片描述
上面这种模型考虑了光线打到圆柱上:

  • R:会有一部分光线被直接反射掉;
  • TT:也有一部分会穿到头发里面去(光线甚至能穿透人类的皮肤),发生折射再穿出去;
  • TRT:还有一部分,光线穿透到头发里,在头发的内壁上发生一次反射,往回走再发生一次穿透。

在这里插入图片描述
Marschner模型将头发当成玻璃材质的圆柱,头发当然可以扭曲,只是将局部当成直的。

  • 将头发分成内部的皮层(cortex),和外部的角质层(cuticle);
  • 头发内部有色素,所以光线在传播过程中会有部分光会被头发内部吸收,再穿出去。(黑色吸收地多,金色的吸收地少)。
  • 可以知道再在该模型中,我们分三种光线交互:R,TT,TRT。在这里插入图片描述

Marschner模型应用:
上述步骤都是只针对一根头发,对于大量的头发的处理过程可想而知,光源在穿透完一根头发出来后又会进入其他头发中,所以头发的渲染是一项巨大的工程,需要进行巨量的计算。
在这里插入图片描述

毛发外观(Fur Appearance)

不能使用人的头发渲染方法来渲染动物的毛。生物结构上不同。动物的毛的髓质多。
在这里插入图片描述
可以看出动物的髓质(Medulla)要比人类大很多。光线进去之后更容易发生散射。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

双层圆柱模型(Double Cylinder Model)

所以根据上面的理论,又有人提出双层圆柱模型,这是考虑到髓质,并将其精准地描述出来的模型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过上图可以看出,相比于Marchner模型,多了两层:TTs和TRTs。

下图每一根毛发都是真实存在的,每一帧都渲染了很长时间。
在这里插入图片描述

颗粒材质(Granular material)

在这里插入图片描述
我们能通过程序定义,避免所有颗粒的显式建模。
在这里插入图片描述
比如下图,远看是沙丘:
在这里插入图片描述
近看是颗粒:
在这里插入图片描述
在这里插入图片描述

表面模型(Surface Models)

Translucent Material

这里翻译成半透明材质不太准确,准确来说,半透明是semi-transparent,translucent和半透明是有区别的,光线是可以在物体内部发生大量散射,再出射到别的方向去,并不只是沿着直线传播。

比如玉石地材质:
在这里插入图片描述
又比如说水母:
在这里插入图片描述

物理模型:
次表面散射:光线从一个点进入表面,在内部发生了大量散射,最终再出去。
在这里插入图片描述
BRDF的所有作用都发生在一个点上,而BSSRDF是由一个方向进来,但是可以从其他方向出去, 进来和出去的点不一定一样。渲染方程要考虑对表面其他地方进入的光线,要对面积进行积分。也就是BSSRDF对方向和面积均要积分。
在这里插入图片描述

下面是用两个光源近似表现次表面反射的效果。
在这里插入图片描述
在这里插入图片描述

Cloth

布料材质:

  • 一系列缠绕的纤维构成的。
    在这里插入图片描述
  • 纤维缠绕变成一股,股缠绕变成纱线,线织成布料。
    在这里插入图片描述
  • 布料都是缠绕而成的,如果要计算他们的表面模型,就需要与纺织的方向(也就是织法有关),当表面模型进行渲染,不同的织法有不同的BRDF。
    在这里插入图片描述
  • 对于天鹅绒来说,它的材质是所有纤维一根一根往外分布的,不是一个平面,所以不能拿BRDF来描述它。
    在这里插入图片描述
  • 将布料当成散射介质来渲染
    将织布认为是空间中分布的体积,然后将这个体积划分成极其细小的格子,可以知道每个格子中纤维的朝向分布和复杂程度等特性,就可以将这些性质转化为光线的吸收和散射,这种情况下就像在渲染云一样。可以得到相对准确的结果,但是相对应的,电脑的计算量也是非常夸张的。
    在这里插入图片描述
  • 最暴力的做法,把每一根纤维都渲染出来。计算量惊人。
    在这里插入图片描述

Detailed Appearance:Motivation

有的东西渲染出来看着十分完美,反而显得不够真实。
在这里插入图片描述
真实的世界应该是下面那样,会有划痕,会有高光等等。
在这里插入图片描述
热水壶真实感对比:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用200k x 200k的法线贴图(很大的贴图),给予每一个点不同的法线,会得到下面的效果:
在这里插入图片描述
亮片材质:
在这里插入图片描述
逐个追踪单根光线,很多光线并不能打到光源上,没有实际作用。
在这里插入图片描述
所以解决方法是考虑像素,一个像素会覆盖很多的微表面,如果能把微表面分布给拿出来,在一个范围内将这个微表面的法线分布算出来,就能替代原本光滑的分布,并且用在微表面模型里。
在这里插入图片描述
所以考虑一个像素覆盖了多大的范围,那就会法线很多神奇的发现分布,有些分布就会显示出统计学的概率;同样覆盖范围小,也会显示出一些独特的性质:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序化生成表面(Procedural Appearance)

在这里插入图片描述
在这里插入图片描述
不是真正生成材质,用一定方式指导材质的生成,并且可以动态查询(不生成,随用随取)。通过加入噪声函数,在没有材质的情况下定义细节,,如下所示:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值