0%

【Games 101】Lec 18:渲染的前沿话题

Lecture 18:Advanced Topics in Rendering

东西很多,当作扩展听一听就行。

1. 高级光线传播

1.1 概述

  • 无偏光线传播
    • 双向路径追踪
    • Metropolis light transport (MLT)
  • 有偏光线追踪
    • 光子映射
    • Vertex connection and merging (VCM)
  • 试试辐射度算法

1.2 有偏(Biased)与无偏(Unbiased)的 Monte Carlo 估计

  • 无偏
    • 无偏的 Monte Carlo方法没有任何系统误差。即无论使用多少样本,无偏估计的期望值总是正确的。
  • 有偏
    • 有系统误差存在就是有偏估计。
    • 有偏估计的一致性(consistent):当取样无穷大时没有系统误差(会收敛)

在图形学中

  • Biased(有偏) == blurry(模糊)
  • Consistent(有偏一致性) == 当取样点无穷时不模糊

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

1.3.1 概述

  • 无偏的 光线传播方法。

(路径追踪是从相机到光源使用一条路径连接起来。)

1.3.2 BDPT 思想

  • 分别从相机和光源追踪sub-paths
  • 从两个 sub-path 连接端点(各追踪一部分然后汇聚)

1.3.3 BDPT 特点

  • 适合光线传播在光源这一边比较好算的情况。
  • 难以实现且非常慢

1.4 Metropolis Light Transport (MLT)

1.4.1 概述

  • 无偏估计
  • 用马尔可夫链来进行采样

1.4.2 马尔可夫链 Markov Chain Monte Carlo(MCMC) application

根据当前的样本可以生成与其靠近的下一个样本,他可以生成以任意形状函数为PDF的样本。

关键思想:局部扰动一个现存路径来获得一个新路径。

1.4.3 特点

优点:

  • 比较适合做困难的光线传播(只要找到一条路径做为种子就可以找到更多路径)
  • 无偏

缺点:

  • 难以估计收敛速度
  • 不能保证每个像素的收敛速度都相等(比较局部)
  • 所以图片看起来比较脏
  • 不能渲染动画

1.5 光子映射(Photon Mapping)

1.5.1 概述

  • caustics(聚焦):由于光线聚焦产生的一些列图案。
  • Specular-Diffuse-Specular(SDS):光线先通过镜面反射,然后再进行漫反射,然后再进行镜面反射。
  • 有偏的
  • 擅长处理 Specular-Diffuse-Specular(SDS)paths 和生成 caustics。

1.5.2 方法

  1. 光子追踪

从光源发射光子,让它们在四周弹射,直到光子打到diffuse的物体上,把光子记录下来。

  1. 光子收集

从眼睛和摄像机开始,射出 sub-paths,让它们在周围跳跃,直到它们打到漫反射的物体上。

  1. 计算局部密度估计

当第二趟打到 diffuse 物体表面时,就要做一个局部的密度估计。

思想:光子分布越集中越亮。

做法:对于每个着色点,找到最近的N个光子。计算它们占据的面积。然后就可以计算光子的密度。

1.5.3 分析

  • 为什么有偏

    • 密度的估计不准确,只有 dA 足够小才接近正确。
  • 解决

    • 更多的光子辐射出去 → 相同的N个光子则会覆盖更小的区域 ΔA → ΔA 会更加接近 dA。所以它是biased,但是 consistent 的。

1.6 顶点连接和合并 Vertex Connection and Merging(VCM)

1.6.1 概述

结合了 双向路径追踪光子映射

1.6.2 思想

  • 如果端点不能被连接而是可以被融合就不浪费 BDPT 中的 sub-paths了。
  • 使用 photon mapping 来处理 “photons” 附近的融合。

1.7 实时辐射度算法 Instant Radiosity (IR)

  • 也称为 many-light 方法
  • 思想:已经被照亮的表面可以被当作光源。
  • 方法:
    • 从光源打出 sub-paths 并把每一个 sub-path 的端点当作 Virtual Point Light(VPL)
    • 使用这些 VPLs 渲染场景

  • 优点:快速并且通常对漫反射场景的结果比较好。
  • 缺点:
    • 当 VPLs 非常接近着色点的时候,Spikes 将会融合(如下右图有过亮的点)。
    • 不能处理glossy的材质。

2. 高级外观建模

2.1 非表面材质

2.1.1 散射介质(Participating Media)

当光通过散射介质时,任何一点可以(部分)吸收和散射。

使用相位函数(Phase Function)来描述参与介质中任意点的光散射角分布。

散射介质的渲染过程

  • 随机选择一个方向来弹射。
  • 随机选择一个距离直行。
  • 对于每一个“着色点”,把它连接到光源。

2.1.2 Hair Appearance

  1. Kajiya-Kay Model

头发会散射成一个圆锥。像是diffuse+specular。

  1. Marschner Model

除了考虑被散射的光线还要考虑穿过头发的光线。Marschner Model 考虑了以下三证类型的光线。
R:直接反射的光。
TT:穿进去再传出去的光。
TRT:光线进到头发里面,在头发的内壁发生一次反射再回去。

2.1.3 Fur Appearance

人和动物毛发都具有三层结构,如下图所示。但动物的 Medulla 比人大很多。

双层圆柱模型 Double Cylinder Model

2.1.4 颗粒材质(Granular Material)

2.2 Surface Model

2.2.1 Translucent(半透明) Material

2.2.2 次表面散射(Subsurface Scattering)

Subsurface Scattering 是在表面下发生的散射。

  • BSSRDF 是BRDF概念的延申。它表示某一点的出射radiance来源于另一个点的微分irradiance。
  • Scattering Function 渲染方程的延申,表示所有表面上的点和所有方向的积分。
  • Dipole Approximation 通过引入两个点光源来近似次表面散射的效果

2.3 布料 Cloth

2.3.1 概述

  • 布料是一系列缠绕的纤维构成的。
  • 缠绕有两级:纤维(Fiber)第一次缠绕会成为股(Ply),股(Ply)缠绕会成为线(Yarn)

2.3.2 渲染布料的三种方式

Cloth: Render as Surface(把布料当作表面来渲染)

  • 给定编制图案,计算总体表现。
  • 使用BRDF来渲染。
  • 但是对于天鹅绒,根本不是一个平面,所以当作表面来渲染不合理。

Cloth: Render as Participating Media(把布料当作散射介质来渲染)

  • 把单个纤维和它们分布的性质转化为散射参数。
  • 然后把它们当作散射介质来渲染。

Cloth: Render as Actual Fibers (把布料当作真实的纤维来渲染)

  • 即明确的渲染每一根纤维。

2.4 Detailed Appearance

2.4.1 动机

渲染出来的太过“完美”,而真实的世界中充满着各种各样的细节。

而细节很难通过渲染表现出来。

因为对于微表面模型来说,通过从光源的不断反射,只有非常少的一部分会被反射到相机。

2.4.2 解决:BRDF over a pixel

由于像素覆盖很多的微表面,所以将一个像素覆盖的法线分布计算出来然后替换光滑的法线分布,用在微表面模型里。

一个可以像素覆盖不同大小的微表面,对于比较大的范围会得到统计学规律,而对于比较小的微表面得到的就比较有特点。

不同类型的法线贴图会得到不同的法线分布。

2.5 波动光学

当物体非常小,就不能假设光沿直线传播,而是要考虑波动性,考虑光的波动性。

波动光学的 BRDF 与几何相似,但是相对而言比较不连续。

2.6 程序化生成的外观(Procedural Appearance)

动机 不使用纹理贴图来定义细节。

3D noise(噪声函数): 可以直接通过噪声函数来计算细节,使用这种方法可以看到被切割或断裂的内部纹理。

应用:地形、水面、木头。

参考

图形学笔记(十六)渲染的高级问题 —— BDPT、MLT、光子映射、VCM、IR、散射介质、毛发材质(双圆柱模型)、次表面散射、布料渲染-CSDN博客

这周事情比较多,人又懒得一批… 就一直没更…

欢迎关注我的其它发布渠道