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

不在阴影里的点:相机能看到,光源也能看到

在阴影里的点:只有相机能看到

只讨论点光源

硬阴影:阴影边缘非常锐利,点光源


  1. 从光源看向场景,记录看到的任何点的深度
  2. 从相机看向场景,同上,然后投影回光源,判断是否能同时被看到

软阴影:边缘逐渐消失,光源有一定的大小


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 粒子系统

将粒子一个个的定义出来,设定粒子间的相互作用力,引力和斥力,粒子间的相互作用力符合什么规律最后表现的就想什么

通过一些函数,表现粒子突然生成,突然消失,定义粒子的速度和位置

包括流体,烟云等都可以模拟


运动学

骨骼