- 博客基于GAMES101-现代计算机图形学入门-闫令琪,但不是其完整笔记,基于复习要求有一定的删减。
- 考试以图形学入门基本概念和核心研究内容为主,少量公式。即以论述概念为主,涉及少量算法。
p13:3:12
是对应的games101视频节点。
文章目录
- 📚光线追踪
- 🐇为什么要光线追踪
- 🐇光线追踪的几个假设
- 🐇光线追踪
- 🥕递归光线追踪过程
- 🥕光线追踪加速——AABB包围盒
- 🥕空间划分的分类
- 🥕层次包围盒(BVH)
- 🐇辐射度量学
- 🥕Radiant Energy
- 🥕立体角
- 🐇反向反射分布函数(BRDF)
- 🐇渲染方程
- 📚材质与外观(BRDF)
- 🐇全反射
- 🐇菲涅尔项
- 🐇各向同性/各向异性材质
- 📚高级图像渲染概要
- 🐇高级光线传播
- 🥕双向路径追踪(BDPT)
- 🥕Metropoils光线传播(MLT)
- 🐇材质建模
- 🥕表面模型——次表面散射(BSSSRDF)
- 📚照相机、镜头和光场
- 🐇曝光
- 🐇景深
- 🐇光场
- 📚颜色与感知
- 📚模拟与动画
- 🐇关键帧动画
- 🐇物理模拟
- 🥕质点弹簧系统
- 🥕粒子系统
- 🐇运动学
- 🥕正向运动学
- 🥕逆向运动学
- 🥕骨骼绑定
📚光线追踪
🐇为什么要光线追踪
p13:3:12
⭕️光栅化难以将一下的效果做好:
- 软阴影
- 毛玻璃材质的反射
- 间接光照
⭕️光栅化虽然较快,但是质量较低
🐇光线追踪的几个假设
这些也是之后会提到的BRDF基本假设
- 光沿直线传播(显然这是错的)
- 光线与光线之间不会发生碰撞(显然这是错的)
- 光线是从光源不断传播直到视椎体的(光线的可逆性)
🐇光线追踪
🥕递归光线追踪过程
p13:23:18
- 光线不仅仅只会反射,还会折射,然后再与其他物体进行反射
- 光线每次反射折射都会有能量损耗,不然经过无限次的累加只会变成白色
- 递归过程需要设置一个最大次数
- 两次反射和折射情况如下图可见:
🥕光线追踪加速——AABB包围盒
基本概念,
p13:56:22
,关于包围盒:
- 针对一个复杂的物体,用一个简单的图形把它框起来
- 如果一个光线连包围盒也碰不到,就更不可能碰到物体了
- 特殊的包围盒定义:三对面的交集形成的立方体,三对面分别与xyz轴平行
- 使用包围盒包围与光一定轴对齐,减少了计算量
⭕️判定光线与包围盒的交点
🔔对于二维的包围盒:
- 先判断与x这对面与光线相交(进和出)的时间tmin、tmax
- 再判断y与光线的相交时间
- 取交集(求出tmin的最大值,tmax的最小值)
- If t e n t e r < t e x i t t_{enter} < t_{exit} tenter<texit, we know the ray stays a while in the box
🔔三维与二维类似:
- 增加了一对平面,判断三对面的相交时间tmin,tmax
- 取交集(求出tmin的最大值,tmax的最小值)
- If t e n t e r < t e x i t t_{enter} < t_{exit} tenter<texit, we know the ray stays a while in the box
🔔几种负值的情况的处理
- t m a x < 0 tmax<0 tmax<0,说明包围盒在光线背面(无交点)
- t m a x > = 0 tmax>=0 tmax>=0且 t m i n < 0 tmin<0 tmin<0则说明光源在包围盒中(有交点)
AABB有交点当且仅当 t m i n < t m a x tmin<tmax tmin<tmax且 t m a x > = 0 tmax>=0 tmax>=0
🥕空间划分的分类
普通的网格划分对物体分布不均匀的场景中不友好(即使这样的网络也很常见),因此引入空间划分来切割网格。
p14:17:47
⭕️八叉树(Oct-tree)
- 八叉树是在每个子树下面画十子,划分为四块(在二维下是分为四块,三维是八块)
- 由于是均匀划分,会出现将同一个物体划分为两块的问题。
⭕️KD树(KD-Tree)
- 每次划分只划分为两块(类似二叉树)
- 在二维中第一次为水平的划分,第二次为竖直的,然后循环划分
- 在三维中类似,以xyz轴顺序进行划分,这样可以保证划分比较均匀
- 我们在AABB中主要使用KD树(曾经)
🔔KD树的划分
KD树:难以判断物体与包围盒边界的相交问题;一个物体容易同时穿过多个包围盒被重复计算影响性能
⭕️BSP树(BSP-Tree)
- 划分与KD树类似
- 由于划分不是横平竖直的不能用于AABB的划分
🥕层次包围盒(BVH)
过程+特点,
p14:38:38
⭕️BVH的特点:
- BVH的思想更像分组,只需将三角形**(物体)进行分组**(因此一个物体只可能出现在一个包围盒内)并对三角形(物体)较多的组进行递归分组
- 每次的划分都选择XYZ中最长的轴进行划分,这样保证划分的大小比较平均
- 总是选择中间的三角形进行划分,这样划分出来树更加接近平衡二叉树
- 划分到一个比较小的数量后停止划分(比如5个三角形)
⭕️BVH伪代码
Intersect(Ray ray,BVH node)
{if(ray misses node.bbox)return;//如果与节点光线都不相交就返回if(node is a leaf node){//如果相交且只是一个叶子节点test intersection with all objs;//将节点内三角形都做判断return closest intersection;//返回最近的那个}hit1=Intersect(ray, node.child1);//递归。如果不是叶子节点则递归找到最近的那个hit2=Intersect(ray, node.child2);//另一边return the closer of hit1,hit2;
}
🐇辐射度量学
之前提到的着色、光线追踪体系其实并不够真实,引入辐射度量学,定义了相关属性来描述光照
🥕Radiant Energy
p14:1:03:50
🥕立体角
p14:1:12:25
🐇反向反射分布函数(BRDF)
p15:29:14
- BRDF定义了某个点接收到能量后反射能量与反射光的比例,表示指示方向的反射光和入射光的比例关系。
- BRDF描述了光线从某个方向入射到物体表面上的一个微元面积上,从该方向反射到另一个方向的光线强度分布情况。
- 材质的不同决定BRDF方程的不同。
🐇渲染方程
定义,渲染方程组成部分,
p15:41:47
- 渲染方程由两部分组成,自发光 L e L_e Le和反射光
- 其中反射光可以由光源直射也可以由其他的物体反射
- 在反射方程的基础上加入自发光,定义了渲染方程
- 渲染方程定义了所有的光线传播规律
⭕️借助BRDF可以定义出反射方程,即在某个方向接受到的所有的反射光线
⭕️渲染方程
📚材质与外观(BRDF)
材质由BRDF决定,或者说材质就是BRDF
🐇全反射
p17:29:44
🐇菲涅尔项
p17:35:22
- 当入射角与物体相互垂直的时候,反射会更加明显
- 菲涅尔项对绝缘体会更加明显(下图1),对导体来说并不明显(下2图),因为导体的折射率是负数。
⭕️公式
- 上面的公式是准确的,但是计算十分复杂,需要考虑极化。
- 下面的公式是一个近似解,图形学中广泛使用。
🐇各向同性/各向异性材质
p17:59:24
- 各向同性(Isotropic)材质是指在各个方向上具有相同的物理性质和光学性质的材质。这意味着无论从哪个方向观察或照射,该材质的属性都是均匀的。(理想的漫反射表面)
- 各向异性(Anisotropic)材质是指在不同方向上具有不同的物理性质和光学性质的材质。这意味着该材质在不同方向上对光的反射、折射或散射会有不同的行为。(金属材质通常是各向异性的)
📚高级图像渲染概要
🐇高级光线传播
🥕双向路径追踪(BDPT)
p18:7:05
- 思想:从光源和相机各打出一条光线,然后连接端点。
- 应用场景:在光源由漫反射形成的场景中效果较好。
🥕Metropoils光线传播(MLT)
p18:11:03
- 思想:使用了马尔科夫链和蒙特卡洛算法,通过一定的概率扰动路径的传播,得到一条新的路径,有一条路径追踪为种子生成其他的路径。
- 应用场景:在复杂场景中的光线追踪。
- 缺点:难以估计渲染完成画面的时间,局部的结果可能会比较“脏”
🐇材质建模
🥕表面模型——次表面散射(BSSSRDF)
p18:1:00:30
- 光线通过材质内部发生了散射,比如皮肤、玉石、水母等。
- BSSRDF是BRDF的延伸
- 让物体内外各有一个光源来模拟光的扩散,简单说就是能让光透出来
📚照相机、镜头和光场
🐇曝光
p19:21:47
Exposure = time*irradiance
,曝光 = 时间*辐射度
- 时间由快门控制,irradiance由光圈的大小和焦距控制
- 对于机械快门,如果拍摄高速物体会产生运动扭曲的现象。
- 光圈的大小控制单位时间内的进光量,光圈可以制造景深,通过F数 (F/N)来描述光圈的大小,F数是焦距/光圈直径 (N=f/D),F数越大光圈越小。
- 光圈越大,快门速度慢,曝光时间长,光在感光器上停留时间长,会产生运动模糊的现象
- 光圈越大景深越明显
- 当相机设置较大的光圈以获得浅景深时,快门速度较快,可能无法捕捉到物体的运动轨迹,从而无法产生运动模糊效果。相反,当相机设置较小的光圈以获得深景深时,快门速度较慢,可能会捕捉到物体的运动轨迹,导致运动模糊。因此
运动模糊和景深无法同时出现
。
- ISO是一个后期的处理值,通过乘上ISO来改变整体的明暗
- ISO也可以在硬件上进行改变,比如改变感光器的灵敏度
- lSO过大会产生噪声,因此一般不直接大范围调整ISO来提高亮度
- 通过很长的曝光时间应用于延时摄影上。
🐇景深
p19:1:09:13
- 场景中的光经过滤镜,打到成像平面,在成像平面附近的某个区域,这个区域内CoC都是足够小的。
- 当CoC足够小,我们就认为这个地方是清晰的,而这一区域就被我们称为景深(DOF)
- 景深外的模糊的范围会因光圈大小而变化
- 计算公式:
🐇光场
基本概念,
p20:13:30
📚颜色与感知
-
可见光的范围:图形学仅关心光谱中的可见光(400-700nm)
-
HSV:通过色调(H)、饱和度(S)、明度(V)来定义颜色空间的一种颜色标准。
-
CMYK:减色系统,由靛蓝、品红、黄色三种颜色混合出其他颜色再加上黑色组成,广泛应用于印刷。
📚模拟与动画
🐇关键帧动画
- 最早是由最厉害的原画画出关键帧,其他助手画出之间的查值(渐变帧)
- 现在通过插值补充两个动画中的查值
- 线性插值一般过渡不那么自然
- 使用平滑插值技术
🐇物理模拟
🥕质点弹簧系统
p21:28:24
简单定义:一系列相互连接的质点和弹簧
⭕️理想弹簧
⭕️非零长弹簧
⭕️加入阻尼力
⭕️完善的阻尼力
🥕粒子系统
基本概念,
p21:48:40
⭕️粒子生成步骤
- 生成粒子
- 计算每个粒子的力 (难点)
- 更新每个粒子的位置速度
- 将死亡的粒子移除
- 渲染
⭕️粒子之间的作用力
- 引力与斥力:重力、电磁力
- 阻尼力:摩擦、空气阻力、粘度
- 碰撞:墙壁、容器、物体
⭕️应用:通过指定规则让粒子表现群体的个体之间的关系
🐇运动学
不考察公式,都是关注概念,
p21:1:00:47
🥕正向运动学
⭕️关节类型:
- 可以绕着关节2维的旋转
- 可以绕着关节3维的旋转
- 可以拉长一部分的关节
⭕️我们可以通过参数很容易计算出p点的坐标,通过改变参数来实现骨骼的动画就被称为正向运动学
🥕逆向运动学
正向运动学不够直观
⭕️通过直观的控制尖端p点来直接控制参数
🥕骨骼绑定
- 在模型上增加控制点,让人们能够方便的调整模型的动作
- 对于同一个模型的两个动作,通过控制点间的位置插值计算来完成,这被称为:Blend Shape