Lecture 18 Advanced Topics in Rendering

一、Advanced Light Transport

  • Unbiased light transport methods

    ​ --Bidirectional path tracing (BDPT)

    ​ --Metropolis light transport (MLT)

  • Biased light transport methods

    ​ --Photon mapping

    ​ --Vertex connection and merging (VCM)

  • Instant radiosity (VPL / many light methods)

Biased vs. Unbiased Monte Carlo Estimators

  • An unbiased Monte Carlo technique does not have any systematic error

    ​ --The expected value of an unbiased estimator will always be the correct value, no matter how many samples are used

  • Otherwise, biased

    ​ --One special case, the expected value converges to the correct value as infinite #samples are used — consistent

  • We’ll look again at this page after introducing Photon Mapping

无偏(Unbiased):蒙特卡洛积分估计出来的结果的期望(无论用多少样本)永远都是我们要的真实值(期望永远是对的)

有偏(Biased):所有其他情况都是有偏。估计出来的期望和实际的值不一样。

虽然取多少样本,得到的结果都是有偏的,但是,在一个极限的定义下,用的样本数足够多,期望值会收敛到正确值。这时候我们称这个值是一致(consistent)。

1、Bidirectional Path Tracing (BDPT)

  • Recall: a path connects the camera and the light

  • BDPT

    ​ --Traces sub-paths from both the camera and the light

    ​ --Connects the end points from both sub-paths

双向路径追踪(无偏):生成两个不同的半路径(子路径),一个是从光源出发的半路径,另一个是从摄像机出发的半路径,把两条半路径的端点连起来(如上图虚线部分)。

  • Suitable if the light transport is complex on the light’s side
  • Difficult to implement & quite slow

双向路径追踪实现起来非常复杂,但是在一些情况下渲染出来的结果很好。如上图场景。这个场景里光源仅仅往一个角落里打,那么实际上整个场景几乎都是被间接光所照亮的,再加上整个场景几乎都是漫反射材质,光线打上去会往各个方向弹,那么如果这时候用路径追踪,就不容易弹到光源处。那么这时候用路径追踪就很难照亮整个场景。这时候用双向路径追踪,在光源处发出一些光线打到场景中,再从相机发出一些光线打到场景中,把他们端点连起来,就会得到一些很合理的路径。(但是BDPT算起来比较慢)

(BDPT实现起来非常不容易!如果能把这个写对,自己开发渲染器应该没有任何问题!)

2、Metropolis Light Transport (MLT)

  • A Markov Chain Monte Carlo (MCMC) application

    ​ --Jumping from the current sample to the next with some PDF

  • Very good at locally exploring difficult light paths

  • Key idea

    ​ --Locally perturb an existing path to get a new path

MLT(无偏)用统计学上一个采样的工具:马尔科夫链。马尔科夫链可以根据一个样本生成靠近它的另一个样本。他可以以任意函数的形状为PDF生成样本,使得这一系列样本的分布与被积函数形状一致。

那么将其反应在产生路径上,在给定一个路径的情况下,可以在周围产生很多与其相似的路径(一个局部的方法)。如上图中,已经生成一条蓝色的光路,对其进行一些微小的扰动,就形成了一条新的红色路径

  • Works great with difficult light paths
  • Also unbiased

MLT特别适合做光路传播复杂的计算。因为只需要找出一条光线的路径,就可以以其为种子,生成更多路径。如上图,左侧图的光线仅仅从门缝出来,照亮整个场景,光路复杂;右侧图是水波,光线在水中的传播,会产生焦散现象,光线聚集,光路也极其复杂。

  • Difficult to estimate the convergence rate
  • Does not guarantee equal convergence rate per pixel
  • So, usually produces “dirty” results
  • Therefore, usually not used to render animations

但是其也有坏处。

MLT方法很难在理论上分析其最后收敛的速度(什么时候变成没有噪声的),而且由于所有操作都是局部的,也就是说每个像素自己做自己的,那么最后有一些像素收敛的快,有一些像素收敛的慢,得到的渲染图看上去就会比较脏(如上图)。那么用这种方法渲染动画就不可以。

3、Photon Mapping

  • A biased approach & A two-stage method
  • Very good at handling Specular-Diffuse-Specular (SDS) paths and generating caustics

光子映射(有偏)

特别适合用来渲染caustics(焦散)(如上图)

  • Stage 1 — photon tracing

    ​ --Emitting photons from the light source, bouncing them around, then recording photons on diffuse surfaces

第一步,光子(光线)从光源出发,在空间中碰到物体该反射还是反射,该折射还是折射,直到碰到diffuse(漫反射)物体,就停下来。当这一步做完后,就可以把所有光子整理起来,就知道了各个光子在哪里。

  • Stage 2 — photon collection (final gathering)

    ​ --Shoot sub-paths from the camera, bouncing them around, until they hit diffuse surfaces

第二步,光子(光线)从摄像机出发,与第一步一样,在空间中碰到物体该反射还是反射,该折射还是折射,直到碰到diffuse(漫反射)物体,就停下来。当这一步做完后,也可以把所有光子整理起来。

  • Calculation — local density estimation

    ​ --Idea: areas with more photons should be brighter

    ​ --For each shading point, find the nearest N photons. Take the surface area they over

把前两步合起来,就可以做一个局部的密度估计。建立在观察的角度上去看哪部分亮哪部分暗,那么光子分布越集中的地方就会越亮。

局部密度估计:对于任何一个点,取其最近的N个光子,找到后去求这N个光子所占的面的面积,那么光子的密度就是用N除以面积。那么N取多少?取小了图片噪声会很明显,取大了得到的结果会模糊。为什么会模糊?也就是为什么这种方式是有偏的?

  • Why biased?

Local Density estimation dN / dA != ΔN / ΔA

But in the sense of limit

More photons emitted ——>the same N photons covers a smaller ΔA ——> ΔA is closer to dA

So, biased but consistent!

在做密度估计时,我们想算的密度应该是当前一个点周围取一个微小的面积dA,里面有dN个光子,即 dN / dA,但是我们实际上算的密度是ΔA面积中有ΔN个光子,即 ΔN / ΔA。正常情况下两者很接近,但绝对不是相等的,所以对密度的估计是一个不对的估计,只有当dA无限小才会趋向于正确。那么何时ΔA会无限小?只有当打出的光子数无限大的时候,有更多的光子被打在面上,那么得到一个着色点周围同样数量N的光子覆盖的面积才会无限小。这时才会更接近dA。也就是当有无限多数量的光子时,才会接近正确的结果,因此是一个有偏但是一致的方法,所以会糊。

  • An easier understanding bias in rendering

    ​ --Biased == blurry

    ​ --Consistent == not blurry with infinite #samples

那么由此我们可以得出一种判断有偏和一致的方法:和正确的结果相比,如果得到的结果有任何一点的模糊,那就是有偏的;

如果虽然是模糊的,但是只要样本足够多,最后就会收敛到不模糊的结果,那么就是一致的。

4、Vertex Connection and Merging(VCM)

  • A combination of BDPT and Photon Mapping

  • Key idea

    ​ --Let’s not waste the sub-paths in BDPT if their end points cannot be connected but can be merged

    ​ --Use photon mapping to handle the merging of nearby “photons”

VCM的思想是把双向路径追踪与光子映射结合起来。在做BDPT时,双向发出来的认为是光子,如果两个光子相邻很近(如上图,在一个局部的面里),那么这时候就用光子映射,将这两部分的sub-path结合在一块儿,从而得到了更好的结果。

5、Instant Radiosity (IR)

  • Sometimes also called many-light approaches

  • Key idea

    ​ --Lit surfaces can be treated as light sources

  • Approach

    ​ --Shoot light sub-paths and assume the end point of each sub-path is a Virtual Point Light (VPL)

    ​ --Render the scene as usual using these VPLs

实时辐射度算法。

由于我们一般不区分光线是反射来的还是光源发出来的,都是Radiance,那么对于已经被照亮的地方,都可以认为是光源,再用他们去照亮别的东西。

首先先从光源打出很多light sub-paths,然后会停在某些地方,我认为这些地方变成了新的光源(VPL) 。再看向这个场景的时候用这些VPL去照亮着色点。

  • Pros: fast and usually gives good results on diffuse scenes

  • Cons

    ​ --Spikes will emerge when VPLs are close to shading points

    ​ --Cannot handle glossy materials

如上图,左图可以看出IR的思想,是用“一堆光源”再去照亮整个场景。

右图是IR存在的问题,有一些地方莫名其妙会发光。(在前面我们提到把对立体角的采样改成对面积的采样的地方,这里与距离平方项有关系,当两点间距离极近,那么除以了一个极接近0的数,得到的结果就非常大,就出现了问题)

而且这种方法无法做glossy材质。

二、Advanced Appearance Modeling

  • Non-surface models

    ​ --Participating media

    ​ --Hair / fur / fiber (BCSDF)

    ​ --Granular material

  • Surface models

    ​ --Translucent material (BSSRDF)

    ​ --Cloth

    ​ --Detailed material (non-statistical BRDF)

  • Procedural appearance

(一)、Non-Surface Models

1、Participating Media(Fog、Cloud)

At any point as light travels through a participating medium, it can be (partially) absorbed and scattered

对于云、雾这种材质,当光线穿进去以后,会打到很多小的冰晶,这些结晶会把光线散射到各个方向去同样传播过程中也会接收到各个方向来的光。有些光在传播过程中就被慢慢吸收了。

Use Phase Function to describe the angular distribution of light scattering at any point x within participating media

那么光线如何散射?通过一个相位函数。相位函数决定了光是均匀散射还是向前或向后散射

Participating Media: Rendering

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

首先考虑光能走多远,然后停下来。当停下来以后,考虑把光线往哪个方向散射。整个过程中会有各个方向的散射。

2、Hair Appearance

在渲染头发时,我们考虑的就不是光与面的作用了,而是光和曲线如何作用。如上图,对于头发来说,会有高光,一种是无色的(白色)高光,另一种是有色的高光。

Kajiya-Kay Model

这是一种简单的模型,光线打到圆柱上往四面八方反射,我们考虑会散射出一个圆锥。

这种方式渲染出来的头发显然不是很好。

Marschner Model

于是又有了这种模拟真实头发与光作用的模型,当光线打到圆柱时,一部分光被直接反射(R),另一部分会穿到头发里去(T)发生折射然后再穿出来(T)(穿进去穿出来总称为TT),还有一部分穿进去在下表面发生了一次内部反射然后再从上表面穿出来(TRT)。通过这种方式可以定义不同的光线传播

  • ①、Glass-like cylinder

将头发当成玻璃圆柱,分为内外两层结构,内部有色素

  • ②、3 types of light interactions: R, TT, TRT (R: reflection, T: transmission)

考虑三种光线与圆柱的作用

综合考虑这两种情况,就可以得到很好的渲染结果

3、Fur Appearance

Cannot represent diffusive and saturated appearanceCannot represent diffusive and saturated appearance

如果用人的毛发渲染方式去渲染动物的毛发,渲染结果显然不对。

Human Hair vs Animal Fur

人的毛发和动物毛发区别最大的是最中间的髓质,动物毛发的髓质非常大,在内部更容易发生散射。因此无论是人还是动物的毛发,模拟髓质的散射是有必要的,之前玻璃柱模型忽略髓质是不对的。

Importance of Medulla

可以看到,当给人的头发加上髓质的模拟渲染后,效果会更进一步。

Double Cylinder Model

所以就有了双层圆柱模型

一部分光跟以前的一样,还有一部分在穿过髓质的过程中被发散到各个方向去,还有可能再被反射回去…

引入五种不同描述光线传播的方法,得到的结果如上图所示。

4、Granular Material

What is granular material?

一堆小东西形成的一个表面模型(糖、盐、沙子…)(颗粒材质)

Can we avoid explicit modeling of all granules?

–Yes with procedural definition.

比如这个沙子堆成的城堡,认为每一个单元有好多不同的石子以不同的成分比例构成,再渲染。

(二)、Surface Models

1、Subsurface Scattering(Translucent Material)

光线可以从某一个地方进这个表面,再从某一个地方出去(玉石)

Visual characteristics of many surfaces caused by light exiting at different points than it enters

  • Violates a fundamental assumption of the BRDF

次表面散射:反应在物理上即为光从一个点进入物体,在物体内部经过多次散射后穿出。可以是BRDF概念上的一个延伸。

  • BSSRDF: generalization of BRDF; exitant radiance at one point due to incident differential irradiance at another point:

描述从一个点xi以一个方向ωi进来,再从另一个点xo以另一个方向出去ωo

  • Generalization of rendering equation: integrating over all points on the surface and all directions (!)

相应的渲染方程也要改变,既要对方向积分,也要对面积积分。

Dipole Approximation [Jensen et al. 2001]

  • Approximate light diffusion by introducing two point sources.

人们发现半透明介质(次表面散射)当有一个光打到物体上,就好像是物体底下出现了一个光源,然后会从底下照亮着色点周围一片,但是为了物理上的真实,仅从底下有一个光源照亮还不够,对应上方也要有一个光源。用这两个光源去照亮周围着色点这一块儿,就很像次表面散射得出来的结果。

BRDF vs BSSRDF

2、Cloth
  • A collection of twisted fibers!
  • Two levels of twist

  • Woven or knitted

布料是一系列缠绕的纤维构成的,不同纤维通过第一次缠绕会形成股,不同股缠绕会形成线,线可以织成布。

Cloth: Render as Surface

  • Given the weaving pattern, calculate the overall behavior
  • Render using a BRDF

布料与织布时的编织图案有关(叠压方式),根据不同的编织图案结合BRDF就可以得出不同的渲染样子。

Render as Surface — Limitation

但是BRDF是针对平面材质的,对于天鹅绒这种材质,实际上是分布在空间中的体积,因此就无法用BRDF渲染。

Cloth: Render as Participating Media

  • Properties of individual fibers & their distribution -> scattering parameters
  • Render as a participating medium

因此另一种方式就是把空间分成非常小的格子,每个格子我们知道内部纤维朝向分布和复杂程度,将这些性质转化为光的吸收和散射,就好像是在渲染云雾等一样,把布料当成体积。

Cloth: Render as Actual Fibers

  • Render every fiber explicitly!

还有一种方式就是用最暴力的做法,把每一根纤维都渲染出来。

3、Detailed Appearance: Motivation

Not looking realistic, why?

由于上面两幅图太过完美,所以看上去反而不真实。

Real world is more complicated

真实的物体往往都是有不同的划痕,是不完美的。

Recap: Microfacet BRDF

Surface = Specular microfacets + statistical normals

在渲染中,最重要的就是微表面的法线分布。

Statistical NDF vs. Actual NDF

但是我们平常在描述法线分布时用的都是一些很简单的数学模型,如正态分布(上左图),这样的描述方式并没有很多的细节。

但其实我们想要的是,法线分布基本满足数学模型的规律但是要有自己的细节(如上右图)。

Define details

可以用一张很大的法线贴图,来表现细节

Rendering? Too difficult!

但是这种渲染方式太慢了!

Difficult path sampling problem

由于微表面放大后是一个个小的镜面,从摄像机发出来的光线经过镜面以后很难打到光源上去,从光源打过来的也一样,很难反射到摄像机。

Solution: BRDF over a pixel

所以这里可以考虑一个像素会覆盖很多微表面,把一个小的范围之内的微表面的法线分布算出来,这样就可以替代原来光滑的分布,用在微表面模型里。

p-NDFs have sharp features

不同范围会产生不同的效果

p-NDF shapes

不同的法线贴图也会产生不同的效果

Recent Trend: Wave Optics

但是,当引入这些细节以后,再用几何光学解释就不对了,当物体小到与光线波长相当的时候,就不能假设光沿直线传播了,要考虑光是波,考虑衍射干涉现象。

由于波动光学,实际看到的效果是彩色的

Detailed Material under Wave Optics

考虑用波动光学算出BRDF。波动光学和几何光学得到的BRDF是差不多的,但是波动光学得到的BRDF又有不连续的特点(光的干涉会使有的地方加强有的地方减弱,产生一条条的样子)

4、Procedural Appearance
  • Can we define details without textures?

–Yes! Compute a noise function on the fly.

–3D noise -> internal structure if cut or broken

–Thresholding (noise -> binary noise)

用一些三维空间中的噪声函数。给空间中任何一个x,y,z,可以返回一个值,随用随取。

Complex noise functions can be very powerful

利用强大的噪声函数可以创造出很多东西,如程序化生成的山和波浪。

GAMES101-现代计算机图形学入门-闫令琪——Lecture 18 Advanced Topics in Rendering 学习笔记相关推荐

  1. GAMES101-现代计算机图形学入门-闫令琪——Lecture 05 Rasterization 1 (Triangles)

    GAMES101-现代计算机图形学入门-闫令琪--Lecture 05 Rasterization 1 (Triangles) 目录 GAMES101-现代计算机图形学入门-闫令琪--Lecture ...

  2. GAMES101-现代计算机图形学入门-闫令琪——Lecture 19 Cameras and Lenses 学习笔记

    Lecture 19 Cameras and Lenses 一.Camera 1.Pinhole Image Formation 最早的相机是从小孔成像开始的. 2.Important Parts ( ...

  3. 现代计算机图形学入门-闫令琪 17课基本材质

    日出效果:尘埃分解光线画面.水柱之间有透明渐变和表面起伏反射.洞穴中间的聚光线发生的反射.飘起的头发发生的反射.布料材质反射的光线不同.蝴蝶的鳞片起伏反射.光晕的效果是中间灰两边亮.鱼片的表面的次反射 ...

  4. GAMES101-现代计算机图形学入门-闫令琪 - lecture15 光线追踪3 - 辐射度量学、渲染方程(Ray Tracing 3) - 课后笔记

    光线追踪3 - 辐射度量学.渲染方程和全局光照 内容: 辐射度量学 光线传输(Light transport) 反射方程(The reflection equation) 渲染方程(The rende ...

  5. GAMES101-现代计算机图形学入门-闫令琪 - lecture13 光线追踪1(Ray Tracing 1 - Whitted-Style Ray Tracing) - 课后笔记

    光线追踪1 (Ray Tracing 1 - Whitted-Style Ray Tracing) 课程一共分为四个大的板块,目前已经学习了光栅化和几何,可以实现图1和2的效果,下面要来学习第三个大的 ...

  6. GAMES101-现代计算机图形学入门-闫令琪 - lecture9 着色3(Shading 3) - 课后笔记

    着色3(Shading 3) 重心坐标 纹理查询 纹理应用 插值 - 重心坐标 (Barycentric Coordinates) 为什么要插值? 能够获得三角形三个固定顶点的属性,但是不知道三角形内 ...

  7. GAMES101-现代计算机图形学入门-闫令琪 - lecture14 光线追踪2 - 加速结构(Ray Tracing 2 - Acceleration) - 课后笔记

    光线追踪2 - 加速结构(Ray Tracing 2 - Acceleration) 对AABB结构优化来加速光线追踪的速度 均匀网格(Uniform grids) 空间划分(Spatial part ...

  8. 一篇学完:GAMES101:现代计算机图形学入门 学习笔记

    文章首发于lengyueling.cn 欢迎访问交流! PDF版本已经附在lengyueling.cn文章末尾,需要自取. 导论 图形学应用场景 电子游戏: PBR:之狼 卡通渲染:无主之地 电影:黑 ...

  9. GAMES101现代计算机图形学入门-第一节-图形学导论

    最近在为之后找工作面试做准备,所以把大二学习的计算机图形学又拿出来重新学起来了,也推荐大家一起看闫大神的课!!! 然后笔记是在lengyueling大佬的版本上进行的修改,总体还是大佬的模板. 希望大 ...

  10. GAMES101现代计算机图形学入门——几何表示之曲线与曲面

    此为个人学习笔记,总结内容来源于网络各个平台,如有错误欢迎指摘 几何表示 曲线与曲面 本节附加资料: Making things with Maths (acko.net) 游戏开发技术杂谈2:理解插 ...

最新文章

  1. Nginx解决PATH_INFO新解决办法
  2. linux中终端字符界面打印QQ,教你如何在开发驱动时在图形界面下的终端打印字符!!...
  3. 对齐方式有那些_字节对齐不慎引发的挂死问题
  4. 1.18.2.9.查询优化、Blink planner、解释表
  5. 方案计数(带修计数题/线段树)
  6. TensorFlow 深入MNIST
  7. MySQL索引分类入门
  8. 百度开源超级链技术方案!
  9. 【梦幻西游】12门派版一键端
  10. uni-app h5 分享好友与朋友圈等功能
  11. Python乌龟吃鱼小游戏
  12. 如何在 Titanic Kaggle Challenge 中获得0.8134分
  13. 便携电源快充方案 30W自动升降压PD快充
  14. 旋转卡壳简介(POJ2187)(洛谷P1452)
  15. 计算机水平一般良好怎么填,计算机水平一般怎么填
  16. 微信小程序——自定义组件
  17. u盘插入linux系统没有反应_Linux系统下无法自动识别U盘的处理方法
  18. 搜狗翻译加密原理分析
  19. 计算机音乐数字乐谱童话,童话钢琴简谱-数字双手-光良
  20. mybatis-mysql操作存储过程

热门文章

  1. php网站微博帐号登录代码,微博登录按钮
  2. 淘宝用户行为数据分析
  3. Image Tampering Detection via Semantic Segmentation Network
  4. word排版技巧:如何撤销删除自动编号
  5. PC端自适应使用rem
  6. 单片机——DHT11 温湿度传感器
  7. CentOS的虚拟机网卡eth0变成eth1
  8. 社招/实习/春招 | 字节跳动 | 抖音-隐私合规团队 | 北京/杭州 【岗位急招,部门直推,hc多多,欢迎投递~~~】
  9. ps修改画笔大小两种快捷键方式
  10. “Warning: Potential Security Risk Ahead“解决方案