1.简介:运动的错觉
•一系列单独的“图纸”播放足够快地说服了它正在看到连续运动
•示例:“赛马疾驰的动画顺序。 拍摄的照片Eadweard Muybridge(卒于1904年),于1887年在费城首次出版
1.1计算机动画
•计算机动画:动态场景的单个状态系列。
•场景状态:数字集
•动画:随着时间的推移更改数字: 示例编号:颜色,坐标,大小,速度,焦距,…
•在渲染后显示每个框架,以足够快的速度说服眼睛,它正在看到连续运动
2.动画控制
•动画技术不同:提供的参数; 由参数给出的控制
低级:指导,描述性或现象学模型,几何学
中级:动画级,生成或基于物理的模型,物理
高级:任务级别,行为模型,行为
2.1因果关系(Hegron和Arnaldi,92)
•描述性模型:没有知识的效果
•生成模型:描述产生效果的原因
•行为模型:模拟响应的生物的行为内部和外部刺激
2.2.低级控制
•随着时间的推移,对象参数明确更改: 示例:相机位置和控件,脸部的眼睛闪烁率,分层对象的关节角度
•密钥帧:在某些情况下指定属性。
•INBETWONDING:计算中间帧。
示例:插值2D位置:
•Given positions: (xi, yi, ti), i = 0,…,n
• Find curve Q(t) = (x(t), y(t)) such that Q(ti) = (xi, yi) (使用曲线在位置之间生成)
我们将首先查看线性插值,然后使用参数曲线进行插值
3.线性插值
示例:插值位置
•给定位置pi :( xi,yi,ti),i = 0,…,n
•对于前两个点:
Assume t0= 0 and t1= 1
X coordinate: x(t) = x0(1-t) + x1t
Y coordinate: y(t) = y0(1-t) + y1t
问题:跨密钥帧的非平滑运动
•示例:弹跳球 - 我们需要更好的东西
•示例:形状插值:
KeyFrames A和B, 两组之间的插值生产中间帧I
问题:相应的顶点;不同数量的顶点;避免形状之间的“争夺”
•示例:脸部变化
给定两组顶点Ai和bi,可以使用线性插值:
P = Ai(1-t) + Bit
i = 1…n
对于通过多个姿势Xi的面部动画,我们应该使用比线性插值更好的东西,并考虑更高阶的参数
选择“正确”参数
•示例:人类骨架
•皮肤顶点位置的线性插值导致骨骼长度缩短
•相反,使用关节旋转插入骨骼,然后添加皮肤
•仍然需要更好的方法来通过多个帧平滑插值
4.参数曲线
参数曲线在许多应用中使用:绘制包装; 可缩放字体(轮廓字体); 飞行路径; 在路径之间
对于动画,我们可以使用
曲线以随着时间的流逝而变化,即在我们沿曲线时变化时,它会产生参数的值
要更改的示例参数:X位置或Y位置或Z位置,角度或高度或红色的数量或其他
•参数曲线可用于控制任何参数(q),因为它随时间变化,q = f(t)
•多个参数(a,b,c,d,…)可能需要多个曲线
例如 相机位置(3个参数),对象颜色(3个参数),层次对象的关节角度(n角),面姿势(n参数)
4.1不同种类的曲线
•许多不同种类的参数曲线 :
HERMITE,BEZIER,CATMULL-ROM,B-SPLINE,不均匀理性B-Splines(NURBS),…
•将细分线连接在一起以创建更长的曲线:
例如 分段立方花纹
•我们将重点介绍立方体曲线以插值密钥帧值
4.2线
•参数形式:Q(t) = at + b
•作为三个组件(3D):
x(t) = axt+ bx
y(t) = ayt+ by
z(t) = azt + bz
•重新安排直观控制:
Q(t) = P0(1-t) + P1
t 0≤t≤1
where
a = P1- P0; b = P0
4.3一般参数曲线
• Linear: Q(u) = au + b
• Quadratic: Q(u) = au^2 + bu + c
• Cubic: Q(u) = au^3 + bu^2 + cu + d
• 三维曲线:用参数表示的三维曲线是一个有界的点集,可以表示成一个带参数的、连续的和单值的数学函数:
Plot x(u), 0≤u≤1
x(u) = axu^3 + bxu^2 + cxu + dx
y(u) = ayu^3 + byu^2 + cyu + dy
z(u) = azu^3 + bzu^2 + czu + dz
4.4有用的参数曲线
•正弦波:a = sin(t):
For 0 ≤ t ≤ 1,
scale to 0 ≤ t ≤ 2π,
sin(t)给出了-1和+1之间的重复,平稳变化的参数
用它来控制最大值和最小值之间的角度
5.Bezier立方曲线
•重新排列一般立方参数曲线:
Q(u) = P0 (1-u)^3 + P1 3u (1-u)^2 + P2 3u^2 (1-u) + P3 u^3
•p0和 p3 曲线的端点
•P1和 P2控制曲线的形状
5.1 Matrix notation
• Rewrite as Q(u) = U B P
-1 3 -3 1 P0
=(u^3 u^2 u 1){ 3 -6 3 0 }{ P1 }
-3 3 0 0 P2
1 0 0 0 P3
5.2 Tangents
Q(u) = P0 (1-u)^3 + P1 3u (1-u)^2 + P2 3u^2 (1-u) + P3 u^3
where a=-P0+3P1-3P2+P3, b=3P0-6P1+3P2, c=-3P0+3P1, d=P0
区分:Q’(u) = 3au^2+2bu+c
然后,将U分别设置为0和1:
Q’(0) = 3(P1-P0)
Q’(1) = 3(P3-P2)
这为我们提供了曲线端点的切线指示
•标准化以提供单位切线
•加入曲线段时很重要
5.3 3D
曲线的开始和结尾顶点是位于平行教的对面顶点由控制点形成
(1)立方体包含的曲线
(2)将多维数据集绘制成平行的方向会改变曲线
(3)用作控制点的顶点
5.4属性
•控制点的数量总是比程度大1
•全球控制:移动控制点并影响整个曲线
•凸壳属性:在控制点围绕凸面中包含的曲线
如果连接物体A内任意两点的直线段都在A的内部,则称A是凸的。任意物体A的凸壳是包含A的最小凸物体。像素化操作首先需找到二值图像中所有的连通区域,然后用这些区域质心作为这些连通分量的代表,即将一个连通 区域像素化位于区域质心的一个像素。我们总是希望像素化算法能够找到物体的质心来代表该物体,但在实际中,可能由于光照不均等原因导致图像在二值化,物体本身形状发生缺损,像素化算法就无法找到物体真正的质心。此时可适当进行凸壳处理,弥补凹损,算法会找到包含原始形状的最小凸多边形
•在仿射转化下不变:转换控制点,然后评估曲线
5.5加入bezier曲线段
Given two curves Si, Ri
• C0/G0 continuity: S3= R0
• C^1continuity: (S3-S2) = (R1-R0)
• G^1continuity: (S3-S2) = k(R1-R0)
•导数连续性(C^1)对于动画很重要:
如果对象沿分段曲线以恒定的参数速度移动,则连接时不应突然跳跃
•对于其他应用,切线连续性(G^1)可能足够
5.6编辑加入Bezier曲线段
•控制点的约束复杂的运动分段曲线
5.8绘图曲线曲线
5.8.1迭代评估
•在U中的增量步骤,并在每次迭代中评估Q(U)
• 迭代:u+= step; 评估Q(u); 绘制线
•优势:非常简单
•劣势:没有简单的方法来了解样品点有多好
5.8.2细分 - de Casteljau算法
•继续将曲线细分为两条曲线
•将一条曲线PI分为两条曲线Qi和RI,它们在联接中连续
在数值分析的数学领域中,De Casteljau的算法是评估以其发明家Paul de Casteljau命名的伯恩斯坦形式或Bézier曲线的多项式的递归方法。 De Casteljau的算法也可以用来以任意参数值将单个Bézier曲线拆分为两个Bézier曲线。
尽管与直接方法相比,大多数架构的算法较慢,但在数值上更稳定。
简述:假设控制多边形上的每一条线段上都有一个点 t ,(这个点可以从线段的起点移动到终点即 t 的值从0递增到1) 再将每条线段上的点 t 依次连接,形成新的控制多边形,一直循环,直到控制多边形为一条直线,则该直线上的 点 t 为Bezier曲线上的其中一个点。
用图形解释:
假设 t = 1/4 t∈[0,1] 即点 t 再每一条线段上的 1/4 处
分析与结论:
由此可知,当 t 值为固定值时,可以求出Bezier曲线上的一个点,则曲线可以用P(t)表示,此时 t 为变量,t∈[0,1] 。 P(t) 随着 t 的值变化而变化,从而得出很多的点,将这些点连接后就成为曲线。
由于用公式推导求出P(t)过于复杂,本人就简单分析如何求出 t 点坐标 的通项公式,因为在Unity中知道该通项公式就足够了。
已知一条线段的起点,终点坐标,然后用向量的减法即可轻易求出,求t 点坐标的通项公式为: (1 - t )* P0 + t *P1 ,
其中P0为线段起点坐标,P1为线段终点坐标。
求其他线段点 t 坐标 也是用这个公式,这里就不证明了,通过这个公式,用代码中的循环语句求出每条线段上的 t 点 ,都放入一个集合中,通过这些点又形成了一个新的控制多边形,反复的求(递归),直到求出Bezier曲线上的点坐标。之后用循环再控制 t 的增量,求出P(t)。
注意:Bezier曲线的形状仅与控制多边形个顶点的相对位置有关,而与坐标系的选择无关。
•替代停止条件:
a)均匀的深度
b)曲线匹配线性标准
•在限制下,为每个子库绘制控制多边形: 如果控制顶点几乎是共线,则使用凸壳
•在某些设计情况下可能很有用,但是绘制曲线的效率低下
6.指定速度特性
•通用方法:双插值方法
•路径控制的一(或更多)曲线:
Q(u), 0<=u<=1
x(u), y(u), z(u)
•一条曲线以控制沿路径的速度:V(u), 0<=u<=1
6.1 双插值方法
•在时间t = 3时,密钥帧数为6;
•KEYFRAME 6对应于X值8;
•因此,在t = 3时,x值为8。