0. 重要推导
- 点积、叉积
- 四元数
- Rodrigues公式
- ModeView矩阵,先R先T
- forward、up、left
- Projection矩阵
- Bling-Phong公式
- BRDF公式
- radiance & irradiance
1. 计算机图形学概述
- 光栅化渲染管线 & 光线追踪渲染管线
2. 向量和线性代数
-
向量点积,乘积是数量
几何意义:判断向量的接近程度;求夹角(判断同向反向);分解向量;投影相关;
-
向量叉积,乘积是向量,右手规则
几何意义:求垂直;判断向量or点在平面的哪一侧;
正交矩阵的逆和转置相同,旋转矩阵是正交矩阵
-
点积和叉积的矩阵表示
3. 变换(二维与三维)
齐次坐标:为了将平移引入变换矩阵,增加一个维度,(x, y, 1)表示点,(x, y, 0)表示向量
变换顺序影响结果,先旋转or先平移
绕固定点旋转:先平移到该点,旋转,再平移回来
4. 变换(模型、视图、投影)
-
旋转表示:旋转矩阵、欧拉角、轴角(Rodrigues公式推导)、四元数
-
View矩阵的三行分别代表三个轴的向量,可用于获取forward、up、left
投影矩阵,正交&透视
5. 光栅化(三角形的离散化)
fov/aspect和near/far/left/right/top/bottom转换
四边形or三角形网格?:渲染几乎都用三角形,四边形多用于某些算法处理
6. 光栅化(深度测试与抗锯齿)
采样的Artifacts:空间采样、下采样、时间采样
反走样技术:或先blur再采样、采样时卷积、选择靠近的,等等乱七八糟的方式
提高采样率:超采样技术,先超采样,再下采样
原理:高通滤波(增强边缘)、低通滤波(模糊边缘)
7. 着色(光照与基本着色模型)
画家算法:以物体为单位做预先排序(常在CPU上),存在排序冲突问题,比如threejs会对非透明物体和透明物体分别排序
zbuffer:硬件实现,根据管线中存的深度值
先画透明物体(由近到远画),再画不透明物体(由远到近画),画不透明物体时关闭深度写入(防止遮挡不透明物体)、保留深度测试(适当舍弃)
8. 着色(着色频率、图形管线、纹理映射)
Phong模型:diffuse漫反射、specular镜面反射、ambient环境光
着色单位:三角形、顶点、片段
-
(经典)渲染管线:
9. 着色(插值、高级纹理映射)
重心坐标,用于插值(坐标、颜色、法向等)
-
双线性插值(二维纹理)、三线性插值(三维纹理,或不同mipmap的二维纹理以增强连续性)
Mipmap,根据大小远近,使用不同尺寸的纹理
-
纹理的各项异性(Anisotropic):沿着纹理坐标轴采样,而非上下左右均匀
10. 几何(基本表示方法)
纹理的应用:环境光、全景图、球面光、存储法向和高度等非几何信息、噪声、烘焙、体数据等
几何的隐式表示:几何曲面函数、水平集函数、距离函数
几何的显示表示:多边形、三角形、点云、分形
11. 几何(曲线与曲面)
-
贝塞尔曲线:一阶、二阶、三阶,若干个等比例控制点的集合组成的曲线
贝塞尔曲面:由贝塞尔曲线移动得到
12. 几何(网格处理)、阴影图
几何处理:简化、细分、正规化
-
细分算法:Catmull-Clark Vertex Update Rules
简化算法:顶点合并,使新顶点和原有顶点的二次误差最小
阴影映射,用于生成硬阴影:1. 从光源画一次,得到深度图;2. 从相机画一次,得到rgb+深度;3. 反投影可见点和光源深度图比较,匹配则保留,不匹配则删除
13. 光线追踪(基本原理)
-
Ray Casting:一次光线,不反射
-
Ray Tracing:递归的多次反射
-
射线和球面求交,球面方程可被拓展到任意曲面
-
射线和三角型求交:先和面求交,再和判断交点是否在面内
14. 光线追踪(加速结构)
均匀的空间剖分:划分AABB包围盒网格,快速筛选空的区域,适合均匀分布的场景
-
不均匀的空间剖分:适合不均匀分布的场景
八叉树:在三个维度严格进行二分,一个物体可以被分在多个叶子节点
KD树:根据物体本身分布进行划分,一个物体只能存在于一个叶子节点中
BSP树:非AABB的KD树
-
包围盒层级(Bounding Volume Hierarchy (BVH))
-
空间剖分和物体剖分
15. 光线追踪(辐射度量学、渲染方程与全局光照)
-
相关变量
辐射强度(Radiant Intensity):单位立体角(三维radian 4π)发出的能量,用来衡量点光源
辐照度(Irradiance):单位面积射到表面点上的能量,用来衡量表面,和曲面与光线的夹角成比例
点光源从内向外球面的辐照度会衰减辐射(Radiance):单位光线的功率,用于衡量一条光线(发射、接受等各阶段通用)
辐照度无关方向,辐射仅考虑一个ray
-
一个点的反射情况:从一个光线方向ωi发出的辐射,即相当于单位面积接收到的能量,这个能量也就是反射到其它任意方向的辐射
-
(???)BRDF(双向反射分布函数),用来描述给定入射方向反射到给定出射方向的能量
-
(???)反射方程,求给定入射方向和出射方向的能量
-
(???)渲染方程,由反射方程加一项自身发射的光得到
渲染方程进行多次迭代(多次递归求解反射),得到更接近真实的渲染结果
16. 光线追踪(蒙特卡洛积分与路径追踪)
蒙特卡洛积分
-
理想的全局光照流程
-
路径追踪(仅考虑1条光线的全局光照),对一个像素点进行多次随机的路径追踪取平均以避免噪声,加入随机概率俄罗斯轮盘作为终止条件
-
最终版:区分直接来自光线的部分(无需递归),和来自反射的部分(需要递归),对来自光线的部分进行蒙特卡洛积分
17. 材质和外观
-
折射定律,n表示介质的折射率
微表面模型:考虑法向分布和光滑程度
测量BRDF参数:大致方向是基于尽可能多的光线方向进行拍摄采样,反向推测
18. 高级光线传播与复杂外观建模
有偏(biased)和无偏(unbiased):数学期望是否与真实一致;一致与非一致:是否随着样本增多而收敛
-
BDPT:适合光源侧反射情况复杂的场景,缺点是实现复杂,有性能问题,无偏
-
MLT (Metropolis Light Transport):在采样点之间使用概率密度函数做跳跃,无偏但不一致,通常用于复杂光效和动画之类的效果
-
Photon Mapping (光子映射):适合SDS光路或散焦,有偏差但一致
-
VCM (Vertex Connection and Merging):BDPT和Photon Mapping的结合,不舍弃被遮挡的光路,对被遮挡的点进行合并
Instant Radiosity (IR, 有时又叫many-light approaches): 将反光表面作为光源,发射子光路到表面即可,较快,不适合光滑表面,易出现局部峰值
-
非表面模型 - 参与介质:云雾等,用辐射传输方程来描述(可理解为一种特殊的体绘制方法)
头发渲染:可基于面片或引导线建模,有一些常用的渲染模型(Kajiya-Kay Model,Marschner Model,Scheuermann Model等)
颗粒材质:避免对所有颗粒本身建模,通过对整体到局部不同层级进行建模来处理
次表面模型:在表面内部进行折射反射的效果(光学属性)不一致,光线的出射位置和入射位置不一样,引入BSSRDF进行快速近似计算,将入射点和出射点用距离函数模拟,近似BRDF
布料:普通表面模型、次表面模型、显式的没一根纤维等多种方式渲染
-
细节模型:微表面BRDF,增加真实的法向分布函数
程序化外观:在运行时通过定义的(噪声)函数生成纹理
19. 相机与透镜
针孔模型和透镜:针孔直径只允许一个光线通过最清晰,针孔直径无限大最模糊,为了使同一个物体(距离)显示的最清楚,引入透镜
-
fov和焦距:相同传感器尺寸,焦距越大,fov越小,画面中的物体相对越大
-
曝光三要素:快门、光圈、ISO
透镜:平行光相交于一点(焦点);过焦点的光都平行;焦距可变;
-
高斯透镜等式:透镜基本属性+相似原理
-
弥散圆(Circle of Confusion):相似原理计算,与光圈大小相关
-
透镜的渲染实现:对每个像素点,随机采样透镜上的点,对光线进行追踪或走管线
-
景深:能清晰成像的距离范围,大光圈小景深,小光圈大景深
距离合焦平面越近的平面,产生的弥散圆越大,反之越小,合焦平面上的点恰好为一个点
弥散圆小于传感器精度的前后脚平面距离,就是景深,可根据相似原理计算:
20. 光场、颜色与感知
-
全光函数(Plenoptic Function): 用极坐标、波长、时间、空间坐标7个参数表示一个场景的函数
光场(Light Field / Lumigraph):任何位置向任何方向产生的光的信息,是全光函数的子集,位置和方向可以用三维表示,也可以用二维表示(贴图映射)
-
光场的参数化:1. 用包围盒上的点来取代物体真实几何表面的点;2. 用一个平面加方向来参数化;3. 用两个平面来参数化(uv/st坐标,类似两点定义直线的思路)
-
光场相机:每个“像素”记录通过透镜的全部光线值,即一个光场,可以恢复不同视角,不同焦平面的二维图像
光谱图:横轴为波长的分布图(连续的直方图)
颜色空间:RGB / sRGB
-
色域:在二维空间可视化颜色,两个轴是两个通道的值,显示为颜色结果,靠边界是纯色,内部为混合颜色;不同颜色空间在色域图中的区域不一样
21. 动画与模拟(基本概念、质点弹簧系统、运动学)
关键帧动画:确定关键帧的参数,插值中间参数
-
质点弹簧系统:胡可定律向量版
质点弹簧系统内部阻力(摩擦力)
-
质点弹簧系统模拟布料(简化例子)
-
运动学:用参数随时间变化来表示任意点的运动,易于实现,难于建模
逆运动学:用点的位置求解系统的参数,易于建模,难于实现,有多解或无解,通常依赖优化方法求解
Rigging、Blend Shape、Motion Capture(动捕):骨骼驱动、关键点驱动顶点、现实关键点捕捉和驱动
22. 动画与模拟(求解常微分方程,刚体与流体)
-
求解常微分方程,以速度场中的粒子运动为例:欧拉法、中点欧拉法、自适应步长、隐式法、基于点的方法,可直接用于刚体模拟
-
流体模拟:质点法(拉格朗日法)、网格法(欧拉法)