我是靠谱客的博主 鲜艳电源,最近开发中收集的这篇文章主要介绍GAMES101课程学习笔记—Lec 18:Advanced Topics in Rendering1 高级光线传播 Advanced Light Transport2 高级外观建模 Advanced Appearance Modeling,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

GAMES101课程学习笔记—Lec 18:Advanced Topics in Rendering

  • 1 高级光线传播 Advanced Light Transport
    • 1.1 无偏光线传播方法 Unbiased light transport methods
      • 1.1.1 双向路径追踪 Bidirectional path tracing (BDPT)
      • 1.1.2 Metropolis光线传播 Metropolis light transport (MLT)
    • 1.2 有偏光线传播方法Biased light transport methods
      • 1.2.1 光子映射 Photon mapping
      • 1.2.2 顶点连接和合并 Vertex connection and merging (VCM)
    • 1.3 实时辐射度 Instant Radiosity (VPL / many light methods)
  • 2 高级外观建模 Advanced Appearance Modeling
    • 2.1 非表面模型 Non-surface models
      • 2.1.1 散射介质 Participating media
      • 2.1.2 头发 毛发 Hair / fur / fiber (BCSDF)
        • 2.1.2.1 头发 Hair
        • 2.1.2.2 毛发 Fur
      • 2.1.3 粒状材质 Granular material
    • 2.2 表面模型 Surface models
      • 2.2.1 半透明材质 Translucent material (BSSRDF)
      • 2.2.2 布料材质 Cloth
      • 2.2.3 细节模型 Detailed material (non-statistical BRDF)
    • 2.3 程序化生成材质 Procedural appearance

1 高级光线传播 Advanced Light Transport

  • 什么叫有偏和无偏?
    我们做光线追踪很多时候都是在用蒙特卡洛的估计方法
    蒙特卡洛的估计方法存在一些性质
  • 如果估计出来的结果的期望永远是对的,那么我们就把它称为无偏的
    如果估计出来的结果的期望和积分的值不一样,那么我们就把它称为有偏的
    在有偏的情况下,如果足够多的样本时能收敛到正确值,那我们称其为一致的
    在这里插入图片描述

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

1.1.1 双向路径追踪 Bidirectional path tracing (BDPT)

  • 之前我们做路径追踪,是在用光路的可逆性,从相机开始产生路径,连接相机与光源
  • 现在双向路径追踪是什么意思?我们顾名思义,把之前的概念进行拓展
    双向路径追踪会生成两个不同的子路径,从光源会打出一些半路径,从相机也会打出一些半路径
    双向路径追踪把半路径的端点连起来,就形成了整条路径
    思想很简单,实现很困难
    在这里插入图片描述
  • 有些情况下双向路径追踪的效果好
    适用于光的传输在光的一侧是复杂的情况,在光的这一侧来算比较好的时候,如下图大灯打墙
    双向路径追踪难以实施且相当慢
    在这里插入图片描述

1.1.2 Metropolis光线传播 Metropolis light transport (MLT)

  • Metropolis光线传播的思想是什么呢?
    它利用了马尔科夫链做蒙特卡洛估计
    (简单理解马尔科夫链:当前有一个样本,马尔科夫链可以生成一个和这个样本靠近的下一个样本,这就与之前的均匀采样什么的就不一样了)
  • 用马尔科夫链的蒙特卡洛估计方法有什么好处?
    它可以做到给定足够的时间,能生成一系列以任意函数的形状为pdf的样本
  • 之前我们说蒙特卡洛方法可以用任意的pdf来采样,但我们没有说用什么pdf是最合适的
    现在我们可以说了,当 采样的pdf 与 要积分的那个函数 形状基本一致的时候,这时候是效果最好的
  • 也就是任意未知的函数,我们都可以通过马尔科夫链的方法得到一系列的样本,使得这些样本的分布,和被积函数的形状一致
  • 反应在路径上,这是一个局部的方法,我们有了一条路径的情况下,可以产生和它相似的周围的路径
  • 如下图蓝色的光路是已经找到了,我们扰动后可以生成橙色的光路
    在这里插入图片描述
  • 这个方法在很多情况下效果不错
    它特别适合做复杂的,困难的光路的传播(以一条光路为种子,在周围就能不断找到更多)
    如半掩的门以及水中的Caustics(SDS路径,specular→diffuse→specular)
    在这里插入图片描述
  • 但是这方法也会有坏处
    很难在理论上分析最后会收敛的速度(不知道要渲染多久)
    所有操作都是局部的,所以有些像素收敛的快,有些收敛的慢,所以正常看上去图片比较脏
    无法确认渲染时间问题,所以也就无法用来渲染动画
    在这里插入图片描述

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

1.2.1 光子映射 Photon mapping

  • 作为有偏估计的光子映射,特别适合渲染Caustics,以及 Specular-Diffuse-Specular (SDS) 的传播
    在这里插入图片描述
  • 下面提一种光子映射的实现方法
    光子映射第一步是从光源出发,我们知道光源无时无刻不在往外辐射光线(打出光子),碰到物体该反射反射,该折射折射
    直到光子打到diffuse的物体上就会停下来
    然后第二步从摄像机开始,打各种路径,该反射反射,该折射折射,直到打到diffuse的物体上
    在这里插入图片描述
  • 然后我们现在就可以把这两步合起来做一个计算
    一开始我们打了很多光子在diffuse的表面上,从摄像机出发也打了很多路径在diffuse的表面上,那么哪些地方应该亮,哪些地方应该暗呢?
    也就是光子密度越大的地方越亮,密度越低的地方越暗
    我们需要计算局部的密度估计
    也就是对于任何一个着色点,我们取最近的N个光子(经典算法,通过树状结构实现算法,快速得到)
    然后算N个光子占的据着色点周围的面积,然后算光子的密度
    在这里插入图片描述
  • 我们会遇到这个问题,N取多少
    N少:噪声大
    N多:会模糊
    为什么会这样呢?这也是光子映射有偏的原因
    我们在做密度估计的时候
    我们想算的密度是当前一个面积dA它的周围有多少光子
    但是在做的时候,我们是找光子数,算实际的面积
    挺接近但是不是一回事,是不对的估计
    只有覆盖面积足够小才能足够接近
    解决方法也就是对于同一个N来说,我们打出非常多的光子总数,对应的△A就会变小,接近dA
    这就是说,光子映射是有偏但是一致的方法,要光子总数无限多才能够正确,多少有点糊
    在这里插入图片描述
  • 回头看有偏和无偏
    只要有一点模糊就是有偏的
    一致性==对于无限多个样本不模糊
    我们为什么不取着色点周围的面积然后数里面的光子呢?理论上可以,但是自己规定范围,这么做永远是有偏且不一致的
    在这里插入图片描述

1.2.2 顶点连接和合并 Vertex connection and merging (VCM)

在上面的部分结束后,顺理成章我们就能提到VCM
推导理论很复杂,但是思想很简单
它把双向路径追踪和光子映射结合起来
在双向路径追踪连接端点的基础上,我们不浪费端点非常接近的时候
比如, x 2 x_2 x2 x 2 ∗ x^{*}_{2} x2 在同一个面上,但是没有重合,按照BDPT,这种就是浪费
这时候我们认为其中一半过来就不是光路了,而是光子了,用光子映射的方法把这两段半路径的贡献结合起来
很多电影以及实践是用这种方法来做的
在这里插入图片描述

1.3 实时辐射度 Instant Radiosity (VPL / many light methods)

  • 实时辐射度——很多光源的方法
    已经被照亮的表面就被认为是光源
    模拟从光源发出光线,光线打到停住的地方相当于二级光源,如果此时采样某个着色点的颜色,那么遍历这些二级光源,叠加计算即可
    也就是假设光线每个子路径的终点是一个虚拟点光源(VPL),然后像往常一样使用这些VPL渲染场景
    在这里插入图片描述
  • 优点:速度快,通常在漫反射场景下效果良好
    缺点:当VPL接近着色点时,会出现峰值;无法处理光泽材质
    在这里插入图片描述
    工业界用的还是Path Tracing,不高端,但可靠

2 高级外观建模 Advanced Appearance Modeling

2.1 非表面模型 Non-surface models

2.1.1 散射介质 Participating media

  • 散射介质是类似雾或者云等定义在空间中的介质
    假设目前有一根光线穿进了散射介质
    先不考虑发光项,散射介质中的颗粒可以把光线(部分)吸收和散射到各个方向上去,同时传播的过程中也会接受到其他方向散射过来的光
  • 也就是光线传播过程中会发生两件事
    一是被吸收,二是被散射
    在这里插入图片描述
  • 怎么散射?由相位函数(Phase Function)定义
    很像BRDF
    在这里插入图片描述
  • 怎么渲染?
    随机选择一个方向反弹
    随机选择一段距离直走,走多远由介质的吸收能力决定
    在每个“着色点”,连接到灯光,计算路径的贡献
    我们只是阐述思想,不说怎么做
    在这里插入图片描述
  • 应用很广
    在这里插入图片描述

2.1.2 头发 毛发 Hair / fur / fiber (BCSDF)

2.1.2.1 头发 Hair
  • 对于头发也是非表面材质,因为它是一根一根的
    我们要考虑光线如何和一根头发作用
    下图中我们可以看见两种高光,一种是无色的高光,一种是有色的高光是怎么形成的呢?
    在这里插入图片描述
  • 我们分析一下这个问题
    从有人研究头发开始,大家都会采用一个简单的模型 Kajiya-Kay Model
    光线打到头发上会散射出一个圆锥来,同时也会被散射到四面八方去
    在这里插入图片描述
    效果不怎么好
    在这里插入图片描述
  • 于是有人提出新的模型,并得到广泛运用,就是Marschner Model
    这个模型考虑了光线打到头发的圆柱时,会被反射,以及穿进去折射后反射再折射出来,以及折射进入后折射出来
    也就是R,TRT,TT (R: reflection, T: transmission)
    在这里插入图片描述
  • 把头发看作玻璃撞的圆柱,内部有色素,会吸收能量
    把头发结构分为两层,角质层和皮质层
    一部分直接反射(R)
    一部分穿进头发,再穿出(TT)
    一部分穿进,内部反射,再穿出(TRT)
    是单次散射,效果不错
    在这里插入图片描述
    光线和多根头发作用会发生多次散射,进去出来反复,渲染困难,计算量大
    应用广泛
    在这里插入图片描述
2.1.2.2 毛发 Fur
  • 对于动物毛发却不能直接用人的头发模型
    在这里插入图片描述
    从生物上的结构,头发分为角质,皮质以及髓质
    人和动物的髓质差别很大,动物的髓质很大,类似散射介质,光线进去更容易发生散射,髓质是很有必要纳入计算的
    在这里插入图片描述
  • 双层圆柱模型考虑了髓质的影响
    在这里插入图片描述
    TTs,TRTs:经过髓质,被散射过的光
    在这里插入图片描述
    我们用五个分量来表示头发
    在这里插入图片描述
  • 应用:
    [War for the Planet of the Apes. 2017 movie] (2018 Oscar Nominee for Best Visual Effects)
    [The Lion King (HD). 2017 movie] (2019 Oscar Nominee for Best Visual Effects)

2.1.3 粒状材质 Granular material

粒状材质目前还没有很好的渲染优化,耗时很长
在这里插入图片描述
在这里插入图片描述

2.2 表面模型 Surface models

2.2.1 半透明材质 Translucent material (BSSRDF)

  • 玉石是半透明(Translucent)材质的典型代表
    Translucent: 不仅仅是半透明,光线在内部还会有折射,比如玉石,水母
    在这里插入图片描述
  • 反应在物理上,这种半透明材质说明了次表面散射的问题
    光线从一个点进入了表面,在内部发生了大量的散射,然后从一个点出来
    比如牛奶,人耳
    在这里插入图片描述
  • 次表面散射可以看成对BRDF概念的延伸
    BRDF的所有作用都发生在一个点上
    BSSRDF的作用,由一个方向进来,但是可以从其他方向出去, 进来和出去的点不一定一样
    相应的渲染方程也要修改,对表面其他地方进入的光线也要考虑,因为也有可能贡献到当前着色点上
    在这里插入图片描述
  • 我们也可以用两个光源模拟次表面散射,Dipole方法
    在这里插入图片描述
  • 一些效果图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.2.2 布料材质 Cloth

  • 布:A collection of twisted fibers 由纤维缠绕而成
    每一根 股(Ply) 是由 纤维(Fibers)缠绕而成
    每一根 线(Yam)是由 股 (Ply) 缠绕而成
    然后由线编织成布
    在这里插入图片描述
  • 我们当成表面渲染
    根据不同的织法,给不同的BRDF
    在这里插入图片描述
    但是布料并不仅仅是表面,天鹅绒那样的效果无法展现
    在这里插入图片描述
  • 我们把织物认为是空间中分布的体积
    空间中分布的体积→空间中细小的格子,对每个格子里布料的性质进行采样,转化成对光线的吸收和散射的渲染 (像对云的渲染那样)
    计算量很恐怖
    在这里插入图片描述
  • 当成真正的纤维,计算量更加大
    在这里插入图片描述

2.2.3 细节模型 Detailed material (non-statistical BRDF)

  • 现在的渲染结果过于完美光滑,但是不真实
    在这里插入图片描述
  • 真实情况下,有很多复杂,不完美的东西
    在这里插入图片描述
  • 我们回忆一下微表面模型
    微表面模型中最重要的是它的法线分布,但是我们描述这个分布基本上用的都是很简单的模型,比如正态分布之类的,但是真实的分布要更复杂
    在这里插入图片描述
  • 我们需要的是法线分布基本符合统计规律,但是还要有自己的细节
    在这里插入图片描述
  • 我们当然可以定义出很多细节,但是渲染出来非常困难
    在这里插入图片描述
  • 微表面的镜面反射在法线分布复杂的情况下,很难建立有效的的光线通路(光源→表面→摄像机)
    在这里插入图片描述
  • 我们为了解决渲染难的问题,让一个像素对应一块表面,把整块范围内的法线分布整合起来获得(P-NDF),以此简化计算
    在这里插入图片描述
  • 小范围的P-NDF会有很多奇妙的样子
    在这里插入图片描述
    在这里插入图片描述
  • 海面波纹也可以当做微表面
    在这里插入图片描述
  • 微表面上也会体现波动性
    之前所有的计算都把光线当作粒子来计算,但光具有波粒二象性,有很多只有在把光当作波的时候才会有的性质就会被忽略,并且在尺度很小的情况下,波动性会起作用,发生干涉衍射
    在这里插入图片描述
    波动光学,不提,太复杂
    以下图几何与波动光学的BRDF进行区分
    波动光学的BRDF结果与几何光学类似,但不连续(干涉导致)
    在这里插入图片描述

在这里插入图片描述

2.3 程序化生成材质 Procedural appearance

用一定方式指导材质的生成,而不是真正生成它,并且可以动态查询它
我们存储三维的纹理之类的会耗费很多存储量,所以我们不存,去查
类似于有空间中的函数
这也就是三维空间的噪声函数
在这里插入图片描述
比如车锈的噪声
在这里插入图片描述
程序化生成材质的噪声函数,被大量用在大规模地形,水面,木头纹理之类的
Houdini: 工业界上程序化生成材质,生成完拿去用
在这里插入图片描述

最后

以上就是鲜艳电源为你收集整理的GAMES101课程学习笔记—Lec 18:Advanced Topics in Rendering1 高级光线传播 Advanced Light Transport2 高级外观建模 Advanced Appearance Modeling的全部内容,希望文章能够帮你解决GAMES101课程学习笔记—Lec 18:Advanced Topics in Rendering1 高级光线传播 Advanced Light Transport2 高级外观建模 Advanced Appearance Modeling所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部