Games101总结
Games101总结
时隔两年,当初的很多东西都快遗失了,简单做一个笔记备份,彻底和本科阶段的学习做个告别
记录从前对图形学的热枕
01 - 101
光栅化,几何,光线追踪,动画(模拟)
相关学科
- 线性代数,微积分,统计
- 光学,力学
- 信号处理,数值分析
- 美学
线性代数
向量点乘
向量叉乘:右手螺旋定则,例子:已知两轴确定坐标轴,判定左右内外
x×y=z
右手坐标系,a×a=0
(0向量)
矩阵
矩阵*向量 变换
转置,逆,单位矩阵,伴随矩阵,向量乘法转矩阵形式(点乘和叉乘)
Games101-Transformation
提纲
- Modeling
- Viewing
scale缩放
$$
\left[
\begin{matrix}
x’ \
y’
\end{matrix}
\right]
\left[
\begin{matrix}
s_x & 0 \
0 & s_y
\end{matrix}
\right]
\left[
\begin{matrix}
x \
y
\end{matrix}
\right]
$$
scale matrix
$$
\left[
\begin{matrix}
s_x & 0 \
0 & s_y
\end{matrix}
\right]
$$
shear错切
rotate旋转
$$
\left[
\begin{matrix}
x’ \
y’
\end{matrix}
\right]
\left[
\begin{matrix}
a & b \
c & d
\end{matrix}
\right]
\left[
\begin{matrix}
x \
y
\end{matrix}
\right]
$$
平移
不是线性变换
齐次坐标
$$
point=(x,y,1)^T
\
vector=(x,y,0)
$$
向量平移不变性
- 逆变换:逆矩阵
- 变换的顺序很重要,矩阵乘法的顺序不满足交换律
- 多个变换,矩阵往左附加,n个变换矩阵可以合成一个矩阵以表示一个复杂变换
- 变换分解,
3D Transformations
$$
point=(x,y,z,1)^T
\
vector=(x,y,z,0)
\
$$
前置知识
正交矩阵
$$
A^T = A^{-1}
$$
旋转矩阵满足等式 $ R_{-θ}=R_θ^T=R_θ^{-1} $
3D Transformation
对二维矩阵扩展,加入 z 轴(或理解成加入一个维度),例子如下
Scale Matrix:$\left[\begin{matrix}S_x & 0 & 0 & 0 \0&S_y&0&0\0&0&S_z&0\0&0&0&1\ \end{matrix}\right]$
Translation:$\left[\begin{matrix}1&0&0&t_x\0&1&0&t_y\0&0&1&t_z\0&0&0&1\ \end{matrix}\right]$
3D Rotation
- 绕轴旋转
$$\left[\begin{matrix}1&0&0&0\0&cosθ&-sinθ&0\0&sinθ&cosθ&0\0&0&0&1\ \end{matrix}\right]$$
$$\left[\begin{matrix}cosθ&0&sinθ&0\0&1&0&0\-sinθ&0&cosθ&0\0&0&0&1\ \end{matrix}\right]$$
$$\left[\begin{matrix}cosθ&-sinθ&0&0\sinθ&cosθ&0&0\0&0&1&0\0&0&0&1\ \end{matrix}\right]$$
对任何3D旋转:$R_{xyz}(\alpha,\beta,\gamma)=R_x(\alpha)R_y(\beta)R_z(\gamma)$
MVP变换
- modeling
- viewing
- projection
Viewing Transformation
-
3个参数 $\vec e$
固定相机位置
任意位置相机移动至**原点 (0,0,0),方向朝-z
**方向,角度对 Y 轴
先平移$\left[\begin{matrix}1&0&0&-X_e\0&1&0&-Y_e\0&0&1&-Z_e\0&0&0&1\ \end{matrix}\right]$
再旋转(旋转矩阵如何表示?)
- 当前位置直接求矩阵很困难
- 利用旋转矩阵的正交性
- 求出坐标系到的当前旋转角度的旋转矩阵M
- $M^{-1}=M^T$
Projection Transformation
立方体:[l,r]*[b,t]*[f,n]
(左右,上下,前后,对相机来说n > f)
正交变换(Orthographic Transformation)
投影到$[-1,1]^3$范围内,本质是将任意位置的物体,表示在固定距离角度的空间或平面上
通过平移+放缩实现,立方体为例
- 几何中心移动至原点
- 放缩至$[-1,1]^3$
$M_{ortho}=\left[\begin{matrix}\frac{2}{r-l}&0&0&0\0&\frac{2}{t-b}&0&0\0&0&\frac{2}{n-f}&0\0&0&0&1\ \end{matrix}\right]\left[\begin{matrix}1&0&0&-\frac{l+r}{2}\0&1&0&-\frac{b+t}{2}\0&0&1&-\frac{n+f}{2}\0&0&0&1\ \end{matrix}\right]$
- 注意
n-f
透视变换(Perspective Transformation)
···
shadows,光栅化补充
阴影映射 | 阴影图
shadow mapping
不在阴影里的点:相机能看到,光源也能看到
在阴影里的点:只有相机能看到
只讨论点光源
硬阴影:阴影边缘非常锐利,点光源
- 从光源看向场景,记录看到的任何点的深度
- 从相机看向场景,同上,然后投影回光源,判断是否能同时被看到
软阴影:边缘逐渐消失,光源有一定的大小
Games101 Geometry
纹理续
现代GPU中,纹理=内存+范围查询(滤波),即可以理解为一块数据
环境光(Environmental Lighting)
可以用纹理描述环境光,并拿去渲染表示环境光的效果
但是现实中随着人的走动光照位置会发生变化,所以上述方式是不考虑深度信息的近似方法
Spherical Environmental Map
将环境光记录在球体中,再展开
扭曲问题:参考世界地图
Cube Map
将球之于一个立方体中,从球心向外做投影,得到6张图,解决扭曲
凹凸贴图
纹理定义法线方向的相对高度
在不改变几何信息的情况下,可以通过复杂的纹理来表示复杂的结构
相对高度变化-法线变化-着色变化,产生明暗变化
由于没有改变几何,所以物体边缘会暴露(很光滑)
位移贴图
真的移动顶点位置,
描述几何体的三角形要足够多
3D贴图
定义三维空间中的一个任意点
通过噪声函数生成空间中任意点的数据
3D纹理和体积渲染
医学
Geometry
隐式,显式
隐式表示:
方程,难看出表示什么,但可以方便的判断是否在表面上
显式:直接或参数映射
参数映射,二维映射到三维
CSG(Constructive Solid Geometry)
通过基本几何体的变换,布尔计算,得到复杂几何体
Distance Function
代替布尔运算,通常使用距离函数使表面融合
空间中的任意一点到物体表面的任意一点的最小距离?(理解不能)
蜗牛,蘑菇,瓢虫等等都可以用距离函数表示,没有几何形体,一种隐式表示
分离物体:距离函数为0的就是物体表面(水平集level sets)
分形Fractals
渲染时会引起强烈的走样,因为变化频率太高
相机,透镜,光场
针孔摄像机:无法记录深度信息,任意位置都是锐利的,没有虚化
视场(FOV):成像面的长度h和透镜的距离f
$$
FOV=2arctan(\frac{h}{2f})
$$
市场上焦距和FOV参数以35mm大小的胶片为标准
Exposure曝光度
H=T*E,T由快门控制,E由光圈大小,ISO增益等决定
time*irradiance
ISO不但增强了有效信息还放大了噪声信息
lens
假设对于一个透镜,其焦距可以任意修改
$$
物距:z_o \
像距:z_i\
\frac{1}{f}=\frac{1}{z_i}+\frac{1}{z_o}
$$
Circle of Confusion(CoC)Size
感光元件在焦点后面,会投射在一个圆内,A就是光圈大小,A越大,C越大模糊
可以模拟薄透镜来实现景深效果
Light Field / Lumigraph
任意位置任意方向的光
Materials and Appearance
由渲染方程可知,BRDF决定了材质
透明、半透明材质,考虑反射和折射
光线得折射反射,使能量发生变化从而使某些材质显示出一定的颜色
折射
BTDF
还是用几何光学分析
水底条状纹理,聚焦,光线正好聚焦到同一点
斯涅耳定律,折射定律
不同材料的折射率不同
入射介质和出射介质,折射角可能无意义,出现全反射现象
斯涅尔窗
BSTF(散射)=BRDF(反射)+BTDF(折射)
菲涅尔项
不同角度的反射能量不同
光和物体越平行,越多能量被反射
金属材质的菲涅尔项在垂直使仍然能达到0.9+
微表面模型
物体表面粗糙,但当距离足够远时,就是材质和外观,就如墙面忽略了其表面微小的凹 凸
各向同性:微表面分布基本均匀
各向异性:微表面的法线分布有明确的方向性(各种人造金属制品,锅,光盘,尼龙等)
GAMES101 - Geometry(Curves and Surfaces)
Point Cloud
大力出奇迹
只要点够密,可以表示任何东西
难点:如何将一堆点表示表面
Polygon Mesh
多边形网格,最广泛使用
难点:如何组合多边形
一堆点v,一堆法线vn,一堆纹理坐标vt存到文本文件,
一个立方体8个点,6个面6个法线,存储时会去除冗余
f 5/1/1 1/2/1 4/3/1
,三个点确定一个三角形,共用一条法线
点/纹理坐标/法线
Bezier Curve
每条线段看作一条路径,假定可以控制时间t,找出时间t所处的点
任意一个时间t都可以找出对应的点
通过点的位置和时间t能找出所求点的代数表示
三维空间同样适用
仿射不变性:仿射变换下,只要对控制点做仿射变换
凸包性质:Bezier曲线一定在控制点形成的凸包(最小的凸多边形)内
控制点过多就不容易控制曲线形状,且动一个点整条曲线都会变化
逐段,一般每段3阶4个点,绘图软件钢笔工具
C0连续,几何上接触
C1连续,一阶导数相等,光滑
C2连续,二阶导数…
如何保证曲线连接处光滑?切线导数相同,控制点距离一样
spline样条
可控曲线
B-splines
由不同的基函数控制…
Bezier曲线的扩展,有局部性
NURBS
对B样条的进一步扩展
Bezier Surfaces
两个方向分别运用Bezier Curve,曲线扫过的空间就形成一个曲面
GAMES101 - 曲面细分
细分Mash
引入更多三角形,同时位置发生变化使之更加光滑
loop细分
只能用于三角形网格
(1-n*u)*原位置+u*领近点位置平均
n:顶点的度
u:权?
Catmull-Clark subdivision
适用于任意形状的网格
术语:四边形面,非四边形面,奇异点(度不为4的点)
将边上的中点和面的中点都连起来,变为都是四边形的网格(所以一次细分后奇异点不再增加),奇异点增加(非四边形面中心点一定是奇异点)
不同场合选择合适数量的网格
网格简化
边坍缩
边变顶点
二次误差度量
最小化二次误差,将点放置到合适的位置,使得对原图的影响最小
从二次误差度量最小的边开始坍缩,优先队列或堆,贪心算法(局部最优)
Animation
早期关键帧技术
基于物理的动画
Mass Spring System,质点弹簧系统
FEM,有限元
Particle Systems 粒子系统
将粒子一个个的定义出来,设定粒子间的相互作用力,引力和斥力,粒子间的相互作用力符合什么规律最后表现的就想什么
通过一些函数,表现粒子突然生成,突然消失,定义粒子的速度和位置
包括流体,烟云等都可以模拟
运动学
骨骼