GAMES101 学习笔记 Lecture 19~22

往期作业汇总帖

https://games-cn.org/forums/topic/allhw/

Lecture 19: Cameras, Lenses and Light Fields

Images 照片 = Synthesis 合成 + Capture 捕捉

其中合成指光栅化、光线追踪等,捕捉指拍照等

小孔成像、透镜成像、成不了像对比

一开始研究的是小孔成像

小孔成像对应的是针孔相机

为什么需要透镜

如果不使用透镜,那么每一个点都会收到来自四面八方的光线,那么这个点接收到的就是 irradiance 单位面积上接受的光线在垂直方向上的辐射能量

传感器上每一个像素点都会接受这个物体各点照来的能量,最终每一个像素点的颜色值都会类似

在这里插入图片描述
也有一些研究,研究能够接受不同方向光线的传感器

针孔相机

拍出来的没有深度,都是锐利的,也就是没有景深

小孔成像中的 Focal Length 焦距

在小孔成像中,焦距是传感器距离透镜的距离

在这里插入图片描述
对于 h,一般定义的是 35mm 的胶片

所以一般使用焦距来定义 FOV

可能有人不遵守这个默认的 35mm 的 h 的约定

传感器 != 胶片

传感器相当于 frambuffer

胶片相当于输出的图片文件

Exposure

曝光:接收到光的能量,不能区分光来自的方向,随时间增长。

Exposure = time x irradiance

irradiance 的影响因素:

Aperture size: 光圈大小 用 F-Stop 衡量 FN F/N

Shutter speed: 快门速度

ISO gain: 感光度 后期处理,乘上某一个数

在这里插入图片描述
ISO 越大,乘的系数越大,噪声也等比放大,就更明显了

运动模糊

在快门打开的时候物体还在运动

相当于在不同的时间对物体进行了一个采样,和反走样比较像

以前在空间上多次采样,进行反走样

现在在时间上多次采样,这个运动模糊也可以达到反走样的效果

扭曲

在放下快门的时候,某一个物体的不同运动部分的速度不一样

而快门放下需要一定时间,传感器不同部分开始接受光线的时间不同

这么说的话……其实“传感器不同部分开始接受光线的时间不同”这是根本原因?这么说的话,一个匀速运动的物体也会发生这种扭曲

Ideal Thin Lens 理想薄透镜

有些透镜可能没有办法把光聚焦到一点

在这里插入图片描述
理想薄透镜 所有平行光经过透镜之后都会汇聚在焦点

使用棱镜组可以任意改变焦距

The Thin Lens Equation

在这里插入图片描述
焦距的倒数等于物距和像距的倒数之和

用相似三角形来推

Defocus Blur 离焦模糊

在这里插入图片描述

原本传感器应该在焦距的位置,得到精准的成像点

但是现在传感器不在,那么光线继续传播,得到的就是一个圆形的成像,叫作 circle of confusion

根据相似三角形得到数学关系

假设 zi zs 不变,那么 C 只与 A 有关

也就是说,你看到的东西模糊程度取决于光圈的大小

光圈的定义 焦距除以透镜的直径

Ray Tracing Ideal Thin Lenses

构建薄透镜场景

(1)选择感光器大小、焦点长度、光圈大小;

(2)选择需要清晰可见的物距z0;

(3)根据薄透镜公式,计算对应的相距z1;

渲染

(1)渲染目标为感光器上任一像素x’;

(2)在透镜上随机采样点x’';

(3)根据薄透镜特性,光线都将在物体焦平面点x’''汇聚;

(4)计算x’‘->x’''的radiance;

(5)最终显示在x’上的光为所有采样点计算的平均。

在这里插入图片描述
x’‘’ 竖直方向的位置的计算

https://games-cn.org/forums/topic/buchongyigeguangxianzhuizongtoujingdeyaodian/

取 x’ 与 x’‘’ 连线,这条连线穿过透镜中心,有一个相似三角形,用这个关系来算

为什么不管透镜上任何一点 x’’ 最终光线都会落到 x’‘’?因为都是从 x’ 出发的,而传感器上的点和物体上的点是一一对应的

这只是我直观的感受……

Depth of Field (FYI) 景深

可认为是:像距固定,单个像素显式不模糊的可浮动的物距长度

也就是在焦距附近一定范围内,认为 CoC 足够小,可以认为物体是清晰的

在这里插入图片描述

Lecture 20: Color and Perception

Light Field / Lumigraph 光场

人眼所见,可以使用函数P表示。

人眼的朝向用球坐标 θ , ϕ , λ \theta, \phi, \lambda θ,ϕ,λ 表示

时间用 t 表示

人眼的位置用 Vx Vy Vz 表示

整个世界 P ( θ , ϕ , λ , t , V x , V y , V z ) P(\theta, \phi, \lambda,t,V_x,V_y,V_z) P(θ,ϕ,λ,t,Vx,Vy,Vz) 表示

假设位置是二维,方向是二维,光场记录了从任意一个位置看向任意一个方向的信息,也就是四维的

不知道为什么要这么假设

那么这个时候,我不需要光场表示的是什么物体,我只需要知道光场就好了

那么光场相当于一个黑盒

光场也可以理解为两个平面,两个平面上的点一连线,就是入射光的方向

在这里插入图片描述

可以从 uv 上看 st,也可以从 st 看 uv

假设整个世界在 st 那一侧,那么从 uv 看 st 不同点,就相当于从一个位置看到了完整物体;从 st 看 uv 不同点,就相当于从不同角度看物体的某一处

在这里插入图片描述

Light Field Camera

记录了一定空间角内所有方向的光的信息。

苍蝇的复眼记录的就是光场信息

复眼上有一些微小的透镜,这些透镜能够将不同方向来的光分解到不同的点上,而不是平均

跟之前的摄像机的透镜的作用类似

这样,他记录的就是一个 radiance

在这里插入图片描述
每一个像素记录一个方向的信息

在这里插入图片描述
怎么获得某一个方向的信息

在每一个小传感器上从一点连到微透镜

在这里插入图片描述
等效的一个透镜的分辨率 = 微透镜的分辨率 * 光场能记录的角度,所以光场相机的分辨率变小了

光场相机也是一个精密的仪器,成本很高

光场记录的角度相当于微传感器和微透镜之间的角度,但是换成等效的一个透镜,能表示的角度肯定更大,这也是一个权衡

光的特性

The Visible Spectrum of Light 可见光

Spectral Power Distribution(SPD) 谱功率分布,可线性叠加

在这里插入图片描述

颜色是人的感知,与实际光的光谱分布不是直接相关

Biological Basis of Color

人眼是一个相机,成像成在视网膜上

视网膜上有感光细胞

一种叫做棒状体,感知光的强度,一种叫做锥形细胞,感知光的颜色

在这里插入图片描述
锥形细胞又被分为三类,S, M, L,对三种波长的响应不同

在这里插入图片描述

锥形细胞又被分为三类,S, M, L,对三种波长的响应不同

不同的人的感光细胞分布不一样

在这里插入图片描述

Tristimulus Theory of Color

光的响应函数与光的能谱分布 SPD 相乘做一个积分

在这里插入图片描述

三种不同的细胞可以感应出不同的颜色,最终形成感知到的颜色

人是看不到光谱,光谱被积分掉了

Metamerism

既然如此,有没有可能光谱不同,而是让人感受到的颜色相同

是可以的

加色 Additive Color

给定三种光谱,各自乘上一个数,混合

在这里插入图片描述
那我怎么知道这三个光谱混合出来的颜色是怎么样的?

于是就需要做实验,一边是单色光的激光,一边是三个光谱的激光

在这里插入图片描述
一开始混合出来的颜色与标准颜色不一致

在这里插入图片描述

通过调整三个系数,得到相同颜色

在这里插入图片描述

但是也可能有些颜色怎么混合也混合不出来

于是我们尝试在标准光那里再加上一些原色光谱,得到的就是相当于三原色的光谱的系数包含负数

在这里插入图片描述
因为我们是加色嘛,混合的三原色的系数从物理上都是正的,没办法减,所以我们给另外一边加上一个数就相当于这边减了一个数

我们用来测试的都是单色的激光,也就是波谱上只有一个波峰

在这里插入图片描述
这样我们就可以每次选择一条竖线,挨个画三原色混合得到某一波长的颜色所需要的比例

在这里插入图片描述
但是实际中对于任意一个我需要的光 s,他不一定是单色光,它是由多个波长组成的

那我对于这个 s 的每一个波长我都需要考虑相应的三原色的比例,又因为线性可加性,所以对于 s 的所有波长,相当于我就需要积分

在这里插入图片描述

Color Spaces

Standard Color Spaces(sRGB)

首先确定一个显示器的 RGB 标准

然后让其他颜色显示设备去模拟这个 RGB 标准,需要 calibration 校验

sRGB 的色域是被限制的

A Universal Color Space: CIE XYZ

之前我们用实验测出来了三原色在每一个波长上的混合比例

现在我们人为设定一套混合比例

因为 Y 比较均匀,所以 Y 一定程度上可以代表亮度

想要可视化我这一套人为的混合比例,我就先归一化,然后固定某一个数,剩下的两个数可以画在平面

在这里插入图片描述
可视化画出来的就是色域

可见,边界上的是纯色,中心的是混合的不纯的颜色

对 sRGB 也做同样的可视化,与 XYZ 相比,sRGB 能表示的颜色更少

在这里插入图片描述

Perceptually Organized Color Spaces

HSV

色调 选择某一个颜色

饱和度 颜色是否纯

亮度

CIELAB Space (AKA Lab*)

认为颜色空间的每一个轴的两端都是互补色

在这里插入图片描述
L 轴代表亮度

白色和黑色互补容易理解,但是黄色和蓝色互补,红色和绿色互补,有点难理解

这些都是实验测出来的

减色系统

CMYK 混合

CMY 可以得到 K

混合出来得到 K 很亏,所以还带上 K 墨水

其他

HDR,gamma 矫正,怎么造自己的颜色空间

Lecture 21: Animation

Historical Points in Animation

Keyframe Animation

关键帧 插值

Physical Simulation

Mass Spring System: Example of Modeling a Dynamic System

使用一个式子表示方向,还有值的大小

在这里插入图片描述
有一个问题是,这里会一直震荡

解决方法就是加入阻尼

如果直接对每一个物体的速度都加上阻尼,就会使整体系统的速度都减慢

在这里插入图片描述
解决方法就是只对相对速度加阻尼

在这里插入图片描述
相对速度与 a 到 b 之间向量也有关系

例如 b 绕着 a 圆周运动,这个运动速度不会引起阻尼,所以说径向速度不会引起阻尼,所以这里要让相对速度与 a 到 b 之间向量相乘

Structures from Springs

使用单纯的弹簧阻尼结构去模拟现实物体会有问题

在这里插入图片描述
例如我在对角线两点拉一块布,布不会伸长,但是用来模拟的弹簧阻尼结构会伸长,两侧收窄,也就是发生了切变

现实的布可以抵抗折叠,但是用来模拟的弹簧阻尼结构不能

为了解决第一个问题,在垂直于这个对角线的方向加一个弹簧

在这里插入图片描述

在发生切变的时候,就会压缩这个弹簧,就会有抵抗切变的力

但是这样加的话,就会由各向异性,沿着另外一个对角线拉伸的话就没有办法了

在这里插入图片描述
所以再在垂直于另一个对角线的方向加一个弹簧

到这里,第一个问题大致解决了,但是还是没有办法抵抗平面外的力

这里就可以沿用对角线上的思路,想要抵抗哪里的变形就在哪里加弹簧,那我想要抵抗平面变形,就在折叠的方向上加弹簧,也就是相邻位置的质点之间加弹簧,因为折叠的时候,主要是相邻位置的质点之间的互相接近

在这里插入图片描述
跳跃连接其实是比较弱的,强的是对角线之间的连接

其他模拟方法

FFM 有限元

粒子系统

可能需要一些加速结构,来在相交的时候法线最近的那个粒子

渲染流程:

创建粒子

每帧计算每个粒子的力

更新粒子的位置和速度

移出死亡的粒子

渲染粒子

需要的力

  1. 引力斥力

  2. 阻力

  3. 碰撞

    与静态物体,与角色

鸟群模拟

吸引

排斥

导航

在这里插入图片描述

Forward Kinematics

在这里插入图片描述
关节之间的连接,能够一维旋转的叫作 pin,能够二维旋转的叫作 ball,能够拉伸的叫作 Prismatic joint

只要知道旋转角,就能方便地算出位置

在这里插入图片描述

Inverse Kinematics

给出末端位置,求骨骼参数

更加复杂

在这里插入图片描述

而且给定一个尖端的位置,骨骼的形态的解不唯一

在这里插入图片描述
在这里插入图片描述
是一个典型的优化问题,使用梯度下降来解

Rigging

绑定

将骨骼绑定到模型

Motion Capture

Lecture 22:Animation (cont.)

Single particle simulation

假设知道速度场 v ( x , t ) v(x,t) v(x,t),那么在任何一点我就知道 d x d t \dfrac{\mathrm d x}{\mathrm d t} dtdx

为了求解 ODE,还需要一个起始点的 x 0 x_0 x0

Euler’s Method

在这里插入图片描述
稳定性不好

在这里插入图片描述
误差

准确性

不稳定性是最大的问题

Combating Instability

Some Methods to Combat Instability

  1. Midpoint method / Modified Euler 中点法/修改的欧拉方法

    平均起点和终点的值

  2. Adaptive step size 自适应步长

    比较一个步长和两个半步长,如此递归,直到误差可以接受

  3. Implicit methods 隐式方法

    使用下一个时间点的速度,迭代求解

  4. Position-based / Verlet integration 位置法

    限制下一个时刻的位置与速度

Midpoint Method

在这里插入图片描述
先用半个步长算中点速度,再用中点速度一个步长算下一个点的速度

平均起点和终点的速度

在这里插入图片描述
因为有二次项,所以更精准

Adaptive step size

比较一个步长和两个半步长,如此递归,直到误差可以接受

在这里插入图片描述

Implicit methods 隐式方法

使用下一个时间点的速度,迭代求解

在这里插入图片描述
用优化方法或者用求根公式来解

隐式方法比较稳定

怎么理解误差

在这里插入图片描述
把稳定性分为局部误差阶数和全局误差结束

隐式欧拉方法的局部误差阶数为二阶,全局误差阶数为一阶

龙格库塔方法

一类方法

RK4 四阶龙格库塔方法

在这里插入图片描述

Position-Based / Verlet Integration

在修改后的欧拉方法之后,约束位置,来防止发散

使用被约束的位置来计算速度

优点是计算快

缺点是不是基于物理的,会损失能量

Rigid Body Simulation

之前是 x 一点与 x

现在只是换成了向量

向量每一个值的物理意义如下

在这里插入图片描述

Fluid Simulation

A Simple Position-Based Method

假设水体由不可压缩的刚体小球组成

既然认为是不可压缩,那如果某一个地方的密度过大,就说明出现了错误,需要修正

需要知道某一点的密度对其他位置的小球的影响

想要某一个目标与某一个值相似,经典优化问题,梯度下降

拉格朗日法 欧拉法

欧拉法 网格法 考虑某一点属性

拉格朗日法 质点法 跟踪某一个质点

Material Point Method (MPM)

结合欧拉法和拉格朗日方法

拉格朗日法:粒子包含材料属性

欧拉法:使用网格做数值更新

具体方法:粒子将属性写到格子里,格子做数值更新,再把更新后的数值写回粒子

其他

其他渲染课程

软阴影,环境光照

预计算的光照

基于图像的渲染

风格化渲染

可交互的全局光照

实时光追,DLSS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值