考试大纲¶
Wave 1¶
动画形成的视觉原理¶
利用了人的视觉残留特点。
Wave 2¶
传统动画应用于三维计算机动画的基本原则¶
- 挤压和伸展 Squash and Stretch:变形的物体的体积不变。影响运动的因素包括质量、外力、材料属性、表面接触的位置等。
- 预期性 Anticipation:动画中的动作通常包括动作的准备、实际的动作和动作的完成三部分;预期性是第一部分。
- 布局 Staging:要考虑到观众。
- 连贯动作法与关键动作法 Straight-Ahead Action and Pose-to-Pose Action:这是两个不同的动画制作方式。后者是先画关键动作。
- 跟随动作与重叠动作 Follow-Through and Overlapping Action:“没有任何一种物体会突然停止,物体的运动是一个部分接着一个部分的。”
- 慢入和慢出 Slow In and Slow Out:所有物体自静止开始运动,逐渐加速;从运动状态回到静止状态,则逐渐减慢。
- 弧形动作 Arcs:在很多情况下角色的运动轨迹应该是比较自然的曲线,而不是直线。
- 附属运动 Secondary Motion:当角色进行主要动作时,附属于角色的部分也应该有动作。
- 掌握时序 Timing:动画的节奏。
- 夸张 Exaggeration:夸张手法用于强调某个动作。
- 吸引力 Appeal:角色需要有个性。
- 景深 Depth of Field
- 平衡及重量感 Balance and Weight
Wave 4¶
万向节死锁的概念¶
当万向节中有两个轴的旋转平面平行的时候,就会发生万向节死锁问题。这个时候的万向节丢失了一个自由度。
旋转的四元数表示¶
一个四元数可以表示成 \(w + i x + j y + k z\),其中 \(i^2 = j^2 = k^2 = ijk = -1\)。后三个 \((x, y, z)\) 可以描述成一个向量,\(w\) 对应的可以描述成一个标量。也就是说一个四元数还可以表示成 \((w, \mathbf{v})\)。四元数 \(q = w + i x + j y + k z\) 的共轭 \(q^{-1} = w - i x - j y - k z\)。
四元数描述的是四维空间上的旋转;可以理解成两次和两个单位圆相关的旋转。
使用四元数进行三维旋转的时候,形式可以描述成 \(\mathbf{v}' = q \mathbf{v} q^{-1}\)(\(\mathbf{v}\) 的张量部分是 0)。其中 \(q = \cos (\theta / 2) + \sin (\theta / 2) (xi + yj + zk)\),\(\theta\) 是要旋转的角度,旋转所在的单位圆垂直于单位向量 \((x, y, z)\),正方向用右手螺旋定则确定。
然后旋转的中间过程直接插四元数的值就可以了。
Wave 5¶
2D Shape Blending 涉及哪两个子问题?¶
顶点的对应关系问题和顶点的插值问题。
基于内在形状插值的多边形渐变方法的基本思想¶
使用乌龟几何,用拉格朗日乘数法优化。
乌龟几何:通过边长和有向角来以一个一个顶点定义多边形。对边长和顶点角进行插值可以生成渐变帧。
拉格朗日乘数法优化用于处理插值后起始点和终止点不在同一位置的问题。
基于内在形状插值的多边形渐变方法的数学原理;Edge Tweaking 思想¶
中间多边形可由插值相应的边长和顶点角得到:
从原点到下一个点相对 x 轴的角度 \(\alpha_0 = (1-t) \alpha _{A_0} + t \alpha _{B_0}\);
顶点角 \(\theta _i = (1-t) \theta _{A_i} + t \theta _{B_i}\);
边长 \(L _i = (1-t) L _{A_i} + t L _{B_i}\)。
然而这样的话得到的多边形通常是不封闭的,不过起始点和终止点并不会隔得很远。
Edge Tweaking 思想用于解决中间多边形不封闭的问题。保持插值的顶点角不变,适当调整插值得到的边长:\(L_i = (1 - t) L_{A_i} + t L_{B_i} + S_i\),通过拉格朗日乘数法限制多边形封闭把调整量 \(S_i\) 插出来,并且让 \(\sum_{i=0}^m \frac{S_i^2}{L_{AB_i}^2}\);其中 \(L_{AB_i} = \max (|L_{A_i} - L_{B_i}|, 0.0001 \times \max (|L_{A_i} - L_{B_i}|))\)。
也就是说,我们需要让这个目标函数最小:\(f = \sum _{i=0}^{m} \frac{S_i^2}{L_{AB_i}^2}\);
然后这样使多边形封闭:\(\sum _{i=0}^{m} ((1 - t) L_{A_i} + t L_{B_i} + S_i) \cos \alpha _i = 0\),并且 \(\sum _{i=0}^{m} ((1 - t) L_{A_i} + t L_{B_i} + S_i) \sin \alpha _i = 0\),其中 \(\alpha _i\) 是矢量 \(P_i P_{i+1}\) 和 x 轴构成的有向角,即 \(\alpha _0\) 和 \(\theta _i\) 的前缀和。
引进拉格朗日函数 \(\Phi(\lambda _1, \lambda _2, S_1, S_2, \cdots, S_m) =f + \lambda _1 \phi _1 + \lambda _2 + \phi _2\),求偏导得 \(\frac{\partial \Phi}{\partial S_i} = \frac{2 S_i}{L_{AB_i}^2} + \lambda _1 \cos \alpha _i + \lambda _2 + \sin \alpha _i = 0\)。
这样的话可以用 \(\lambda _1\) 和 \(\lambda _2\) 表示出 \(S_i = -\frac{1}{2} L_{AB_i}^2(\lambda _1 \cos \alpha _i + \lambda _2 \sin \alpha _i)\),代入到两个限制条件可以得到:
$ \begin{cases} E \lambda _1 + F \lambda _2 = U \ F \lambda _1 + G \lambda _2 = V \end{cases} $
其中,\(E = \sum _{i = 0} ^{m} L_{AB_i}^2 \cos ^2 \alpha _i\),\(F = \sum _{i = 0} ^{m} L_{AB_i}^2 \cos \alpha _i \sin \alpha _i\),\(G = \sum _{i = 0} ^{m} L_{AB_i}^2 \sin ^2 \alpha _i\),\(U = 2(\sum _{i=0}^{m} ((1 - t) L_{A_i} + t L_{B_i}) \cos \alpha _i)\),\(V = 2(\sum _{i=0}^{m} ((1 - t) L_{A_i} + t L_{B_i}) \sin \alpha _i)\)。
如果 \(EG - F^2 \neq 0\),那么
$$
\lambda _1 = \frac{\begin{vmatrix} U & F \ V & G \end{vmatrix}}{\begin{vmatrix} E & F \ F & G \end{vmatrix}},
\lambda _2 = \frac{\begin{vmatrix} E & U \ F & V \end{vmatrix}}{\begin{vmatrix} E & F \ F & G \end{vmatrix}}
$$
Wave 6¶
图像 morphing 的原理¶
首先用简单的几何元建立图像特征之间的对应关系,然后由这些特征对应关系计算出 morphing 所需的几何变换,几何变换定义了两幅图像上点之间的几何对应关系。
满射 \(C_0\) 把第一幅图像的几何形状映射为第二幅图像的几何形状,满射 \(C_1\) 则反过来。需要两个映射的原因是图像点与点之间的对应关系不一定是一一对应。
图像变形对齐后再对颜色进行插值,得到中间帧图像。
基于网格的图象 morphing 原理¶
在源图像 \(I_s\) 中,放置曲面网格 \(M_s\),\(M_s\) 指定了控制顶点的坐标。在目标图像 \(I_d\) 中,放置网格 \(M_d\),\(M_d\) 指定了 \(M_s\) 在目标图像的对应点。
曲面 \(M_s\) 和 \(M_d\) 用来定义把源图像的所有点映射到目标图像的空间变换,它们的拓扑关系相同。
中间帧的图像生成步骤:
- 线性插值网格 \(M_s\) 和 \(M_d\),得到网格 \(M\);
- 应用由网格 \(M_s\) 和 \(M\) 定义的变换,使源图像 \(I_s\) 扭曲变形到 \(I_0\);
- 应用由网格 \(M_d\) 和 \(M\) 定义的变换,使目标图像 \(I_d\) 变形到 \(I_1\);
- 对图像 \(I_0\) 和 \(I_1\) 进行线性插值,得到中间帧图像。
基于线对的图象 morphing 方法¶
基于线对的方法采用逆向映射。其思想是逐个扫描目标图象的像素,根据其位置采样源图像。这样的话目标图象中的每一个像素都可以在源图象中找到 对应值。
在源图像中定义一条有向线段,再在目标图像中定义一条有向线段,则映射把一条直线映射为另一条直线。
设两幅图像分别为 \(I_s\) 和 \(I_d\),先在两幅图像中定义控制变形的对应直线对,通过插值得到中间图像 \(I\) 的直线。由 \(I_s \rightarrow I\) 的直线对变换可以得到一副变形图 \(I_1\),由 \(I_d \rightarrow I\) 的直线对变换可以得到 \(I_2\)。对交溶参数作动画,把 \(I_1\) 和 \(I_2\) 进行交溶处理可以得到中间的变形图像 \(I\)。
基于线对特征法的优点是直观,缺点是有可能生成一些意料之外的图像。
Wave 7¶
二、三维形状渐变各有什么优缺点?¶
二维:
优点:是一种达到特殊视觉效果的有效方法;可以让人产生神奇的三维形状改变的错觉,可以避免复杂的三维造型过程。
缺点:可能生成一些意料之外的图像(线对特征法);物体没有三维几何信息,不能进行几何变换。
三维:
优点:能生成更逼真和生动的特技效果,且得到的中间帧是物体的模型而不是图像,运用范围更广。
缺点:物体之间的对应关系很难建立,而且该方法对物体的几何表示也相当苛刻。
基于星形物体的多面体 morphing 方法¶
星形物体,是指物体中至少有一点,从该点可见多面体的所有顶点。
合并一对三维多面体物体模型的拓扑结构,使它们拥有相同的顶点、边、面网络结构,然后对相应的顶点进行插值。
通过合并拓扑结构将一个物体的形状变换为另一个物体的形状可以分为两步:
- 建立源物体与目标物体上的点的对应关系(对应问题);
- 插值对应的点(插值问题)。
对于亏格为零(没有洞)的两个多面体,它们都同构于球。把它们都投影到单位球面上,然后将投影在单位球面上的两个拓扑结构合并在一起构成一个新的拓扑结构,再将新的拓扑结构映射回原来的两个多面体,即建立好了相应的点对关系。
一旦顶点对应关系建立以后,通常采用线性插值或 Hermite 插值来插值相应的顶点。
基于体表示的三维 morphing 方法¶
思想:给定源物体 \(S\) 和目标物体 \(T\),首先根据指定的对应特征生成一个空间变换,该变换使给定的两个体扭曲变形,达到几何对齐的目的;然后对得到的两个扭曲变形体进行混合。
混合方法:这些变换把 \(S\) 中的特征平移、旋转、和比例缩放后,分别与 \(T\) 中对应特征的位置、朝向和大小相匹配。对两个体素的颜色和不透明度进行交溶处理,然后对混合后的体素进行绘制。
优点:与物体的几何和拓扑结构无关;提供了一种统一的处理方法(几何表示的物体都可以转化成体表示)。
缺点:走样现象严重,精度没有基于几何表示的好;几何模型转换为体素表示的计算时间较费。
Wave 8¶
粒子系统的基本思想是将许多简单形状的微小粒子作为基本元素聚集起来形成一个不规则模糊物体。
粒子系统的基本原理¶
粒子系统的作用¶
模拟不规则自然景物。
粒子系统基于的假设¶
- 粒子一般与其它粒子不碰撞
- 除非处于聚集状态,粒子不向其它粒子投射阴影
- 粒子只向其它环境投射阴影
- 粒子不反射光
- 粒子通常有有限的生命周期
每一帧中的步骤¶
每个粒子均经历出生,成长,衰老和死亡的过程。生成粒子系统的某一帧画面的基本步骤是:
- 生成新的粒子并加入系统中;
- 赋予每一新粒子以一定的属性;
- 删除那些已经超过其生命周期的粒子;
- 根据粒子的动态属性对粒子进行移动和变换;
- 绘制并显示由有生命的粒子组成的图形。
粒子生成¶
对于每一帧,根据一个控制的随机过程生成粒子:用户可以控制每帧的平均粒子数和其概率分布;粒子数可以是时间的函数。
粒子的属性¶
位置、速度、大小、周期、质量、力加速器、生命周期、绘制属性、……
Velocity Verlet 积分¶
现在有时刻 \(t\) 的位置 \(\mathbf{x}(t)\)、速度 \(\mathbf{v}(t)\) 和加速度 \(\mathbf{a}(t)\),如果要求 \(h\) 后的位置和速度,那么可以用下面的公式进行计算:
其中位置的计算可以用下面的技巧:
Wave 9¶
Boids 模型的三条原则,每条原则的含义¶
Boid 是一个模拟的类似于鸟一样的物体;它们会组合成一个有点像鸟群的集合。
优先级递减的群体模拟三大原则:
- 碰撞避免原则:避免与相邻的群体成员相碰。
- 速度匹配原则:尽量保持与周围邻居群体成员的速度匹配。
- 群体合群原则:群体成员尽量靠近。
Reynolds 导航方法¶
寻找和逃离¶
追逐和躲避¶
假设猎物在预测区间 \(T\) 内不会转向。
猎物在将来的位置可通过把它的当前速度乘以 \(T\),并把该偏移量与当前位置相加来得到。
偏移的追逐¶
沿着一条接近目标的路径追逐,但是不直接进入移动的目标。(一个使用场景是战斗机进行空中扫射。)
到达¶
角色将放慢速度,直到停止,并与目标位置重合。
障碍避免¶
对于一个需要避开障碍的物体,在其前部指出一块圆柱形的空间作为碰撞盒,即进入它的碰撞盒的物体如果不进行规避就将会和它撞上。对于所有处在碰撞盒的物体,选择一个最有威胁的(比如最近的)物体,根据该物体的位置计算该往哪个方向进行障碍避免。
徘徊¶
角色前方有一个大圆,大圆上面有一个小圆。大圆对导航进行约束,小圆对导航的随机偏移量进行约束。
路径跟随¶
沿着一条路径移动角色,并同时保持在脊柱线的指定半径内。对沿当前方向一段距离之后的位置进行脊柱线上的投影,大于路径半径的时候进行修正:对投影过去的点进行寻找行为。
流场跟随行为¶
- 假设运动区域已经有一个速度流场;
- 估算角色将来的位置并计算在这点的流场;
- 得到的速度 \(\mathrm{F}\) 即为我们期望的速度,导航方向 \(\mathrm{S}\) 为期望速度和当前速度的差。
跟随领导¶
- 如果一个跟随成员发现自己处于领导前面的一个矩形区域,它会横向远离领导者的路径;
- 否则,到达目标为领导后面的一个偏移点;
- 跟随成员采用分离行为来避免相互拥挤。
Wave 10¶
Helbing 基于社会力模型的群体行为模拟方法的基本原理¶
社会力模型以牛顿动力学为基础,由各个力的表达式来体现行人不同的动机和影响。在社会力模型中,由于对影响个体的因素考虑得比较全面,对个体行为的建模比较合理,该模型可以逼真地模拟人群的疏散过程。
个体的实际行为受主观意识、其他个体及障碍物三方面因素的影响,均可等效为力在个体上的作用。
相互速度障碍物碰撞避免模型 RVO¶
假设个体以匀速前进。
每个个体在保持与周围个体相对运动的同时,在速度域中计算出可能导致碰撞的速度集合,并对自身速度进行必要的调整。在调整过程中,碰撞避免的任务同时分配给相关的个体,使它们相互协调完成碰撞避免任务。
速度障碍物¶
假设 \(A\) 为平面上的一个智能体,它的位置是 \(P_A\);\(B\) 为一个移动的平面障碍物,其位置为 \(P_B\)。则障碍物 \(B\) 对智能体 \(A\) 的速度障碍物 \(VO_B^A(\mathbf{v}_B)\) 为在某一时刻将与障碍物 \(B\)(以速度 \(\mathbf{v}_B\) 移动)碰撞的智能体 \(A\) 的所有可能的速度 \(\mathbf{v}_A\) 集合。
\(VO_B^A (\mathbf{v}_B) = \{\mathbf{v}_A\ |\ \mathbf{\gamma} (\mathbf{P}_A, \mathbf{v}_A - \mathbf{v}_B) \cap B \oplus - A \neq \varnothing\}\)
相互速度障碍物¶
智能体之间没有通讯或整体的协调,所以会产生振荡现象。如果我们不选择位于速度障碍物外部的一个新的速度,而是选择当前速度和一个位于速度障碍物外部的速度的平均,就可以形成相互速度障碍物。
\(B\) 对 \(A\) 的相互速度障碍物包含 \(A\) 的所有以下速度的集合:该集合的成员为 \(A\) 的当前速度 \(\mathbf{v}_A\) 和 \(B\) 的速度障碍物内的一个速度的平均:
\(RVO_B^A (\mathbf{v}_B, \mathbf{v}_A) = \{\mathbf{v}_A' \ | \ 2 \mathbf{v}_A' - \mathbf{v}_A \in VO_B^A(\mathbf{v}_B)\}\)
可以理解为把 \(VO_B^A (\mathbf{v}_B)\) 的顶点移到了 \((\mathbf{v}_A + \mathbf{v}_B) / 2\) 的位置。这样可以“模拟”智能体之间的通讯。
添加权重可以形成广义相互速度障碍物:\(RVO_B^A (\mathbf{v}_B, \mathbf{v}_A, \alpha) = \{\mathbf{v}_A' \ | \ \frac{1}{\alpha} \mathbf{v}_A' + (1 - \frac{1}{\alpha}) \mathbf{v}_A \in VO_B^A(\mathbf{v}_B)\}\)。
连续人群方法中的控制方程¶
控制方程的定义建立在这些假设上:
- 每个人需要尽力到达一个地理目标 \(G\),\(G \subseteq R^2\)。
- 存在一个最大速度场 \(\mathbf{f}\),使得在 \(\mathbf{x}\) 位置的一个人沿着 \(\theta\) 方向运动的时候,其速度满足 \(d \mathbf{x} = f(\mathbf{x}, \theta) \mathbf{n}_\theta\)。
- 存在一个“不舒服”场 \(g\),\(g(\mathbf{x})\) 的值越大代表人们越不想待在 \(x\) 处。
- 假设 \(\Pi\) 是 \(\mathbf{x}\) 到目标某个点所有路径的集合。
现在,最大速度场 \(\mathbf{f}\)、不舒服场 \(g\) 和目标 \(G\) 固定。在位置 \(\mathbf{x}\) 的人选择的路径 \(P \in \Pi\) 满足下面的能量极小化:\(\alpha \int _P 1 ds + \beta \int _P 1 dt + \gamma \int _P g dt\) 。由于 \(ds = fdt\),如果令 \(C \equiv \frac{\alpha f + \beta + \gamma g}{f}\),上式可以化简成 \(\int _P C ds\)。
Wave 11¶
运动捕获系统(MOCAP)流水线¶
规划 -> 标定 -> 捕获 -> 三维位置重建 -> 拟合到骨架 -> 后处理
正向运动学、逆向运动学原理(IK)¶
正向运动学:动画师通过直接指定关节处的关节运动参数来控制物体的运动。难以控制末端影响器的位置。
逆向运动学:动画师指定目标位置,系统求解满足要求的关节角。可能有多个解、可能没有解;计算复杂、可能需要约束。
逆向雅克比方法求解 IK 的原理¶
一个机械臂的每个点的速度(位移的一阶导)和各个角度的变化率有关。可以描述成:\(\dot{x} = J \dot{\theta}\),\(x\) 是位移,\(\theta\) 是角度,\(J\) 是雅克比矩阵,\(J(\theta)_{ij} = \frac{\partial x_i}{\partial \theta_j}\)。
机械臂的角度是能改变的。假设我们想让位移变化一个 \(\Delta x\),那么如果我们能把 \(J\) 求逆,让 \(J^{-1} \Delta x = \Delta \theta\),就能知道角度该怎么改变了。
给定初始姿势和所需要的姿势,迭代变化关节角,使得末端影响器朝目标位置和方向前进:\(\theta _{k+1} = \theta _{k} + \Delta t \dot{\theta}\)。
然而 \(J\) 很可能没有逆,甚至连方阵都不是……我们只能使用伪逆。注意到 \(J^T \dot{x} = J^T J \dot{\theta}\),而 \(J\) 行满秩的时候 \((J^T J)^{-1}\) 存在,所以 \((J^T J)^{-1}J^T \dot{x} = (J^T J)^{-1} J^T J \dot{\theta} = \dot{\theta}\),我们称 \(J^+ = (J^T J)^{-1}J^T\) 是 \(J\) 的伪逆。
Wave 12¶
循环坐标下降法(CCD)原理¶
对于多个参数的求最值问题,可以循环地选取变量,把其他变量固定而只通过改变选取的变量来寻找最值。
在这里,CCD 是这么用的:对所有受 IK 影响的骨骼,按从最远侧子骨骼到父骨骼的顺序执行迭代操作:旋转当前骨骼,使当前骨骼位置到目标骨骼的连线指向 IK 目标位置。这个时候可以比较方便地对轴进行限制。
基于运动捕获的关节动画制作的优缺点¶
优点:
- 可以很好地记录被捕获的对象的动作的细节。
- 相比传统动画制作,制作效率更高,制作成本(工作量)更低。
缺点:
- 设备成本高。
- 技术门槛高。
- 对于捕捉场地环境要求较高。
骨架与角色模型的绑定原理¶
角色的表面(外皮)必须随着骨架的运动而运动(变形);在骨架绑定中,皮肤的运动定义为对应控制骨架的函数;很多骨架绑定系统采用一个称为中性姿势或静止姿势的几何信息。
顶点混合(Vertex Blending)的原理¶
假设要用前臂和后臂来模拟一个手臂,要使关节处是柔软的,可以对前臂和后臂单独设置动画,然后关节处用柔性的材质(皮肤)来连接。
柔性部分的一部分顶点由前臂的矩阵来变换,另一部分由后臂的矩阵来变换。即一个三角形的顶点可以由不同的矩阵来变换,而不是一个矩阵。
进一步推广:一个顶点可以由几个不同的矩阵进行加权变换。实施方法:在物体上放置关节骨架,每个骨架都按用户给定的权因子影响顶点。
顶点混合的数学表示¶
局部坐标系(local coord)可以表示为 \(\mathbf{P} = (x_l^i, y_l^i, z_l^i)^T\) 的点,用一个矩阵变换到世界坐标系(world coord)可以表示为 \((x_g^i, y_g^i, z_g^i)^T = \mathbf{M}_i (x_l^i, y_l^i, z_l^i)^T\)。
如果要用多个矩阵加权,设 \(\mathbf{P}\) 是变换前的顶点,有 \(n\) 个关节在影响这个点,其中第 \(i\) 个关节自己随时间变化的世界变换为 \(\mathbf{B}_i(t)\),\(\omega _i\) 是它的权重(\(\sum_{i=0}^{n-1} \omega _i = 1\)),则变化后的顶点 \(\mathbf{u}(t) = \sum_{i=0}^{n-1} \omega _i \mathbf{B}_i(t) \mathbf{M}_i ^ {-1} \mathbf{P}\)。
基于 Blend Shapes 表情动画的原理¶
首先对人脸的关键姿态表情的形状进行三维扫描,然后构建一组 Blend Shapes 模型(作为表情基),最后插值这些 Blend Shapes 来得到任意的表情。
FACE IK 的原理¶
然而动画师更愿意控制脸部上的一些点(类似于 IK),而不是权因子。
现在人脸上一共有 \(n\) 个点,如果动画师要约束其中 \(L\) 个点,即 \(\sum _{f = 1} ^{F} C_f \mathbf{S}_{l, f} = \mathbf{P}_l\),其中 \(\sum _{f = 1} ^{F} C_f = 1\),这就是一个线性规划问题,可以用最小二乘法把系数 \(C_f\) 搞出来。
Wave 13¶
变形(Deformation)与 Morphing 的区别¶
变形是指将几何对象的形状作某种扭曲、形变,使它形成到动画师所需的形状。在这种变化中,几何对象的拓扑关系一般保持不变。
与 Morphing 不同,空间变形更具某种随意性,所以空间变形也常称为自由变形。
与物体表示无关的变形的原理¶
既可作用于多边形表示的物体,又可作用于参数曲面表示的物体。核心思想是如何用少量的点去有效控制更多的点。
CSG 树:各个节点把子节点的物体做指定的几何变换和 / 或布尔运算的结果作为自己的物体。
整体和局部变形方法:螺旋、弯曲、渐细作为新的算子。变形后物体的法向量可用原物体的法向量和变换矩阵解析求得。
在标准的三维坐标变换中,变换矩阵对被作用物体上的每个点都是不变的。非线性整体变形在于当变换作用于物体时,变换矩阵随不同的顶点而变化,因而变换是物体顶点位置的函数。
而局部变形改变的是物体的切向量空间;该操作对物体的切向量进行旋转和扭曲,然后积分得到物体变形后的整体位置。
在几何造型中,切向量和法向量是两个非常重要的向量,因为切向量决定了物体的局部几何信息,法向量决定了物体的方向和光照信息。
自由变形方法 FFD¶
该方法不直接操作物体,而是将物体嵌入一空间,当所嵌的空间变形时,物体也随之变形。
一张三三次 Bezier 超曲面 \(\mathbf{Q}(u, v, w) = \sum _{i=0} ^3 \sum _{j=0} ^3 \sum _{k=0} ^3 \mathbf{P}_{ijk} B_i(u) B_j(v) B_k(w)\) 将一正方体映射为一弯曲的物体。\(B_i(u), B_j(v), B_k(w)\) 是 Bernstein 基函数,\(\mathbf{P}_{ijk}\) 是 64 个控制顶点(\(4 \times 4 \times 4\))。
扩展的 FFD 方法:EFFD¶
FFD 是一个非常直观的变形工具,但它只适合于平行六面体的 lattice(晶格)形状。
EFFD 允许 FFD 型 lattice 作为它结构的一部分,许多个 FFD 型 lattice 可合并构成 EFFD 的 lattice:可以通过融合超平面、控制顶点来融合。EFFD 块构造好后,采用与 FFD 类似的方法来使物体变形;但在 EFFD 变形中,两个空间之间不再有这种简单的对应关系,通常需要迭代求解 \(\mathbf{Q}(u, v, w) = \sum _{i=0} ^3 \sum _{j=0} ^3 \sum _{k=0} ^3 \mathbf{P}_{ijk} B_i(u) B_j(v) B_k(w)\)。
基于 Cage 的变形原理¶
Cage 是一个包裹高分辨率模型的低分辨率控制网格,它简单、直观且高效。
变形原理:
- 构建模型的 cage。
- 计算模型的 cage 坐标。
- 编辑 cage 模型。
- 把 cage 的变形通过预先计算的 cage 坐标光滑传播到其包裹的模型。
Laplacian 微分坐标及其变形原理¶
拉普拉斯坐标是一种相对坐标,拉普拉斯坐标 \(\delta _i\) 表示第 \(i\) 个顶点的坐标与其相邻顶点坐标的差的加权平均:\(\delta _i = \frac{1}{m} \sum_{j=1}^{m} w_{i, j} (v_i - v_j)\),\(m\) 是相邻顶点数,\(w_{i, j}\) 是对应权重。如果权重都相等,那么 \(\delta _i = v_i - \frac{1}{m} \sum_{j=1}^{m} v_j\)。
把所有顶点一起变换的过程可以用矩阵写作 \(L\mathbf{x} = \mathbf{\delta}\)。\(L\) 是网格的拉普拉斯矩阵,定义为 \(L = I - D^{-1} A\),\(D\) 是这张网格的度矩阵,\(A\) 是网格的邻接矩阵。可以通过 \(\mathbf{x} = L^{-1} \mathbf{\delta}\) 把坐标求出来;然而 \(L\) 这个矩阵不满秩,不过可以通过固定住一些点来求解线性方程。
定义一个要被最小化的能量函数:\(E(V') = \sum _{i=1}^{n} ||\delta _i - \delta _i'||^2 + \sum _{i = m}^{n} ||\mathbf{v}_i' - \mathbf{u}_i||^2\),前半部分通过拉普拉斯坐标来确保保持细节,后半部分表示把一些点放到指定位置。
Wave 14¶
布料动画和仿真中的核心问题¶
- 建立布料的物理(力学)模型
- 布料物理参数的确定
- 物理模型的求解(偏微分方程数值解)
- 碰撞检测和响应
布料的物理机械性能¶
- 拉伸力
- 压缩力
- 剪切力
- 弯曲力
布料的弹簧-质点模型¶
- 结构弹簧,连接 \((i,j)\) 到 \((i + 1, j), (i, j + 1)\),提供结构力(拉伸力、压缩力)
- 剪切弹簧,连接 \((i,j)\) 到 \((i + 1, j + 1), (i - 1, j + 1)\),提供剪力
- 弯曲弹簧,连接 \((i,j)\) 到 \((i + 2, j), (i, j + 2)\),提供弯矩
Provot 的衣服模型的原理¶
Provot 提出了一种可以看作是从 Breen 的粒子系统简化而来的弹簧-质点模型(上面那个),并在此基础上发展了一套非常简单有效的算法。
Provot 采用了简单高效的显式欧拉法求解微分方程组。显式欧拉法(上标是时间):
布料动画中大步长隐式方法的原理¶
在布料模拟的积分计算部分设法取较大的时间步长可以有效的提高算法效率。使用隐式方法来积分,在不降低刚度的条件下可以取得较大的时间步长。隐式欧拉法(上标是时间):