目录
关键帧(Keyframe animation)
物理仿真(Physical simulation)
质点弹簧系统
粒子系统
运动学(Kinematics)
正运动学(Forward Kinematics)
逆运动学(Inverse Kinematics)
Rigging
关键帧(Keyframe animation)
我们知道动画是由一帧一帧的图像连续播放形成,一般电影是一秒放24帧,也就是24fps,然后一般的视频是30fps的,虚拟现实要求达到90fps,那么关键帧就是指动画序列中的重要帧或关键时刻,用于定义动画中物体的位置、姿态、形状等
关键帧之间的帧称为"间隔帧"或"过渡帧",它们是通过插值方法补充关键帧之间的动画过渡效果,当然不是简单的线性插值,像我们之前的贝塞尔曲线,估计也有点关系
物理仿真(Physical simulation)
质点弹簧系统
假设有这么一个理想化的弹簧系统牵着两个质点,这个弹簧没有原长度,那么根据这个胡克定律,这个系统产生的弹力就等于两个质点的位移差乘以劲度系数,当然a和b受到的弹力大小相等方向相反
那实际上弹簧是有原长的,那就需要将拉神量减去弹簧的原本长度,同时乘以一个单位方向向量
用这个来表示位移的话,那么就表示的一阶导数就是速度,表示二阶导数就是加速度
但是刚刚的质点弹簧系统还有一点问题,就是这个系统不会停下来,这个时候就需要引入摩擦力,考虑到要让它停下来那么它速度越大我这个摩擦力应该越大,摩擦力大小就等于质点速度再乘以一个抑制系数,方向和速度方向相反
但是还有一点问题,就是就是这两个质点只有在弹簧的方向上有速度才需要有这个摩擦力,如果质点在弹簧的垂直方向上有速度就不应该有这个摩擦力,因此刚刚单纯的乘以质点的速度就需要换成速度在弹簧方向上的投影
这样一个比较好的质点弹簧系统就好了,我们可以用它来组成其他的东西,比如布料,但是如果我从这个斜对角线的方向上去拉扯这个布料,这个结构不会产生弹力来抵抗我这个拉扯,因为我没有改变这个弹簧的拉伸,那这就不对
所以就在这个结构的对角线上加上弹簧,这样在对角线方向上的拉扯就会产生弹力来抵抗,但是这个结构依然没有办法抵抗水平和垂直方向的折叠,这种折叠同样不会改变目前结构的弹簧拉伸量
解决办法就是在间隔一个质点之间加上弹簧,这样当发生水平或者垂直方向上的折叠时,新加的弹簧会被压缩产生弹力来抵抗折叠
粒子系统
粒子系统本质上是想定义个体和群体的运动行为,那怎么做呢,这节课先简单说一下,对于动画里面的每一帧,根据需要选择创建新的粒子,然后计算每个粒子受到的力,更新每个粒子的速度和位置,如果有必要选择销毁某些粒子,最后进行渲染
粒子系统作用力广泛存在于吸引力和排斥力、重力、电磁力…、弹簧、推进力…阻尼力、摩擦力、空气阻力、粘度…碰撞、墙壁、容器、固定物体…、动态物体、角色身体部位等等,例如粒子系统应用于鸟群,对于一只鸟而言,它会有向鸟群靠近的这个吸引力,但是同时会有和其他鸟保持一定距离的排斥力,并且它飞行的方向是和鸟群的飞行方向一致
运动学(Kinematics)
正运动学(Forward Kinematics)
比如说我们要做一个骨架的运动,如何保证这个骨架它在运动的过程中骨架的各个部分之间的连接关系和几何关系能够保持,这就是运动学的内容
把这个关节的连接类型分成三种,一个是Pin,只能在某个平面上做旋转,一个是Ball,可以往各个方向转,还有一个是移动关节,就是可以伸缩的
正运动学就是每个关节旋转多少,然后找这个移动的位置
逆运动学(Inverse Kinematics)
逆运动学就是我想要移动到某个位置,我怎么旋转每个关节才能实现,这个就很难
这个问题有可能是无解的,也有可能是多解的,那一般怎么做的呢?先有一个初始的位置,然后定义这个误差的度量(比如目标和当前位置距离的平方和),计算误差的梯度,使用梯度下降法求解
Rigging
所谓rigging就是操作这个人物如何运动,像这个王者荣耀里面元歌操纵傀儡那样
对应的就会有这个操作点,也就是关键点,那么在关键帧之间的过渡帧就可以通过这些关键点的插值来实现
因此我们可以通过动作捕捉在真人上检测关键点的移动来反应到动画人物上的关键点移动
在动画制作过程中,动画人物建模完成上纹理后就通过rigging产生动作后再渲染