Lecture 10
Texture(last lecture)
Bump Mapping
以下内容参考自《3D游戏与计算机图形学中的数学方法》
构造凹凸图
用高度图计算凹凸图: H ( i , j ) H(i,j) H(i,j)表示高度图在 ( i , j ) (i,j) (i,j)处的高度值,则在s和t方向上的切向量 S ( i , j ) S(i,j) S(i,j)和 T ( i , j ) T(i,j) T(i,j)分别为
S
⃗
(
i
,
j
)
=
(
1
,
0
,
a
H
(
i
+
1
,
j
)
−
a
H
(
i
−
1
,
j
)
)
\vec S(i,j)=(1,0,aH(i+1,j)-aH(i-1,j))
S(i,j)=(1,0,aH(i+1,j)−aH(i−1,j))
T
⃗
(
i
,
j
)
=
(
0
,
1
,
a
H
(
i
,
j
+
1
)
−
a
H
(
i
,
j
−
1
)
)
\vec T(i,j)=(0,1,aH(i,j+1)-aH(i,j-1))
T(i,j)=(0,1,aH(i,j+1)−aH(i,j−1))
其中,a为控制法向量扰动程度的系数
N ⃗ ( i , j ) = S ⃗ ( i , j ) × T ⃗ ( i , j ) ∣ ∣ S ⃗ ( i , j ) × T ⃗ ( i , j ) ∣ ∣ = ( − S ⃗ z , − T ⃗ z , 1 ) . n o r m a l i z e d ( ) \vec N(i,j)=\frac{\vec S(i,j)\times \vec T(i,j)}{||\vec S(i,j)\times \vec T(i,j)||}=(-\vec S_{z},-\vec T_{z},1).normalized() N(i,j)=∣∣S(i,j)×T(i,j)∣∣S(i,j)×T(i,j)=(−Sz,−Tz,1).normalized()
切线空间
顶点法向量指向z轴正方向,再定义一个在表面与该顶点相切的向量,就能构造一个正交基。
计算光照时,顶点到光源的向量 L L L,和Normal Map采样得到的法线,要变换到同一个空间
Shadow Mapping
Geometry
-
Implicit:定义点满足的关系
- 代数定义:f(x,y)=0
- 距离函数
-
Explicit:给出所有的点
- 点云:list of points
- 多边形面
- 曲面细分
Constructive Solid Geometry(Implicit)
几何的交并补
Distance Functions(Implicit)
描述空间中每个点到该几何形体的最小距离,有方向,在几何体外部为正,内部为负
Polygon Mesh(Explicit)
定义vertices、normals,texture coordinates,以及它们组成primitive的关系
Lecture 11
Curves
Bezier Curves
用控制点定义曲线
de Casteljau Algorithm
考虑参数$t\in [0,1]$
,对每个t
,如图所示进行多次插值,计算出对应的x(t)
,最终所有的x(t)
构成由b0-b3
这4个控制点确定的贝塞尔曲线
Algebraic Formula
通式:
Properties of Bezier Curves
-
对贝塞尔曲线做仿射变换=对控制点做仿射变换后再绘制贝塞尔曲线
-
曲线位于控制点的凸包中
Piecewise Bezier Curve
- C0连续:在分段点上值连续
- C1连续:在分段点上切线连续
Surfaces
Bezier Surfaces
4条贝塞尔曲线,构造1个贝塞尔曲面
取4条曲线在参数u处的4个点,作为新的贝塞尔曲线的控制点,再在新的贝塞尔曲线上计算参数v处的点
16个点进行多次插值得到:
Lecture 12
Mesh Subdivision(曲面细分)
Loop Subdivision
只能处理三角形面
先把1个三角形分成4个(增加3个顶点),然后调整每个顶点的位置
- 新增的顶点
- 原来的顶点
Catmull-Clark Subdivision
可以处理四边形面
奇异点:度不为4的点
取面的中心点,和每条边的中点相连。一次细分就可以让所有面变成四边形面,增加非四边形面数个奇异点
顶点位置更新:
分为3种情况:面的中点、边的中点和原来的顶点
Mesh Simplification(曲面简化)
降低模型的面数
Edge Collapse
每次选择二次误差度量最小的一条边进行坍缩