现在我们介绍计算机辅助卡通动画
计算机辅助卡通动画是一个
比较难的东西
因为卡通动画它有非常
大的随意性
我们先讲手绘动画
手绘动画因为它非常的灵活
有高度的创作性
使它的形体的变化还有相机的变化
以及它旋转的时候
它有一些这个夸张的动作等等
这些东西都导致用计算机来辅助
生成卡通动画它非常的困难
它也非常灵活多变
而且经常会有夸张性的表现手法
艺术手法
使得让计算机来做这样的事情
它就非常的困难
计算机是非常适合做有一定的规则的
预先定义好的东西它是非常容易做的
那么这里有两个图
左边是一个小狗的卡通
右边是一个手
那么这些东西的插值呢
通过计算机来实现都是非常困难的
不像三维的这个数据插值
那么我们一般怎么来解决这个问题呢
OK
现在我们介绍一下一篇论文里面
介绍一个非常实用的方法
那么因为在传统的方法下
使用三维模型还有一般的线性插值
都不能满足卡通动画的要求
举一个例子来说
在第一个图里面
那么上面就是用我们建一个三维模型来
模拟动画师做出来的一个人脸
然后他转身的时候呢
咱们就转过他的模型
那么你看到就是右上角这个图的效果
但是其实在动画师来进行同样的东西
用手绘的时候呢
他其实真正的情况下应该会
更加倾向于右下角这样的效果图
所以这就导致用三维模型来直接做
就是二维的卡通动画呢
不是特别适合
它会有很多方面跟艺术家品位
以及它的方向不符合的这样一个情况
右边显示就是一般的线性插值呢
他不能满足手动绘画这样的要求
比如说你有一个手臂有两节
然后从下面
它是要往下落下去
如果你用线性插值的话
你就会按直线下去
所以你的手臂会先缩短
然后右臂伸长
所以这样也非常不符合做卡通动画
卡通动画训练会有伸缩
但也不会像这样奇怪的去这样伸缩
它应该是按照一定的艺术家设定轨迹
来进行伸缩的
现在我们来讲一下就是弗洛
他们提出来了一个四层次的解决方法
那么在第0层它是一个细分曲线
叫subdivision curve
来拟合手绘画
比如说在第一个图里面
大家可以看到
我们会用曲线去拟合
这个卡通角色的人脸
眼睛 眉毛 嘴巴 头发等等
那么在第一层它是一个2.5D的模型
什么是2.5D模型
2.5D模型就是
它不是一个真正的三维模型
它用一些虚拟
不是虚拟
一些辅助的信息
来协助生成类似于三维的信息
就是它没有所有的三维信息
在某些地方也可以生成一些三维信息
比如说在这里吧
这里第一层就中间这个图
大家可以看到是一个2.5D模型
它怎么生成的呢
它有深度曲线来记录它的
就是它会记录下x跟y旋转的时候
这个角色的旋转信息
那么可以模拟出是一个假三维
模拟出一个2.5D的人脸的转动的
那个模拟它转动时候的一个形体
那么在第二层是一个骨架结构
或者骨架的构建
它会在卡通身上做一个骨架的构建
然后使用一些算法
来辅助它生成一些这个动作
使它之间有连贯性
那么在最后一层呢
是一个方便的ui和控制器
左边是它的ui
就是用户界面
怎么来交互来调节这个脸的轮廓
然后怎么来建这个2.5D的模型
建完之后呢
怎么记录下它的深度旋转的信息
以及以方便模拟
角色在运动过程中的一个三维信息
然后右边是一个控制器
有了控制器以后
我们动画师就不需要去手工描那线条
在样条插值的基础上
他能够保证某些形体之间的
协调性和这个可控性
大大提高动画师的制作效率
那么计算机辅助卡通动画
第二个部分我来介绍一个
由运动捕获数据来生成动画的方法
这个就是说
你先像这里图里面有上下两个部分
那么上面一个运动系列是原始的
通过运动捕捉得到的数据
下图是一个经过卡通滤波以后的数据
就是让它产生一个卡通的效果
那么它整个的是使用一个滤波器来实现的
接下来我们会讲到
我们可以先看一个视频
就是它运动捕获怎么生成出来它的效果
大概是什么样子的
这里就是我刚才提到的滤波函数
通过这个滤波函数对原始数据进行叠加
就会产生卡通的效果
而且参数都可以调的
它叫Inverted Laplacian of a Gauszian
这样一个函数
就是高斯拉普拉斯
然后进行一个逆转
就是逆转高斯拉普拉斯函数
就是这个图中的绿色的函数
蓝色的函数是标准的高斯
先进行一个卷积运算
然后再对它进行求利
你就会能得到这个绿色的函数
那么它在每一段的控制
卡通的风格
它的方式都不一样
那么具体详情大家可以看这篇论文
右下角我们列出来了