Games101 计算机图形学课程笔记:Lecture 18 Advanced Topics in Rendering

Advanced Light Transport

有偏和无偏的光线传播:

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

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

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

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

而双向路径追踪会生成两个不同的子路径,从光源会打出路径,从相机也会打出路径,
在着色点把两个路径连起来,就形成了整条路径。
思想很简单,实现很困难。
以下是相同采样率下单向和双向的结果:

Metropolis Light Transport (MLT)

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

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

因此对于任意未知的函数,都可以通过马尔科夫链的方法得到一系列的样本,使得这些样本的分布,和被积函数的形状一致。对应在光路上是一个局部方法,当存在一条路径时,可以产生与该路径相似的路径。如下橙色与蓝色路径。

优点:越难的场景(间接光照较多的场景),使用MLT效果越好。
缺点:很难在理论上分析其收敛速度,不知道什么时候收敛;所有操作都是局部的,有些地方收敛快,有些地方收敛慢;不能用来渲染动画。

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

光子映射 Photon Mapping

  • 适合渲染caustics(由于光线聚焦产生的一种非常强的图案),如下图:
  • 适合复杂的光线传播,Specular-Diffuse-Specular(SDS)

光子映射的一种实现方法

  • 光子从光源被源源不断地打出来,经过反射、折射,在diffuse表面会停下来;从摄像机开始往各个方向打多种路径,经过反射折射等也会在diffuse表面停下来。
  • 局部密度估计:光子分布越集中越亮,因此对任何一个着色点取周围最近的N个光子,找出这N个光子的占据的面积,从而算出密度。

但当N取较小时,噪声大,N取较大时,会模糊。一般应该取足够小的面积,选择面积内的光子数量来计算密度,所以上述计算方式有问题。顺应这个思路,当打出的光子足够多时,相对面积就会很小。
但若取固定的面积来计算,当光子很多时,会导致面积内光子变多,造成结果依旧不准确。

Vertex Connection and Merging

将双向路径追踪和光子映射结合起来。应用挺广泛。

Instant radiosity (VPL / many light methods)

已经被照亮的表面就认为是光源。光源打出光线,被照亮的地方是新光源,使用所有新光源来照亮着色点。相当于考虑了间接光照。

渲染出来有些地方可能会莫名地发光。
不能针对glossy的物体。

Advanced Appearance Modeling

非表面模型 Non-Surface Models

散射介质 Participating Media

云,雾。光打过来会被小颗粒散射到四面八方。

Phase Function相位函数定义了散射的方式。
如何渲染?光线往某方向走多远取决于介质的吸收能力,遇到小颗粒会反射,在任何一点都可能改变方向,找到一个与光源相连的路径计算其贡献。

Hair Appearance

需要考虑光线与每根头发的作用。

Kajiya-Kay Model

光线打到头发上会散射出一个圆锥。

效果不好。

Marschner Model

光线不仅会反射(R),穿进头发发生折射(T),穿进头发再穿出(TT),穿透反射再穿透(TRT)。

将头发当成一个玻璃圆柱,外层叫cuticle,里面叫cortex。

光线跟头发会产生多次散射,渲染很困难,计算量很大。

Fur Apperance

不能使用人的头发渲染方法来渲染动物的毛。生物结构上不同。动物的毛的髓质多。

使用双层圆柱模型来建模动物毛发,更为复杂。

Granular(颗粒) material

并没有很好的效果。
远看是沙丘,近看是小颗粒堆积的。

表面模型 Surface Models

Translucent(半透明) Material

次表面散射:光线从一个点进入表面,在内部发生了大量散射,最终再出去。

次表面散射可以看成对BRDF概念的延伸,BRDF的所有作用都发生在一个点上,而BSSRDF是由一个方向进来,但是可以从其他方向出去, 进来和出去的点不一定一样。渲染方程要考虑对表面其他地方进入的光线,要对面积进行积分。

Dipole方法近似次表面散射,使用两个光源来模拟。

Cloth

纤维缠绕成股,股缠绕成线,由线编制为布。
布料渲染方法:

  • 当表面模型进行渲染,不同的织法有不同的BRDF。
  • 但对天鹅绒这种织物没办法像上述那样做。因此把织物认为是空间中分布的体积,划分成超级细小的格子,每个格子里知道纤维的分布与朝向,分开来计算。即将织物当作一个体积,知道体积中微小的块的性质。类似云烟的渲染。
  • 最暴力的做法把每根纤维渲染出来,像头发一样。

Detailed material (non-statistical BRDF)

有的东西渲染出来太完美,不够真实。

渲染:

真实:

微表面模型中使用不同的法线分布,若法线分布有一些噪音,可以得到含有噪声的真实效果。

但这样渲染非常慢。
解决方法:
微表面的镜面反射在法线分布复杂的情况下,很难建立有效的的反射光路(光源→表面→摄像机)。
因此让一个像素对应很多微表面,把整块范围内的法线分布替换原本光滑的分布。
一个像素覆盖的微表面数量不同,会得到不同的效果。

PS:
波动光学:之前所有的计算都把光线当作粒子来计算,但光具有波粒二象性,有很多只有在把光当作波的时候才会有的性质就会被忽略,并且在尺度很小的情况下,波动性会起作用,发生干涉衍射。
波动光学的BRDF结果与几何光学类似,但不连续(干涉导致)

程序化生成 Procedural appearance

而不是真正生成材质,用一定方式指导材质的生成,并且可以动态查询。(不存储,随用随算)。一般使用一些噪声函数。
Houdini专门做这个。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值