一、高级光线传播

Light Transport

无偏光线传播 Unbiased Light Transport

unbiased Monte Carlo 就是计算总是得到我们的期望值,也就是结果是正确的,那就是无偏的。否则就是有偏的
一致的,也是有偏的,但是当样本数量很大会收敛到一个正确值。

双向路径追踪 Bidirectional Path Tracing BDPT

image.png
光源和观察者各发送一条sub-path,然后连接它们的终点得到一个path
image.png
好处:在光源比较复杂的时候能够得到不错的效果,如上图 (很多diffuse,相机不好找到光源)
坏处:很难实现,而且比较慢

Metropolis Light Transport (MLT)

这也是按人名命名的,不是大都市。。
用马尔科夫链 MCMC实现 采样
因为能够实现让PDF与被积函数同形,所以误差也最小

这是一个局部方法,在实现效果上,就是给任意一个路径,能够生成附近相似的路径
image.png

好处:适合做复杂的,困难的光路传播。因为只需要找到一条光路,作为种子,就可以从周围发散找到其他光线。
image.png caustics ,S-D-S path
坏处:

  • 很难在理论上分析收敛的速度。
  • 不好分析sample与variance的关系。
  • 因为是局部的,有的地方收敛了,有的没有,导致画面会很脏
    • 所以不能用来渲染动画,否则上下两帧差异太大,会有画面抖动感

image.png

有偏光线传播 Biased Light Transport

image.png
有偏 = 模糊

光子映射 Photon Mapping

variance和bias的trade off

biased but consistent 一致的
非常适合用来渲染Caustics
image.png
步骤:
image.png

  1. 首先把光子从光源发射,然后让它们停止在diffuse的表面,
  2. 然后从眼睛出发发射sub-path
  3. 然后,就可以做第三步计算局部的密度轨迹 local density estimation

image.png
在物体表面,光子分布越集中就越亮,越不集中就越不亮
对于任何一个着色点,取周围N个最近的光子,变成Nearest Neighbor问题,近邻算法
找到之后,画出这N个点包围的面积
最后求得密度就是N除以面积 = image.png ,因为

  • 后者是去一个点看它内部有多少光子
  • 前者是给定一些光子数,看它实际的面积

当dA足够小的时候,就正确了, 否则是不正确的。这就是光子非常多的情况:
image.png
如果是确定了大小dA,然后去找里面有多少光子,那么永远得到都是有偏且不一致的结果。
因为ΔA永远不会等于dA

VCM- Vertex Connection and Mapping

是BDPT和Photon Mapping的一种结合办法
image.png

IR - Instant Radiosity

实时辐射度算法
又叫many light 算法
image.png
用光源照射到Lit surface,然后把他们当作光源也就是VPL,
然后再去照亮一个着色点

好处:

  • 在漫反射场景中能提供很不错的效果

坏处:

  • 在接缝处会有漏光的效果
  • 不能处理glossy材质

image.png

二、高级外观建模

advanced appearance modeling
之前说到shading model 就是BRDF,这里介绍一些其他的外观建模

Non-surface Models

散射介质 Participating media

比如说云雾,冰晶会吸收与散射光线
image.pngimage.png
被吸收与被散射
用phase函数决定如何散射
image.pngpath随机方向走随机距离
image.pngimage.png
对于巧克力,其实也可以这么认为是散射介质,只是光线进去不久就消失掉

毛发 Hair Fur Fiber (BCSDF)

image.png
无色高光 有色高光

kajiya-Kay Model

image.pngimage.pngdiffuse和specular的结合

Marschner Model

反射也有折射
把头发当作玻璃结构
image.pngimage.pngimage.png
但是这是一根头发的计算模型,
如果考虑光线穿过头发再进入到其他头发那计算量会非常大

Fur Appearance - As Human Hair

image.png
人的头发不足与描述动物毛发
原理:
image.png
动物毛发的髓质比人的要大得多,所以散射程度也更大
image.png
人也是有跟没有髓质模拟差别很大
image.png

Double Cylinder Model

双层圆柱模型,在玻璃柱模型基础上增加了髓质的散射
image.pngimage.png
image.pngimage.png

颗粒体 Granular Material

颗粒体
image.png
image.png

离得近是一粒一粒的,离得远是沙丘
比如这个短片的沙子
点击查看【bilibili】

Surface Models

BRDF在之前已经说了

半透 Translucent material (BSSRDF )

半透明 semitransparent 吸收
translucent 吸收+散射
在光进入物体后发生多次散射,最后在某个位置光线输出或者吸收

玉石 Jade

image.png

水母Jellyfish

image.png

次表面散射 Subsurface Scattering

image.png

BSSRDF

就是对BRDF的延申,增加了两个维度,入射和出射的位置
因为BRDF就是打到一个点然后从一个点出去
这个是打到一个点可能从另外一个点出去
image.png

Dipole Approximation

次表面,相当于
假设

  • 有个光源在次表面里面
  • 有一个在对应的外面

简化计算
image.png
效果
image.pngimage.png(dipole估计)
image.png动画1224.gif

布料 Cloth

布料是一系列缠绕的纤维
image.pngimage.png
fiber 纤维 - ply股 - yarn 线 - cloth 布

Render as Surface

image.png
用BRDF有局限性,比如天鹅绒
image.png
比较合理的是看成空间中分布的体积

Render as Participating Media

image.png
把空间分成很小的格子,然后当散射介质去渲染
渲染量非常大

Render as Actual Fibers

当成纤维渲染每一根,就像是渲染头发一样
image.png

细节 Detailed material(non- statistical BRDF)

Motivation

为什么需要复杂的有细节的材质
因为太完美了,需要一些人工痕迹
image.png real life
image.pngrendering result

微表面模型的分布函数

image.png
左图是完美的正态分布,右图是符合真实效果的正态分布
image.png
image.png

微表面模型中的path tracing问题

image.png
很难打到光源/摄像机去
于是我们不计算真的微表面的法线,而是计算一个范围内的微表面法线分布
image.png
也就是用贴图 range query 来平均某个范围的微表面
image.pngimage.png
法线分布与法线贴图

当物体细小到光波的尺度

这时候不再是几何光学,而是要用波动光学。(不连续的效果)
就要考虑光的衍射干涉等
image.png

Procedural Appearance

用三维噪声函数
image.png
给定任何一个空间中的点,会返回一个值
常用:生成水面,地形,纹理,
image.pngimage.pngimage.pngimage.png