【图形学】GAMES101-现代计算机图形学入门笔记
聪头 游戏开发萌新

GAMES101-现代计算机图形学入门

学习时间:2022年2月5日19:46:58

作者:聪头

课程URL:https://www.bilibili.com/video/BV1X7411F744

课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html(含课件)

拓展URL:

学习思路:

  1. 为什么?(Why)
  2. 是什么?(What)
  3. 怎么做?(How)

必须课程:线性代数、微积分、数据结构

扩展课程:信号与系统、概率论与数理统计、数值分析(龙格库塔)

Ch1.概述 P1

图形学应用:游戏、电影、动画、设计、可视化、VR/AR、数字绘图、模拟、GUI(Graphical User Interfaces)、字体(Typography)

教学内容:光栅化、曲线和网格、光线追踪、动画/模拟

CV vs. CG

https://www.bilibili.com/video/BV1X7411F744?t=2411.7

image

推荐书籍

image

Ch2.变换

2.1 线性代数 P2

向量

向量、单位向量、加法:7m50s

向量点乘:16m35m

  • 两个向量点乘是一个数
  • 两个向量是单位向量,点乘结果为cos
  • 作用:找到两个向量的夹角;找到一个向量投影到另一个向量上的向量
image image

向量叉乘:30m25s(默认右手定则)

  • 满足负交换律
  • 作用:判定左/右;判定内/外
image image

叉积应用

  • 判定内外:AP x AB、BC x BP、CA x CP(结果符号一致就在内部,否则在外部)
image

矩阵 45:00

矩阵及其乘法:45m

特殊矩阵:51m35s

  • 转置矩阵、单位矩阵、逆矩阵

矩阵和向量转化,即向量乘积可以写成矩阵形式

image

2.2 变换1 P3

二维变换

2维旋转矩阵及其推导:16m15s

image

线性变换:24m30s

image

齐次坐标:26m

image image

仿射变换

  • 特点:最后一行为0..01,可压缩
image

2D变换矩阵:41m35s

image

逆变换:44m15s

复合变换:45m30s

三维变换 58:00

三维变换:58m

2.3 变换2 P4

本节内容:3D变换、观测变换(包括视图、投影变换)

三维旋转 9:30

image image

观测变换 22:30

image image

投影变换 39:00

正交投影

image image

透视投影 51:30

image

y轴挤压

image

x同理

image

目前已知:除了z变换关系,其他均已知

image image

求z`。根据近平面的点映射前后,z不变

image

求z`。根据远平面中心点映射前后坐标不变

image image

至此,挤压部分的变换矩阵就求完了,剩下就是乘上正交矩阵即可

摘自LearnOpenGL_CN

image

Ch3.光栅化

3.1 三角形 P5

投影补充 6:45

image

规范立方体到屏幕 14:45

视口变换

image

绘制机器 25:45

不同光栅化设备 26:35

CRT、LCD、LED

光栅化过程 39:30

为什么使用三角形?

  • 最基本的多边形
    • 可以拆解任意多边形
  • 独有属性
    • 共面
    • 内外定义明确
    • 容易插值

采样

函数离散化过程。即给定离散x,得到y

采样实现光栅化 43:55

image image

如何判断像素是否在三角形内 49m45s

在每条边(顺时针或逆时针方向)上利用叉积,看结果方向是否一致

image

包围盒 55m

优化:如果像素不在包围盒内,就更不可能在三角形内

image

3.2 反走样 P6

前置知识:信号系统与处理

扩展知识:数字图像处理(滤波小节提到)

英文:Anti Aliasing

  • Artifacts:瑕疵,图形学中表示一切不希望看到的结果或不太对的东西

采样产生的问题:锯齿、摩尔纹、车轮效应

image

产生原因:信号变化太快,但是采样跟不上

image

解决办法

对原始函数或信号模糊(滤波)再采样,缓解锯齿问题

  • 反走样不可先采样再模糊
image

频域 17:25

英文:Frequency Domain

傅里叶级数展开:任何一个周期函数,都可以写成一系列正弦和余弦函数的线性组合,以及一个常数项

image

傅里叶变换:给定任何一个函数,可以通过傅里叶变换,成为另一个函数

image image

低频信号:充分采样,合理重构

高频信号采样不足:重构信号不正确,似乎来自于低频信号

走样 27:40

走样:同样的采样方法,采样两种不同频率的函数,得出的结果无法区分(一致),就称为“走样”

  • 下图中用蓝色和黑色去拟合近似黑色的曲线,会发现采样的结果一致
image

高频信号采样不足:采样错误地显示为来自低频信号

在一个给定的采样中无法区分的两个频率被称为“走样”

滤波 29:30

英文:Filtering

白话解释:把某个特定的频段删掉(去掉特定频率)

傅里叶变换作用:把一个函数从时域变换到频域

  • 下图展示了从图像空间变换到频率空间
  • 频率空间:中心低频、周围高频
    • 频率空间表达的就是图像之间颜色变化的信息,白色代表有信息,黑色代表无信息。之所以被分为四个象限,主要是因为傅里叶变换是针对周期函数,图像是非周期的,所以需要左右重复拼接,上下重复拼接形成,所以在边界处的信号有跳变,从而产生高频信号,所以看到四条白线(可忽略)
image

高通滤波:High-pass filter,高频信号可通过,所以只剩下高频。用于得到边界

image

低通滤波:Low-pass filter,只剩下低频。用于模糊。

image image image

卷积 35:55

滤波=卷积=平均

Filter = Convolution = Averaging

image

卷积定理:时域卷积 = 频域乘积(同时,时域乘积 = 频域卷积)

image

采样 51:30

Sampling = Repeating Frequency Contents

频域上就是把原始函数的频谱,复制粘贴很多

冲激函数就是采样的函数,将时域上连续函数变成离散函数

image

频谱混叠,就是走样现象

image

反走样 57:38

英文:Antialiasing

减少锯齿的办法:

  1. 增加分辨率(即提高采样率)
  2. 反走样

反走样过程

  • 使用低通滤波拿走高频信息,然后再采样
    • 低通滤波器在图像中实际就是卷积操作
image image image

卷积示例

image

在对一个三角形进行光栅化时,f(x,y)=inside(triangle,x,y)像素区域内的平均值等于该三角形所覆盖的像素区域的面积

MSAA 64:30

英文:MultiSampling Anti-Aliasing

中文:多重采样抗锯齿

通过增加采样点(而非提升分辨率)来减少锯齿

image

通过对一个像素内的多个位置进行采样并取其平均值来近似1像素Box滤波器的效果

image

imageimage

结果

image

其他抗锯齿方案

  • FXAA:Fast Approximate AA,快速近似抗锯齿
    • 本质是图像后期处理,模糊边界。开销小
  • TAA:Temporal AA,时间抗锯齿
    • 本质是复用上一帧采样的结果,即将MSAA采样的结果分布在时间上。开销小

超分辨率

  • DLSS:Deep Learning Super Sampling
    • 本质是猜测

3.3 深度测试 P7

画家算法:先画远的,再画近的

image

Z-Buffer

  • 存储当前最小深度值在深度缓存中
  • 最小深度值均为正数,近小远大
image image

算法核心思想

image

Ch4.着色 P7

4.1 着色 30:45

image

有道翻译:

  • 用平行线或一块颜色使插图或图表变暗或着色
  • 本课程:对于不同物体应用不同材质

简单光照模型 38:00

本节介绍的是:Blinn-Phong反射模型

image

方向定义

  • 方向均为单位向量不考虑阴影
image

漫反射

image image

根据球的表面积算(原因是三维空间)

image
  • kd:漫反射系数,0~1
image

高光 P8 6:10

image image

高光项的p

image

ks与p,ks控制高光亮度,p控制高光范围

image

环境光 14:45

image

最终效果 17:05

image

着色频率 P8 20:30

image

flat shading

image

Gouraud shading

image

Phong shading

image

小结

  • 当模型足够复杂,三种着色频率得出的效果差不多
image

顶点法线 29:10

逐顶点法线

  • 顶点关联的面求平均
image

逐像素法线

  • 重心插值
image

4.2 图形管线 P8 32:30

image

Shader编程 40:30

  • 每个顶点和像素都会执行一次(分别是顶点着色器像素着色器
  • 只需编写一种规则(处理一个顶点和像素),其他都适用
image

扩展 47:00

  • 推荐学习网站:ShaderToy
  • GPU:渲染管线的硬件实现,高度并行的多核处理器
  • 其他着色器
    • Geometry Shader:动态修改几何形体
    • Compute Shader:通用计算

4.3 纹理映射 P8 54:10

引入

image

UV 61:15

image
  • 无缝贴图技术:Wang Tile

重心坐标 P9 5:00

参考链接:https://zhuanlan.zhihu.com/p/58199366

作用:做三角形内的插值

image

举例

image

任意一点(了解)

image image

重心处的重心坐标

image

应用 16:30

image

重心坐标在投影前后会发生变化。这就要求我们需要在投影前的三角形内做插值,而不能在投影之后(即建议在三维空间中做插值)

纹理应用1 P9 20:50

image

对每个像素进行采样(通常就是像素中心点)

  • 通过重心坐标公式得到该点的uv值
  • 使用uv值采样得到漫反射颜色

问题:纹理过小 23:00

  • 纹理过小,屏幕上多个像素映射到同一个纹素中。需要放大纹理以匹配映射
image
  • Nearest:四舍五入

  • 双线性插值 Bilinear

    • 取周围4个像素,分别在水平和竖直插值
image
  • 双三次插值 Bicubic
    • 取周围邻近的16个进行水平和竖直的插值

问题:纹理过大 34:30

Mipmap 43:30

快速、近似、正方形的范围查询

  • 存储:4/3(公比为1/4的等比数列求和,额外开销为原图的1/3)
image

Mipmap的计算

image
  • L的计算:在屏幕空间上一个像素的微小变换dx和dy,会导致纹理空间中一个纹素的变化量(这里分别对u和v方向做微分,本质就是纹理空间移动的长度)。纹素变化量越大,说明Mipmap层级越高
  • D的计算:L每增长2倍,面积就增大4倍(1个实际像素对应4个纹素),此时Mipmap提升一级(精度下降1/4)

在Mipmap间采用Nearest,使用四舍五入求MipMap等级D

image

在Mipmap间采用Trilinear Interpolation,使用三线性插值

  • 先对两张Mipmap使用双线性插值
  • 再对这两张Mipmap做层与层间插值
image image

各向异性过滤 62:41

  • Mipmap是正方形贴图(每次缩小时长宽各缩小1/2),在特殊场合不适用
image image
  • 各向异性过滤(考虑不同方向性)
    • Ripmap
    • 箭头起始表示采样点,终点表示还原之后的采样区域(画得比较夸张)
    • 开销最终会收敛为原图的3倍(打游戏各项异性过滤等级理论上可以开到最高也没事)
  • 从屏幕的像素映射到uv像素,不总是方形,而这时使用传统的Mipmap就会产生OverBlur
image image
  • 对于斜着的区域,采用EWA filtering(质量好但开销大)
image

纹理高级应用 P10 7:00

image

环境贴图

image image image

Cubemap 14:30

  • 从圆心发射一条射线,打在立方体表面
image

凹凸贴图和法线贴图 17:15

  • 凹凸贴图:假装改变顶点位置,重新计算法线信息(运行时计算:先计算利用导数计算切线,再计算法线(二维转90度,三维用叉乘))
  • 法线贴图:直接修改法线信息(提前计算好)
image image

添加表面细节而不添加更多的三角形

  • 扰动每像素的表面法向
  • 由纹理定义的每个纹素控制高度的移动

翻译:凹凸贴图就是,改变法线的同时改变顶点位置

  • 二维空间的凹凸映射:经凹凸贴图变换后顶点的法线计算
image

这里的1表示1个单位,对应到纹理上就是一个纹素

  • 三维空间的凹凸映射
image

本质上就是在两个方向上做叉积

推导见《马同学》的多变量微积分4.8:第二类曲面积分的有向切平面小节,里面提到三维空间任意曲面的法线求法。(记得最后把dx=1和dy=1代入)

image

最后结果(-dp/du, -dp/dv, 1)

置换(位移)贴图 29:05

  • 凹凸贴图(法线贴图)边缘或投影会很假
  • 真正改变三角形顶点位置(要求:三角形数足够多,否则跟不上纹理的变化速度,从而产生走样)
    • 实际解决办法:动态曲面细分
image

3D纹理 33:40

没有纹理贴图,直接根据点的位置计算

image image

其他信息 35:30

ao贴图

image

体渲染(后面讲)

image

Ch5.几何 P10 38:30

5.1 显式和隐式几何 45:55

  • 类似隐函数和显函数
image

隐式几何

  • 不告诉顶点具体位置,只知道关系
  • 缺点:很难画出物体
  • 优点:很容易判断点是否在物体内外
image image

显式几何 51:00

  • 优点:很容易画出物体
  • 缺点:很难判断点是否在物体内外
image image

隐式几何 56:30

代数表面

image

体素构造表示

image

距离函数 61:00

image
  • 如果仅仅把A,B叠加,得到的是2/3黑,1/3白(结果好像B把A覆盖了)
  • 如果利用SDF进行A,B的叠加,得到的就是1/2黑,1/2白(结果好像A,B融合在一起,构成新物体。新物体的边界就是值为0的边)
image image

水平集

  • 距离函数的拓展
  • 值为0的地方组成边界,构成物体形体
  • 类比等高线
image

三维水平集

  • 例如三维空间的物体中同一密度值构成边界,又组成一个新物体
image image

分形 72:45

  • 递归,不断重复自身
image

小结 75:00

image

隐式表示优点:

  • 描述紧凑(连续函数)
  • 某些查询简单(物体内,到表面距离)
  • 利于光线与表面求交
  • 对于简单的形状,准确的描述/没有采样误差
  • 易于处理拓扑变换(例如液体)

隐式表示缺点:

  • 复杂形状很难建模

显式几何 P11 3:10

  • 直接定义或由参数定义

点云

image

最简单的表示:点列表(x,y,z)

很容易表示任何几何图形

适用于大型数据集(>>1点/像素)

经常转换成多边形网格

在采样不足的地区很难提取

多边形网格

image

Obj

v:顶点

vn:法线

vt:纹理坐标

f:面

image

f 5/1/1 1/2/1 4/3/1

  • 第一个点使用第5个,第1个纹理坐标,第1个法线
  • 以此类推,将三个点联系起来构成一个三角形

5.2 曲线 P11 10:45

贝塞尔曲线

曲线属于显式几何(由参数定义)

应用:摄像机路径、动画曲线(模型沿着曲线运动)

De Casteljau 算法(图像上表示,而非代数式表示)

image

解释:取t=1/3

  • 每条线段上取1/3:在b0–b1取1/3,在b1–b2取1/:
  • 二者连线再取1/3(此时点两端共线,递归结束)
image

动画演示:https://www.bilibili.com/video/BV1X7411F744?p=11&t=1260.0

实现思路(代数表示)

image image
  • 观察发现:系数遵循二项分布(下面提到的伯恩斯坦多项式)

推广到n+1个点(下标从0开始到n,称作n次贝塞尔曲线)

image
  • 举例:参考上一张截图,代入n=2去验证发现符合公式

推广到三维

image

性质

以三次贝塞尔曲线为例(4个点)

  1. 经过起始点和终点
  2. 在起点和终点的导数值斜率为3
  3. 各顶点经过仿射变换后仍是三次贝塞尔曲线(相当于对顶点变换后重新画贝塞尔曲线)
  4. 凸包性(任意贝塞尔曲线一定在所形成控制点的凸包内)
image image

逐段贝塞尔曲线

  • Piecewise Bezier Curves
  • 优势:容易控制
  • 通常是4个点分一段(三次贝塞尔曲线)
image image

连续(泰勒展开)

  • C0连续:在某点的函数值相等
  • C1连续:在某点的一阶段导数值相等(一阶导数连续)
image image

样条线 46:40

英文:Spline

image

连续曲线为了通过一组给定的点并具有一定数量的连续导数而构造的连续曲线

简而言之,这是一条可控的曲线

B样条*

贝塞尔曲线升级版,具有局部性(不会牵一“点”而动全身)

image

更多扩展内容移步:https://www.bilibili.com/video/av66548502

5.3 曲面 P11 53:15

贝塞尔曲面

image

三次贝塞尔曲面

image

第一个方向插值得到贝塞尔曲线

image

第二个方向插值得到贝塞尔曲面

image image

计算贝塞尔曲面 56:40

通过uv两个参数映射,所以是显式几何

  • 两个参数u,v分别控制两个方向的插值情况
image
  • 先找到u对应的曲线,再找到v对应的点
image

5.4 网格 P11 59:30

分类:Mesh subdivision、Mesh simplification、Mesh regularization

image

网格:细分 P12 7:00

细分(Subdivision)

Loop细分 9:20

  • Loop是人名
  • 适用情况:三角形网格
image

第一,增加更多三角形(定点数)

image

第二,调整它们的位置

  • 对于新顶点
image
  • 对于旧顶点:根据自己和周围顶点位置加权平均
image

图中白点度为6

Catmull-Clark细分 20:40

  • 适用情况:一般网格

相关概念:

  • 四边面和非四边面
  • 奇异点:度不为4的点
Step1.添加顶点

步骤:

  • 每条边取一个中点
  • 每个面取一个中点
  • 连接新顶点
image

一次细分

image

一次细分结论

  • 细分后增加奇异点数 = 细分前非四边面数
  • 细分后非四边形面数 = 0

多次细分

imageimage

Step2.调整规则* 28:20

新旧顶点位置调整规则(了解)

本质:依次求平均

  • f:面中心
  • e:边中心
  • v:中心
image

两种细分比较

  • Loop细分:仅适用于三角形
  • Catmull细分:适用于一般网格
image

网格:简化 P12 33:40

image

边坍缩

image image
  • 多少几何误差是由简化引入的?
  • 执行顶点的局部平均不是一个好主意(如左图)
  • 二次误差:新顶点应该放在到之前各个面,距离的平方和最小的位置(机器学习的L2 distance)
算法浅析
  • 需要预计算每条边的二次度量误差,每次取最小的坍缩(贪心算法)
  • 每次坍缩后需要重新调整相关边的二次度量误差(堆排序)
image

遍历坍缩边,计算二次度量误差

  • 到所包含三角形表面的距离和的近似

  • 取值最小的坍缩

贪婪算法…好的结果!

实际举例

就是优先坍缩平坦的面,最后坍缩转角很大的面

image

Ch6.光线追踪

6.1 前置知识补充 P12

阴影映射 52:30

英文:Shadow mapping(不要和阴影贴图 Shadow map 混淆)

  • 以下默认讨论点光生成的阴影
image

关键思想:摄像机和灯光都看得到的点不在阴影里

大致思路

1.从光源出发看,记录物体的深度

image

2.从摄像机出发看,将点投影回光源处,根据深度缓冲判断是否位于阴影内

image image

思路可视化:可视化阴影映射

image

1.光源看向场景

image

2.摄像机看向场景

  • 绿色:不在阴影里
image

问题

image

(第三条)涉及到浮点深度值的相等比较意味着缩放、偏差、容忍度等问题

硬阴影和软阴影 71:00

硬阴影:非0即1的阴影,没有过渡,来自于点光源(点光源无大小)

软阴影:越靠近物体根部越硬,阴影程度取决于光源大小

image

Umbra:本影区域,完全看不到光源的区域

Penumbra:半影区域,部分看到光源的区域

6.2 Whitted-Style光线追踪 P13

为什么要光线追踪?

image

基础光线追踪算法 10:20

光线

image

关于光线的三个观点

  1. 光沿直线传播(尽管这是错误的)
  2. 光线交叉时不会“碰撞”(尽管这仍然是错误的)
  3. 光路可逆,光线从光源传播到眼睛(但在路径反转的情况下,物理是不变的——互换性)

光线投射 15:25

思路

  1. 通过每像素投射一束光线来生成图像
  2. 最近交点通过向灯光发送光线来检查阴影
image

光线投射之像素着色

1.从摄像机出发,==每像素==投射一束光线(Eye Ray),相交于场景中最近的点

2.从交点出发,与光源相连(Shadow Ray),查看是否被照亮(被阻挡,在阴影里;否则,被照亮)

3.着色计算

image

Whitted-Style光线追踪 21:05

Recursive (Whitted-Style) Ray Tracing:递归光线追踪

本质:和基础光线追踪算法相比,追加一次反射和折射(能量衰减),将全部==结果累加==

  • primary ray:第一根光线
  • secondary rays:除第一根光线外的其他光线
  • shadow rays:往光源的连线
image

① 光线与表面交点 31:15

光线与隐式几何求交

光线代数定义:有起点有方向的向量

光线上的点满足方程:r(t) = o + td [0, +∞)

image

光线与球相交:既满足光线方程也满足球方程(p = o + td)

要求:根为正实数

本质:求二次函数的根的最小值(根存在的话)

image image image

推广到一般情况

image

光线与三角形求交 38:40

image

光线起点在物体内/外:如果光线在==封闭物体内==朝外发射,仅有==奇数==个交点;在==封闭物体外==与物体相交则有==偶数==个交点

一般方法

求交思路:先计算光线与三角形所在平面相交,再判断交点是否在三角形内

image

平面的一般方程

image

联立光线方程和平面方程(p = o + td),求出交点。再利用叉积判断点是否在三角形内

image
公式法(一步到位)

本质:利用光线方程和三角形重心坐标性质联立求解线性方程组

求解思路:都是三维向量(表示点或方向),就有三个方程组,同时有三个未知数(t,b1,b2)。使用克拉默法则解线性方程组即可

结果需满足点在三角形内,进而得到结果需满足:

  • t是正实数
  • b1,b2,1-b1-b2均非负数(理由:[重心坐标 P9 5:00](#重心坐标 P9 5:00))

重点就是画红线的那一段,其他可不看

image
  • 克拉默法则:参考《马同学》线性代数 7.8 克拉默法则
image

② 光线与包围盒求交 52:50

将每个三角形都和每个像素发射的光线求交?Very Slow!

image

英文:Bounding Volumes

image

避免碰撞(光线与物体)的快速方法:绑定复杂的对象与简单的体积

  • 对象完全包含在体积中
  • 如果(光线)没有击中体积,就不会击中物体
  • 首先测试包围盒,然后测试对象是否命中

实现思路 57:45

通俗理解:3个无限延伸的对面形成的交集

image

AABB包围盒:任何一条边都平行于x或y或z轴(任何一个面都平行于xoy或xoz或yoz)

二维角度看

求光线在盒子内的时间(长度)

  • 先假设光是直线(而非射线)
  • 光线和对线(二维就是对线,三维就是对面)有两个交点(tmin和tmax,由于假设光线是直接,故可t可正可负)
  • 求每个对线交集,结果就是答案

image

三维角度看 66:00

关键思想:

  • 光线进入盒子:只有当所有对面都进入才算进入
  • 光线离开盒子:只要有一个对面离开就算离开
  • tenter = max {tmin};texit = min {tmax}
  • 如果tenter < texit 则有交点
image

分类讨论(从特殊到一般)

1.光线起点在包围盒内(texit >= 0 and tenter < 0),相交

image

2.texit < 0,不相交

image

3.texit > 0,但是tenter > texit,不相交

image
相交结论
image
使用AABB的好处

方便计算

image

t * dx = p’x - ox(p’就是交点)

dx:d在x轴方向的投影

③ 加速光线与表面求交 P14 7:40

法1.均匀空间划分(格子)

英文:Uniform Spatial Partitions (Grids)

加速求交具体过程

1.预处理

image

2.光线与盒子求交,如果盒子内有物体再和物体求交

image
  • 格子不能太稀疏,否则要判断很多物体(如果场景物体很多的话)

  • 格子也不能太密集,否则一直要判断是否和盒子求交

image

法2.空间划分 18:00

均匀空间划分预处理的不足:在空旷场景内,也需要进行多次光线和盒子求交(优化思路:稀疏的地方用大的盒子)

预处理改进:

  • Oct-Tree:每次沿每个坐标轴固定平分
  • KD-Tree:每次选一个坐标轴和物体边界平分
  • BSP-Tree:根据一定规则平分,较复杂
image
KD-Tree 25:30
  • 在非叶结点上存储划分情况
  • 在叶子结点上存储划分结果(哪些物体在区域内)
image

Tips:图示是均匀划分,实际KD-Tree不必均匀划分

KD-Tree数据结构

image

内部节点存储(非叶结点)

  • 分离轴:x,y or z
  • 分离位置:分离平面沿某一轴分离的坐标
  • 子节点:指向子节点的指针
  • 内部节点中不存储对象

叶节点存储

  • 对象列表

举例演示 29:00

image image

法3.物体划分&包围盒层级(常用!!!) 38:30

空间划分的不足:无法很好的表示物体在区域内,且物体可能在多个区域内

英文:Object Partions & Bounding Volume Hierarchy (BVH)

  • 把物体分为两堆,重新计算包围盒,递归下去直到包围盒内物体数足够小
image

如何分

1.总是选结点中轴最长的分(例如,物体沿x轴方向排列,则x轴方向最长,从中间划分)

2.取中间物体划分(快速选择算法,O(n))

image

何时终止

image

数据结构:和KD-Tree相似

image

算法 52:10

image

KD-Tree VS BVH 52:10

image

空间划分(eg.KD-Tree)

  • 将空间划分为不重叠的区域
  • 一个对象(三角形)可以包含在多个区域中

对象划分(eg.BVH)

  • 将对象集划分为不相交的子集
  • 每组的边界盒在空间上可以重叠

推荐加速结构使用BVH

补充:DLSS 和 RTXGI

image

6.3 辐射度量学 P14 57:00

英文:Radiometry

1.专业术语

1.辐射能量和通量 (Flux) 63:50

英文:Radiant Energy and flux (power)

定义:Radiant Energy,辐射能量是电磁辐射的能量

  • 单位:焦耳( J ),并用符号Q表示

定义:Radiant Flux,辐射通量单位时间内发射、反射、传播或接收的能量

  • 单位:lumen,lm,流明 (光通量单位)
image image

辐射通量百度百科:https://baike.baidu.com/item/%E8%BE%90%E5%B0%84%E9%80%9A%E9%87%8F/4924207?fr=aladdin

辐射通量又称辐射功率,指单位时间内通过某一截面的辐射能,是以辐射形式发射、传播或接收的功率,单位为W(瓦),即1W=J/s(焦耳每秒)。它也是辐射能随时间的变化率Φ=dQ/dt 。测量辐射通量的方法一般是由直流电置换辐射通量的等价置换原理进行的。

后续物理量概述(含小结)

image

左1:辐射强度。一个光源向==每单位立体角==所投送的辐射通量 I = dφ / dw

中:辐照度。物体表面在==每单位面积==接收的能量 E = dφ * cosθ / dA(考虑光线衰减还需要除以r^2^)

右1:辐射亮度。物体==每单位立体角==上,==每单位投影面积==上辐射的能量 $L = \frac{d^{2}\phi}{dwdAcosθ}$(d^2^φ为二阶导,从积分角度更好理解)

可参考链接:

  • 路径追踪(Path Tracing)与渲染方程(Render Equation):https://zhuanlan.zhihu.com/p/370162390
  • 但是通常情况下,辐照度Irradiance的公式里不写cosθ,我们默认指的就是投影后的光线能量。

2.辐射强度 (Intensity) 70:00

英文:Intensity

定义:辐射(发光)强度是由点光源发出的单位立体角的通量

  • 通俗理解:辐射强度指的是指单位时间,单位立体角上的发射的能量

单位:candela[kænˈdiːlə],cd,坎,坎德拉(发光强度单位);

image

百度百科:https://baike.baidu.com/item/%E8%BE%90%E5%B0%84%E5%BC%BA%E5%BA%A6/1298089

立体角 w

单位:sr,steradian

立体角通俗理解:单位球上的面积所对应的三维角。

单位立体角通俗理解:单位球上的单位面积所对应的三维角。单位立体角在不同方向大小是一样的。

image

立体角:https://baike.baidu.com/item/%E7%AB%8B%E4%BD%93%E8%A7%92

立体角(Solid Angle),常用字母*Ω*表示,是一个物体对特定点的三维空间的角度,是平面角在三维空间中的类比。它描述的是站在某一点的观察者测量到的物体大小的尺度。例如,对于一个特定的观察点,一个在该观察点附近的小物体有可能和一个远处的大物体有着相同的立体角。

球面度(如下图):https://baike.baidu.com/item/%E7%90%83%E9%9D%A2%E5%BA%A6/4256270?fr=aladdin

球面度(Sr=Steradian)是立体角的计量单位。面积为半径平方(r^2^)的球表面对球心的张角等于1球面度。因为球的表面积是4πr^2^,所以,整个球面有4π球面度。一个发光强度等于1坎德拉的理想光源,每球面度能够产生1流明光通量

image

Differential Solid Angles:单位立体角(微分立体角)dA

分别求出矩形两条边(用到弧长公式 l=r*θ):

  • 长:r*sinθdφ
  • 宽:rdθ
  • dA:长*宽
image image

验证:整个球面积分得到4π(先积θ,再积φ,这里的表示和高数书相反)

image

立体角可以用二维向量w表示(θ,φ)

image
辐射强度I

各向同性点光源的辐射强度I(均匀分散到四面八方)

通俗理解:单位时间内,光源从任何一个立体角度发射出能量(总能量 / 面积)

计算:整个光通量除以球的立体角

image

3.辐照度 (Irradiance) P15 11:40

英文:irradiance

定义:辐照度是每(垂直/投影)单位面积接收的辐射通量

  • 通俗理解:单位时间,单位面积接收的投影能量

单位:lux,lx,“勒克斯”,简称“勒” (照度(luminance)的单位)

image image

Tips:一定是和该点垂直的量!即需要是经过投影的能量

百度百科:https://baike.baidu.com/item/%E5%85%89%E7%85%A7%E5%BA%A6/2651022?fr=aladdin

光照度,可简称照度,其计量单位的名称为“勒克斯”,简称“勒”,单位符号为“lx”,表示被摄主体表面单位面积上受到的光通量。1勒克斯等于1流明/平方米,即被摄主体每平方米的面积上,受距离一米、发光强度为1坎德垃的光源,垂直照射的光通量。光照度是衡量拍摄环境的一个重要指标。

image

仅看点光源产生的能量,则辐照度是呈1/r^2^衰减的

image

4.辐射亮度 (Radiance) P15 18:20

引入

image

亮度是描述光在环境中的分布的基本场量

辐射亮度是与光线有关的量

渲染是关于计算亮度的

定义:亮度(luminance)是一个单位立体角,单位投影面积表面发射、反射、传播或接收的通量

  • 通俗理解:单位时间,单位立体角,单位投影面积上的能量

单位:nit,尼特是亮度的单位,1nit=1 cd/m²

image

上图dφ不是平方,而是二阶微分

不难发现L不是一成不变的,会随着位置和立体角变化而变化。

不同角度理解辐射亮度

image

以辐照度(接收)对立体角微分为例

  • 分母移项到左边,更好理解
image

以辐射强度(发射)对单位面积微分为例

  • 分母移项到左边,更好理解
image

ChatGPT-辐射亮度

image image

各种结物理量小结(含小结)

可参考 后续物理量概述(含小结)

Radiant xxx:

  • Flux:辐射通量,单位时间内的能量
    • 单位:流明,lumen,lm
  • Intensity:辐射强度,单位时间,单位立体角发射的能量
    • 单位:坎,坎德拉,candela,cd
  • Irradiance:辐照度,单位时间,单位投影面积接收的能量(相当于Radiance的积分)
    • 单位:勒,勒克斯,lux,lx
  • Radiance:辐射亮度,单位时间,单位立体角,单位投影面积发射、反射、传播或接收的能量(相当于Irradiance的微分)
    • 单位:尼特,nit(1nit=1 cd/m²)

立体角:w(读作Ω)

  • 单位:球面度,steradian,sr

辐照度 VS 辐射亮度 P15 26:15

  • 辐照度(Irradiance)和辐射亮度(Radiance)区别:前者不考虑方向,后者考虑方向
image

2.BRDF P15 29:00

英文:BRDF,Bidirectional Reflectance Distribution Function

中文:双向反射分布函数

反射建模

image

BRDF定义:任何一个==出射==方向的Radiance占该单位面积==入射==Irradiance的==比例==

通俗理解:以下默认为单位时间

  • 第一阶段:可以先想象来自半球面所有方向的入射光线(Radiance)对该单位面积(或点)进行积分(Irradiance)得到该单位面积的总能量(dE);
  • 第二阶段:将第一阶段得到的总能量反射给各个方向(dLr
image

反射等式

image

递归等式

  • 每一个入射光线经过BRDF反射后又会产生新的入射光线
image

3.渲染方程 P15 42:00

image

理解渲染方程* 46:55

单一点光源

image

多个点光源(和的形式)

image

面光源:点光源的积分(积分的形式)

image

反射光源:其他物体反射或来自光源的光线作为入射光线

image

渲染方程写成积分方程

image

翻译:Fredholm积分方程的第二类[广泛研究的数值]与标准形式

化简写成算子(不太理解!!!)

image

可以离散为一个简单的矩阵方程[或线性方程组联立](L, E为向量,K为光传输矩阵)

L出射:该物体(或者说该点,后面略)反射出的总能量

E:物体自发光

KL出射:来自其他物体入射并由BRDF反射的能量

image

光线追踪和全局光照引入 56:30

全局光照:所有反射光线累加起来的结果(直接光 + n次间接光)

image

光栅化内容

image

光线追踪演示

  • 最终会收敛到一定亮度(根据能量守恒)

直接光照(相当于弹射一次)

image

直接光 + n次间接光

  • 玻璃球内会弹射多次,因此灯的地方在弹射次数少时可能是黑的

imageimageimage

4.概率论回顾 P15 65:45

随机变量及其分布

X:随机变量值

X~p(x):取某个X值的概率使p(x)

image

性质

取任何值的概率 >= 0

所有概率累加在一起为1

image

期望

image

概率密度函数

image

函数的期望:本质就是 函数值 * 概率 做积分

image

5.蒙特卡洛积分 P16 9:00

英文:Monte Carlo Integration

可参考URL:https://zhuanlan.zhihu.com/p/333314002

引入

问题:有时无法很好表示函数,对函数直接求定积分很困难

解决办法:随机采样函数值,对其积分(算面积),累加结果求平均得到近似数值解(连续 –概率–> 离散)

本质:对定积分结果的近似

image image

定义

image

均匀分布的概率密度函数

image

均匀分布的蒙特卡洛积分

image image

蒙特卡洛积分的一般形式!

image

6.路径追踪 P16 20:35

英文:Path Tracing

介绍

image

Whitted-style ray tracing:

  • 始终执行镜面反射/折射

  • 在漫反射表面停止弹跳

这些简化合理吗?

进阶:让我们逐步改进whited - style光线跟踪,并引导我们的路径跟踪算法!

Whitted-Style光线追踪问题1:对于Glossy材质还沿着镜面方向反射是不对的

image

Whitted-Styly光线追踪问题2 - 光线射到漫反射表面停止,接受不到其他物体的漫反射作为间接光

image

Whitted-Style光线追踪是错误的,但是渲染方程是正确的

待解决的问题:

  • 半球面的积分
  • 来自于其他半球的积分(递归)
image

简单的蒙特卡洛解决方案 31:05

整体思路:

  1. 从每一个像素发射N条光线,如果光线打到物体表面p点,则计算p点的着色。
  2. 在p点随机朝外发射一条光线,方向为wi,如果打到光源就计算来自光源的着色,如果打到物体,就计算来自物体的着色(递归计算)
  3. 在该像素处对N条光线的结果取平均
image image

考虑表面上一点p

使用蒙特卡洛积分近似对半球表面的定积分

image image
直接光伪代码 38:10

目的:取表面上某一点p计算其反射给w0方向的Radiance

大致流程:

  • 在p所在的半球上随机若干个入射方向wi(记作pi点)
  • 利用蒙特卡洛积分,近似计算各种直接光源从pi点入射并由BRDF反射的Radiance(辐射亮度)的总和
image
加入:间接光 40:35

相当于从P点出发看Q点的直接光

image

带缺陷的全局光照伪代码

大致流程:

  • 在直接光的基础上进行改进,如果入射方向出发打到的不是光源而是其他物体,就继续递归计算被击物体Q点到该方向的Radiance
image

缺陷:发射光线的数量呈指数级增长

image

改进:使用一根光线

路径追踪大致代码(仍有缺陷,递归结束条件有问题,后面会改进)

路径追踪:每次每个着色点只发射一根光线

image
加入:产生光线

本质:从相机位置朝不同像素发射光线,在每个像素内随机取方向发射光线,打到不同物体的表面(如果打到,定义成p点),从而计算该方向上物体反射的Radiance

image

光线生成伪代码

image
改进:间接光(RR思想)

RR:Russian Roulette,俄罗斯轮盘赌

路径追踪问题:递归结束条件不明

本质:利用概率的期望去近似无限次弹射的结果

image

以一定概率p选择是否从p点发射光线,如果发射,那么把结果再除以概率p;如果不发射,直接返回0。最终会发现期望就是L0

image

RR伪代码

image
改进:直接采样光源

问题:如果光源很小,可能永远也无法打到光源,因此直接对光源进行采样计算直接光

image

物体微小表面一点p上,对立体角的积分 =改写成=> 在光源上,对微小面积的积分(类似换元的思想)

image

蒙特卡罗方法允许任何采样方法,因此我们可以对光线进行采样(因此没有光线被“浪费”)

dA和dw关系:光源微表面对半球微表面的投影

  • 考虑立体角与光源的夹角(分子 cos θ^’^)
  • 考虑光线衰减(分母)
image

蒙特卡洛采样光源

pdf:1/A

image

整合:路径追踪 + 蒙特卡洛 70:15

整体思路:

  1. 从每一个像素发射N条光线,如果光线打到物体表面p点,则计算p点的着色。
  2. 在p点随机朝外发射一条光线,方向为wi,分别计算直接光(来自光源)和间接光(来自其他物体)的着色,并加和
    • 对于直接光:直接采样光源,对光源积分。如果有遮挡再判断一下遮挡情况
    • 对于间接光:使用俄罗斯轮盘赌朝随机方向发射光线。直到赌到0终止
  3. 在该像素处对N条光线的结果取平均
image image

细节修复:光线被阻挡则为0

image

课后杂谈 75:50

早期RayTracing:Whitted-Style光线追踪

现代RayTracing:所有光线传播方法的大集合

image

课程未涉及

  • 如何在半球表面相对均匀的采样,即如何定义随机的光源入射方向(光路可逆,也可以理解成如何从p点出发采样间接光的光源)
  • 除了均匀分布,不同的pdf
  • 随机数是否随机
image
  • 结合不同采样方法
  • 像素颜色一定是各种反射光线的Radiance吗?可不可有不同权重?
  • 得到的是Radiance(辐射亮度),不是颜色,需要通过gamma校正
  • HDR图,颜色空间是什么?
  • ……
image

补充:Ray Tracing和Path Tracing的区别

光线投射(Ray Casting ),光线追踪(Ray Tracing),路径追踪(Path Tracing)的区别:https://blog.csdn.net/weixin_45019478/article/details/105369278

Ch7.材质和外观 P17

什么是图形学中的材质?

image

7.1 材质==BRDF

BSDF(散射) = BRDF(反射) + BTDF(折射)

S:scattering

T:transmit

R:reflection

漫反射材质 10:50

image

漫反射项

假设:所有入射光和反射光是均匀的(Li是常数),物体该点不吸收能量(纯白色)

根据能量守恒,反射的能量 == 入射的能量

  • 入射Irradiance == 出射Irradiance
  • 入射Radiance == 出射Radiance
image

反射率Albedo:可以是1维,3维(控制不同通道),0~1之间

BRDF:常数,在一般情况下使1 / π (这里因为是漫反射,因此增加了一个漫反射系数)

推导:cosθ 对半球积分,θ ∈ (0, π / 2);$ \phi $ ∈ (0, 2π)

image

高光材质 16:00

image

理想反射/折射材质 17:05

image

反射 19:05

image

推导1.根据平行四边形法则(左图)

image

推导2.入射和出射方向的方位角相反

θ:仰角,与法线方向的夹角(竖的夹角,就是高数书本球面坐标系的φ)

φ:方位角,与法线在xoy平面的夹角(横的夹角,高数书本的θ)

所以根据反射原理得

  • 出射仰角 = 入射仰角(θ = θo = θi
  • 方位角相差一个π(φo = (φi + π) mod 2π)

折射 25:00

image

不同介质有不同折射率,但是折射前后,不同折射率乘sinθ的值相等

  • 折射率越大,sin(θ)就越小,θ就越小
image

折射角余弦的计算

  • 当入射折射率 > 反射折射率,会发生全反射(即无出射光)
image image

折射:BTDF

反射 + 折射:BSDF

菲涅尔项 35:20

image

菲涅尔现象:与法线垂直地方会发生大量反射,与法线平行的地方发生折射(如下图是折射率为1.5的绝缘体)

  • 绝缘体
  • S和P是极化现象(不需要了解)
image
  • 导体(折射率是负数)
image

菲涅尔公式

image

7.2 微表面材质 43:20

英文:Microfacet Material

  • 远看,表面近似光滑
image

微表面理论

macrosurface:平面(远处看,平坦粗糙,同法线)

microsurface:微表面(近处看,凹凸不平的镜面反射,不同法线)

image

微表面BRDF

光滑:glossy,微表面法线相对集中(朝上)

  • 镜面反射:完全朝上

粗糙:微表面法线相对随机,漫反射

image

F:菲涅尔反射项

G:边缘修正项(当光线贴着边缘入射时,微表面之间可能会存在遮挡关系)

D:表示微表面的法线分布(例如给定半程向量h,整个表面有多少法线和h接近,如果多则值就大,表面越光滑)

image

举例 55:00

image

各项同性/异性材质 57:30

英文:Isotropic / Anisotropic Materials (BRDFs)

image image

各项异性BRDF

各项异性BRDF:方位角旋转后的入射到出射方向得到结果不一致

image image

BRDF的性质 66:05

非负性和线性

image

可逆性原则和能量守恒(完全反射的情况下就是1)

image

各项同性和各项异性的BRDF

  • 各向同性性质
  • 可逆性原则
image

7.3 测量BRDF 71:25

动机

image

避免开发/派生模型的需要

  • 自动包含所有的散射效应

能否准确渲染真实世界的材料

  • 适用于产品设计,特效,…

理论 vs. 实际

image image

简单测量算法

image

表示BRDF 76:30

每个材质测量 90 x 90 x 180 个数据

image

Ch8.渲染进阶 P18

8.1 高级光线传播 3:40

内容总览

  • 无偏光线传播
  • 有偏光线传播
  • 实时辐射度
image

有偏vs.无偏蒙特卡洛积分

image

双向路径追踪(BDPT, 无偏)7:05

适合:场景以间接光为主的采用双向路径追踪效果好

本质:光源和相机打出许多射线(light sub-paths 半路径),形成连线

image image

Metropolis光线传播(MLT, 无偏) 11:00

核心:马尔科夫链的蒙特卡洛积分(去随机性,不再是均匀分布)

本质:在一个path周围找其他path

适合:复杂场景的光线追踪

image image
  • 缺点:不知道收敛时机,图很脏
image

光子映射(有偏)20:00

image

caustics:焦散线(适合翻译成焦线,因为没有发散)

步骤:

  1. 从光源出发,四面八方发射大量光子,直到打到漫反射物体上
  2. 从视角出发,四面八方发射大量路径,直到打到漫反射物体上
image

局部密度估计

  • 摄像机射线打到物体表面后,在周围找光子,并除以面积(得到密度),得到该点能量(类似KNN)
image

缺点:太少光子噪声大,即使光子数多,依旧容易糊(毕竟是局部平均值嘛,除非无穷多个光子,取无限小的dA)

image

有偏:模糊

一致:光子足够多就不模糊

image

顶点连接与合并(VCM,有偏) 30:20

英文:Vertex Connection and Merging

双向路径追踪(BDPT)和光子映射(Photon Mapping)的结合

image

实时辐射度(IR)31:55

别名:Many Light算法

本质:已经被照亮的表面可以当做是光源再照亮别人

image image

8.2 高级外观模型 37:30

内容总览

image

非表面化模型 38:40

散射介质

举例:雾、云

image

当光通过参与介质时,它可以(部分)被吸收和散射

由Phase Function(相位函数)规定光线如何散射

image image

头发材质

image

近似

image

更真实:把头发想象成玻璃

image image image

Double Cylinder Model

image image image

颗粒材质 58:15

举例:沙子

image

表面模型 60:05

半透明散射材质

英文:Translucent Material

别名:次表面散射

举例:玉石、水母

image

次表面散射(BSSRDF)和BRDF区别:不在是一个点接受光线并反射,而可能从其他地方反射出去

SS:Sub-Surface Scattering

image

将次表面散射的光线近似成新的光源

image image image image

布料 68:30

组成:一系列缠绕的纤维

Fibers:纤维

Ply:股(由纤维缠绕构成)

Yarn:线(由股缠绕构成)

image

当成物体表面

image

当成散射介质(空间中的体积)

image

当成实际纤维

image

细节材质 74:40

结果过于完美,很假

image

实际应该不完美,更真实

image

法线体现细节

image

渲染很久很困难

image

原因:从相机发射的光线很难通过反射的方式打到光源

image

解决办法:一个像素打出很多光线,覆盖很多微表面

image

根据覆盖范围,有以下现象:范围越小越有特点

image image

程序化外观 87:10

英文:Procedural Appearance

纹理定义在空间中,需要时去找

image

Ch9.相机,棱镜和光场 P19

Camera,Lenses and Light Field

棱镜改口为透镜

9.1 相机 5:45

针孔相机

image

快门

image

传感器:传感器上的点记录的是Irradiance

image image

视场 FOV 12:40

英文:Field of View

Sensor:感光原件最终接收光线的平面

固定Sensor大小:

  • 左图:焦距(Focal length)大,视场小
  • 右图:焦距小,视场大
image

默认传感器是35mm,通过定义焦距的方式定义FOV(即默认传感器固定)

image

焦距越大,视场越小

image

传感器越大,视场越大

image image

传感器和焦距同时变小可以摆出尺寸想当的图,但分辨率更低

image

曝光 Exposure 21:50

time:由快门时间控制

irradiance:由场景和光圈控制

image

摄影中的曝光控制

Aperture size:光圈大小

  • 通过打开/关闭光圈来改变f光圈(如果相机有光圈控制)

Shutter speed:快门速度

  • 改变传感器像素集成光的持续时间

ISO gain:感光度(可以理解成后期处理)

  • 在传感器值和数字图像值之间改变放大(模拟和/或数字)
image image

补充:光圈F数的,相当于.(即小数点)

ISO 32:20

通俗解释 ISO:往比较暗的图乘上一个数(线性增大),增大亮度同时也会增大噪声,一般用于微调

image image

光圈:F数

英文F-Number(F-Stop):Exposure Levels

N:F数具体数值大小,可以理解为光圈 1 / 直径(N越小,光圈越大)

  • 实际 N = f / A (f:焦距,A:光圈直径)
image

快门

image

快门时间越长,在快门打开时刻接受的信息容易不一致,从而经传感器平均后会产生运动模糊

快门时间越短,不容易产生运动模糊,但会导致亮度越低

image

运动模糊不一定是坏处(更加有冲击感)

image

果冻效应:拍摄高速移动的物体,可能会发生扭曲

URL:https://baike.baidu.com/item/%E6%9E%9C%E5%86%BB%E6%95%88%E5%BA%94/4763603?fr=aladdin

image

补充:如上图的螺旋桨

综合考虑 42:55

等价曝光度

image

调小光圈并非等价增大快门,还需考虑额外因素

  • F数:控制景深
  • 快门:控制模糊

摄影中的快和慢 45:15

高速摄影

image image

延时摄影(有种拉丝感)

  • 用特别长的曝光时间,小光圈
image image

9.2 棱镜

薄棱镜近似 48:10

image

性质:==平行光==经过棱镜一定过==焦点==,光路可逆,反之成立

image

现实生活中,棱镜的焦距可以改(底层就是棱镜的==组合==)

薄棱镜等式(理想)

穿过棱镜前后:平行光过焦点,过焦点平行光。穿过中心的光方向不变

zo:物距(透镜到物体平面的距离)

f:焦距

zi:像距

image

推导

image image

散焦模糊 56:50

英文:Defocus Blur

Coc:模糊圈

zo:物距

f:焦距

zi:像距

zs:Sensor距离

image

补充:Coc与光圈的大小成比例

image

D:光圈大小

f:焦距

N:F数

F数:焦距f / 光圈直径A

image image image

补充:f是焦距,N是F数

薄棱镜下的理想光线追踪 64:30

英文:Ray Tracing Ideal Thin Lenses

image image

景深 69:15

Depth of Field

景深:成像清晰的一段范围(指物距)

实际使用中只需记住:光圈越小,越接近小孔成像模型,结果会越清晰即可

image image image

光场 P20 10:00

Light Field / Lumigraph

全光函数(The Plenoptic Function):看到的整个世界都可以用该函数表示

  • θ、φ:仰角和方位角(表示三维空间中任意方向)
  • $\lambda$:波长,表示不同光颜色
  • t:时间
  • Vx、Vy、Vz:表示任何一个位置
image

三维空间中的任意一条光线

image

用4维向量定义

image image

使用两个平面上的点定义光场

  • 两个平面各取一个点得到一个方向(记录所有可能的组合)
image image image

补充:图(b)理解成同一个像素的Irradiance展开成各种Radiance

分光:将不同方向的光分开

image

光场照相机 34:35

可以先拍照再调焦距!

image

在各个圆内部还记录方向信息

  • 感光元件后移,原来的一个像素(图中黄色椭圆)现在是一块圆形区域(后移的感光元件)
image image

广场照相机的不足:分辨率不足(原来的1个像素要更多像素来记录其他信息,导致分辨率低);成本高;计算复杂

image

9.3 颜色与感知 P20

颜色 48:30

光谱

不同波长的光对应不同的折射率

image

谱功率密度 SPD:描述不同光源的光在任何波长的能量分布是多少

image image

SPD线性性质

  • 可加性
image

什么是颜色?

  • 颜色是人感知的结果
image

感知 54:30

瞳孔:类似光圈

晶状体:类似透镜

视网膜:感知

image

感光细胞

Rod cells:棒状细胞,感知光线强度

Cone cells:锥形细胞,感知光的颜色,内分有三种(S、M、L)

  • S:感知短波长(高频)
  • M:感知中间波长
  • L:感知长波长
image

cone cells分类:S、M、L

image

不同人这三种细胞的分布有差异

image

颜色三刺激理论 59:35

Tristimulus Theory of Color

本质:人眼最终看到的是==三个数==(分别是三种颜色和强度的积分,也就是不同种类锥形细胞感光的期望)

image image

同色异谱 62:25

Metamerism

不同光源光谱不一样,但是通过调节可以使得颜色一样

image image

左边:照片拍摄

右边:显示器显示

颜色匹配 64:20

Color Reproduction / Matching

  • 计算机使用加色系统(区别于画画的减色系统),混合之后越来越亮
image image image

颜色混合

  • RGB混合最下面的?颜色
image

结果:一个匹配函数。给定一个波长,混合三个颜色即可得到?色该波长下的分布(画一条竖线)

image

颜色空间 72:00

image image image

补充:Y只控制亮度,因此一般固定Y(把Y当成常数)。这样取x,y(x,y是关于X,Z的函数,z = 1-x-y)就可以得到最终颜色

image

色域

image image

感知组织的颜色空间 80:00

Perceptually Organized Color Spaces

HSV

image image

CIELAB

image image image

CMYK(减色系统,不同颜色会越混越黑)

  • 黑色便宜
image

Ch10.动画 P21

历史、关键帧动画、物理模拟、骨骼、绑定

  • 模拟和渲染是分开的!该章只谈模拟,不谈渲染!
image

10.1 介绍 5:40

image

历史 8:45 暂略

关键帧动画 16:30

Keyframe Animation

image image image

10.2 物理仿真 21:00

image image

质点弹簧系统 25:30

Mass Spring System

质点弹簧系统:一系列相互连接的质点和弹簧

假设初始状态下a、b重合(理想)

image

假设初始状态a、b间距为l(实际,但没有考虑能量损失)

image

引入摩擦力:上图能量守恒,永远不停

物理仿真中的导数(此处用·表示导数)

image

引入能量损失,但是会导致运动的物体停下

  • 问题:AB一起运动,弹簧内部本身没有拉伸,但是却受到阻力
image

弹簧内部阻力(和弹簧长度无关,只和a、b相对速度有关)

image

红框部分为投影到ab方向的相对速度值(考虑圆周运动时不会有能量损耗)

弹簧的组合

image

质点弹簧系统组成布料

抵抗切变的力

image

抵抗弯折(非平面)的力

image

有限元系统:力可以传导

image

10.3 粒子系统 49:30

Particle Systems

image

粒子动画过程

image

粒子之间作用力

image

ODE 模拟群体行为

image

10.4 运动学 59:45

image

正向运动学:实现容易,使用不易

image image

逆向运动学:实现不易,使用容易

image

逆运动学问题

imageimage

逆运动学优化

  • 优化问题解法:梯度下降法
image

10.5 绑定 68:20

Rigging

image

Blend Shapes

本质:混合控制点,进而混合不同形状

image

动作捕捉 73:00

image image image

光学动捕(应用最广泛)

image

控制点追踪

image

面部动画

image

电影生产流水线 81:00

image

10.6 如何实现 P22

image

1.单个粒子模拟 5:10

使用速度场

image

常微分方程

image

欧拉方法

  • 稳定性差
image

误差:步长过大,易产生不精确

image

稳定性差:例如无法圆周运动

image

问题

数值解法面对的两个问题:误差和不稳定

image

解决不稳定的方法 18:00

image
中点法

中点法思路:先用△t走到a点,取中点速度,利用中点的速度重新从起点出发,走△t得到c点

image image

中点法:对距离中点求速度作为平均速度

修改欧拉:对速度直接求平均作为平均速度

自适应步长法

思想:减少△t,如果减少前后位置差距不大就不再分,否则就多次使用欧拉法

image
隐式欧拉方法* 1阶

思想:用==下一刻==的速度和加速度计算

image

提问:老师没有讲下一时刻的加速度具体怎么算。。

隐式欧拉是1阶的(随δt减小,误差减小的比例,阶数越高越好)

image
龙格库塔方法 4阶 33:05

适合解常微分方程(ODE)

==最常用==:四阶龙格库塔方法

扩展课程:数值分析

image
非基于物理的方法* 37:30
image

2.刚体的模拟 40:00

Rigid Body Simulation

image

3.流体模拟 42:30

Fluid Simulation

分析:

  • 假设水体是由许多不可压缩刚体小球组成
  • 给出任何一个时刻t,都可以知道任何位置的密度,参考原密度进行修正(使用梯度下降)
image

拉格朗日方法 Vs. 欧拉方法

拉格朗日方法(质点法):知道每个质点的运动

欧拉方法(网格法):知道每个网格内的运动(对流体来说就是把空间拆分成很多网格,计算内部密度)

image

混合方法 MPM

image

完结撒花!

 评论