自学(4):图形学与生成模型
大二下学期的自学笔记,由图形学、体系结构、随机过程和生成模型组成。

一、GAMES 101
1. 变换
- $\vec{a}\times \vec{b}=A*\vec{b}=\begin{bmatrix}0 & -a_z & a_y\\a_z & 0 & -a_x\\-a_y & a_x & 0\end{bmatrix}\vec{b}$,用于判断左右、内外
- 仿射坐标:点 $(x,y,z,1)$,向量 $(x,y,z,0)$
- 交比:直线上四点 $A,B,C,D$,$(A,B;C,D)=\frac{\vec{AC}/\vec{CB}}{\vec{AD}/\vec{DB}}$,射影变换前后保持不变
- 欧拉角:绕 $x,y,z$ 轴旋转 $\alpha,\beta,\gamma$ 角,$R=R_z(\gamma)R_y(\beta)R_x(\alpha)$
- 绕 $\vec{n}$ 轴旋转 $\alpha$ 角:$R(\vec{n},\alpha)=\cos\alpha I+(1-\cos\alpha)\vec{n}\vec{n}^T+\sin\alpha \begin{bmatrix}0 & -n_z & n_y\\n_z & 0 & -n_x\\-n_y & n_x & 0\end{bmatrix}$
- 视角变换:把摄像机移动到原点,$y$ 轴向上,看向 $-z$
- 正交投影:把长方体变换到 $[-1,1]^3$
- 透视投影:把视锥压缩成长方体再正交投影,前平面不变,后平面压缩且中心点不变
2. 几何
- 隐式表示:$f(x,y,z)=0$、几何体加减、距离函数(可用于插值)、水平集
- 显示表示:$(u,v)\to (x,y,z)$、点云、多边形网格
- 贝塞尔曲线:三阶 $b_0^3(t)=(1-t)^3 b_0+3(1-t)^2tb_1+3(1-t)t^2b_2+t^3b_3$,为保证 $\mathbb{C}^1$ 连续需连接点处平分控制点
- 贝塞尔曲面:16 个控制点,先沿 $u$ 求四条曲线,再对每个 $v$ 以四条曲线为控制点
- 曲面细分:Loop 细分(三角形加三个中点,一拆四)、Catmull-Clark 细分(加边中点、面中心)
- 曲面简化:边收缩,使用二次度量误差建优先队列,贪心收缩
3. 摄影
- 视场:传感器大小、焦距,等效焦距为 35mm 传感器时
- 曝光:光圈直径、快门时间、ISO 倍数
- 景深:对焦距离附近的清晰区间,焦距越长、光圈越大、对焦距离越近景深越浅
- 光场:前后平面共四维,同物体不同角度、同角度不同物体
- 光场相机:微透镜阵列,每一角度对应普通相机一张图,可后期调整焦距、光圈等
- 颜色:光谱与视锥细胞响应函数乘积,有同色异谱
- 加色系统:sRGB(用三纯色调出纯频率,再调出光谱)、XYZ(人为定义,Y 代表亮度)、HSV(色调、饱和度、明度)、Lab(亮度、绿红轴、蓝黄轴,互补色原理)
- 色彩空间:XYZ,固定 Y,$(x,y,z)=\frac{(X,Y,Z)}{X+Y+Z}$,$sRGB$ 为三角形
- 减色系统:CMYK(品红黄青黑,印刷用)
4. 光栅化
- 三角形:判断像素中心是否在内部,可用先模糊或多重采样(MSAA)反走样
- 反走样原理:采样等于时域上乘积等于频域上卷积(重复),高低频信号混叠,模糊等于低通滤波
- 深度缓冲:逐像素记录最近深度
- 着色模型:Blinn-Phong,环境光常数、漫反射(系数、平方反比、余弦)、高光(系数、平方反比、半程向量余弦幂)
- 着色频率:逐平面、平面内插值顶点着色、平面内插值顶点法线
- 插值方法:重心坐标(用三顶点坐标表示平面内点)、双线性(先 u 再 v,解决纹理过小)、Mipmap(预先计算指数级不同分辨率纹理,解决纹理过大),各向异性过滤(存长方形纹理)
- 渲染管线:几何 $\to$ 纹理 $\to$ 着色 $\to$ 变换 $\to$ 光栅化
- 高级纹理:环境光贴图、法线贴图、位移贴图
- 阴影贴图:从光源视角渲染深度图,像素在深度图中对应位置深度小于等于该值则有光照
5. 光线追踪
- 传统方法:从视角发射光线,每次与场景相交时计算着色和反射折射,着色递归相加
- 求交:$f(\vec{o}+t\vec{d})=0$,三角形先计算平面交点再判断内外或直接套公式
- 加速结构:轴对齐包围盒、均匀网格、空间切分(KD 树、层次包围体)
- 辐射度量学:立体角(单位球上的面积)、Irradiance(单位面积上接收的功率)、Radiance(单位面积单位立体角上接收的功率)
- 渲染方程:$L_o(p,\omega_o)=L_e(p,\omega_o)+\int_{\Omega^+} f_r(p,\omega_i,\omega_o)L_i(p,\omega_i)(\vec{n}\cdot \omega_i)\mathrm{d}\omega_i$
- 蒙特卡洛积分:$\int_a^b f(x)\mathrm{d}x\approx \frac{b-a}{N}\sum_{i=1}^N f(x_i)$
- 路径追踪:对不遮挡光源换元到光源上积分,对物体只取一根光线递归(以概率继续)
- 改进:双向路径追踪、Markov 链采样、次表面散射(不在原地出射)
- 微表面材质:法线分布函数、菲涅尔项(反射率,与入射角正相关)、微遮挡项
6. 动画
- 基本方法:关键帧插值、物理模拟(质量弹簧、有限元、质点系统、逆运动学)、动捕
- 质量弹簧系统:弹力、阻尼(相对速度在连线上的投影),可模拟布料(对角网格加跳连)
- ODE 求解:欧拉法 $x^{t+\delta t}=x^t+\dot{x}^t\delta t$,中点法 $x^{t+\delta t}=x^t+\dot{x}_{\mathrm{mid}}\delta t$,隐式欧拉法 $x^{t+\delta t}=x^t+\dot{x}^{t+\delta t}\delta t$(逆向优化求解),四阶 Runge-Kutta 法
- 流体模拟:质点位置基方法,分质点法(拉格朗日)、格点法(欧拉)、物质点法(混合)
二、CSAPP 后半部分
1. 链接
- 编译过程:.c $\to$ 预处理 $\to$ .i $\to$ 编译 $\to$ .s $\to$ 汇编 $\to$ .o $\to$ 链接 $\to$ .exe
- 可重定位目标文件 .o:代码 .text,数据 .rodata/.data/.bss(只读/已初始化/未初始化),符号表 .symtab,重定位表 .rel.text/.rel.data
- 库:静态库 .a(多个 .o 文件打包,链接时提取需要的 .o 文件)、动态库 .so/.dll(链接时记录库名和符号表,运行时加载)
- 链接过程:符号解析确定所需 .o 再合并,重定位引用地址
2. 异常控制流
- 异常:中断(异步 I/O)、陷阱(系统调用)、故障(可恢复错误)、终止(不可恢复错误)
- 进程:虚拟内存空间(代码、数据、栈)、寄存器、文件描述符表
- 信号:类似异常,接收后内核将控制流转移到信号处理程序再返回
3. 虚拟内存
- 正常流程:MMU 接收虚拟地址向内存中页表请求查询物理页号,再将物理页号和虚拟页偏移量组合成物理地址向内存请求访问
- 缺页:MMU 发现物理页号首位无效(地址指向初始磁盘位置),触发缺页异常将磁盘复制到内存,更新页表后重试访问
- 加速:TLB 页表缓存、多级页表、和高速缓存联用
4. 系统级 I/O
- 共享文件:描述符表进程独立,打开文件表和 v-node 表进程共享
- 打开同一文件两次:描述符表中两条,指向打开文件表中不同条,指向同一 v-node 表条
- 父子进程:复制描述符表,对应条指向同一打开文件表条,指向同一 v-node 表条
- 重定向:将描述符表条重新指向其他打开文件表条(可用于 stdin/out/err)
5. 网络编程
- 端口:客户端由内核自动分配临时端口,服务器为固定端口,服务器内核监听到端口请求后将控制流转移到对应程序
- URL:通用资源定位符,用于静态内容在服务器磁盘上查找
- CGI :通用网关接口,用于动态内容传递运行参数,用?分隔文件名和参数,用&分隔参数
6. 并发编程
- 并发方式:进程式(遇请求后 fork)、事件式(遇请求后转移控制流)、多线程
- 线程:栈(同一虚拟内存空间的不同区间)、寄存器,共享虚拟内存空间、文件描述符
- 信号量:P(减一,阻塞直到非负)、V(加一,唤醒一个等待线程),用于互斥锁
- 死锁:等待永远不为真的条件,如 PV 顺序不一致导致的禁止区域左下角
三、随机过程
1. 离散时间 Markov 链
- 停时:事件发生与否仅和历史状态有关
- 周期:所有 $p^n(x,x)>0$ 的 $n$ 的最大公约数,1 为非周期
- 正常返:$P_x(T_x<\infty)=1,E_x(T_x)<\infty$,否则为零常返
- 平稳分布:$\pi_y=\frac{1}{E_y(T_y)}$,需要存在正常返状态(无限不一定)
- 细致平衡:$\pi_x p(x,y) = \pi_y p(y,x)$(两两平衡,强于平稳分布)
- 循环把戏:$\mu_x(y)=\sum_{n=0}^\infty P_x(X_n=y,T_x>n)$ 为平稳测度
- 双吸收态概率:$h(a)=1,h(b)=0,h(x)=\sum_y p(x,y)h(y)=P_x(T_a<T_b)$
- 吸收时间:$E_x(T_A)=1+\sum_{y\notin A} p(x,y)E_y(T_A)$
2. 鞅与生灭过程
3. 连续时间 Markov 链
4. 随机分析
四、微分几何
五、博弈论
- 自身的策略要最大化对方的策略可能带来的最小收益
- 鞍点:每个参与者的策略在给定其他参与者策略的情况下都是最优的(纯策略纳什均衡)
- 混合策略:最大化对方选择每一个纯策略所带来的最小期望收益
- 最大最小值定理:零和博弈两个混合策略线性规划互为对偶,最优值相等(对偶定理)
- 非常和博弈:纳什均衡存在定理(纯策略或混合策略),但不一定是帕累托最优
六、生成模型
自学(4):图形学与生成模型
https://sqzr2319.github.io/CSDIY/CSDIY-4/