查看: 1645|回复: 2
打印 上一主题 下一主题

[教程] 3d max角色表情动画

[复制链接]

9210

主题

1

听众

5万

积分

内部人员

Rank: 7Rank: 7Rank: 7

纳金币
12582
精华
186

活跃会员

跳转到指定楼层
楼主
发表于 2013-7-29 14:28:06 |只看该作者 |倒序浏览
1.gif
       首先你要做出像下图一样的6个表情目标,分别是起左嘴角(left_up)、起右嘴角(right_up)、微笑(smill)、左嘴角往下(face_ld)、右嘴角往下(face_rd)、两边嘴角都往下(face_dd),表情目标的名称我都已经标注在模型的头上。
2.jpg
    为标准头添加morpher修改器,并且将所有目标加进通道。调整各通道的数值,表情应该会有变化,只不过不太直观,而且表情通道太多的话,通道列表就显示不全了,调节起来会很麻烦。做好这步后,往下进行。

     在前视图中人头旁边创建一个矩形和圆形,再加一个文字作为控制器的名字放在下面。矩形的长宽都是5。
     将圆形和方形居中对齐后,按住"Alt"键的同时在圆形上点右键,在右键菜单中选择freeze Transform,如下图
3.jpg
    随后可以看到圆形的position控制器多了一个Zero Pos XYZ控制器。
    这样做的结果是,如果你想快速让圆形返回最初位置(方形中心),你可以按住"Alt"键的同时在圆形上点右键,在右键菜单中选择Transform To Zero。圆形马上回到原位。这时表情应该也回到标准状态。
    为了在移动圆形的时候不至于移到方形外面,我们可以给它限制一个运动范围。max8的新功能中有一个limit限制控制器可以帮助我们很快完成这个工作。
    如下图所示,在X Position上点右键,在弹出的菜单中选assign contrller...(指定控制器),然后在列表中选择Float Limit,点OK完成。
4.jpg
    我们知道在max中,x轴向右为正方向,z轴向上为正方向,圆形在原位的时候坐标为0,所以向左或向下移动时,它的x/z位移就会是负值。因为方形的边长是5,圆形正好在它的中心,所以圆形向上下左右移动的时候,最左到最右的距离和最上到最下的距离都是5,因此它在x、z轴向上的位移都在-2.5—2.5(根据矩形大小)之间。
    MAX动画3d max角色表情动画同样对Z Position指定float limit控制器,数值同上。
   
    在max里面可以使用几种方式让一个物体的变化来驱动另一些物体的变化,这里因为涉及到的运算比较复杂,所以只能选择表达式控制器,用圆形的位置来驱动表情数值。
    首先选中已经有morpher修改器的人头,在trackview轨迹视图中找到morpher下面的left_up通道,点右键,在菜单中选择assign controller...,在控制器列表中选择Float Expression(浮点表达式)表达式控制器,如下图:
5.jpg




    我们要确定驱动者用什么来驱动,也就是先找变量。表达式里的变量有两种,scalar是标量,只有一个数值(可以带正负),比如温度、时间、长度、高度、角度等等;Vector是矢量,用多个轴向上的坐标来代表空间中某点的位置或者旋转量和缩放值,一般会用[-3,34,25]这种形式来表示。max里的position、rotation、scale就是矢量,而X position、Y rotation、Z scale这些前面带有具体轴向的数值就是标量。

   现在我们需要两个数值,分别是圆形在x和z轴上的数值,那肯定是标量,因为有具体轴向嘛!

    先在Name后面的栏里填入xp,注意这时Scalar前面有个黑点,处于选中状态,点一下Create,这样就会在Scalar栏里出现xp这个标量。同样创建zp这个标量。然后在Expression栏里写表达式:
if(xp>0,40*xp*zp/2.5,0)

    式子的意思是:如果xp>0,那么表情数值为40*xp*zp/2.5,其实还可以简化成16*xp*zp,不过为了方便计算,我就保留了这个形式,因为当xp、zp达到最大也就是圆圈在右上角的时候,数值为40*2.5*2.5/2.5=100,即角色完全呈现left_up的表情。这里我对zp没有假设是否为正,因为即使它为负值的话,最后结果得到负值,表情也不会有变化。

注意:表达式里面所有字符都要是英文状态下输入,尤其要注意标点符号不要用错,否则会出错或者没反应。
6.jpg
    下面我要把xp指定给圆形在x轴上的位置:点亮xp,找到Assign to Controller这个大按钮,按下去,然后在列表里找到Circle01的Transform项目,点开前面的加号,一直到看到 X position:Float Limit位置,把它点一下,让它变黄,好,点OK结束!
7.jpg
     用同样方法,把zp指定给圆形的Z position:Float Limit。

*表达式:if(xp>0,40*xp*zp/2.5,0)  右嘴角上拉
         if(xp<0,-40*xp*zp/2.5,0) 左嘴角上拉
         if(xp>0,-40*xp*zp/2.5,0) 右嘴角下拉
         if(xp<0,40*xp*zp/2.5,0)  左嘴角下拉


    smill微笑表情的表达式如下图。这里要增加p、q两个标量。
表达式:0.4*zp*(100-p-q)或zp*(100-p-q)/2.5
8.jpg
p代表右嘴角上翘的通道数值,如下图:
9.jpg
q代表左嘴角上翘的通道数值,如下图:
10.jpg
face_dd 两边嘴角都往下的表达式:
-0.4*zp*(100-d-b) 或zp*(100-d-b)/-2.5
11.jpg
   这里也要增加两个标量b、d,分别代表Face_rd和Face_ld通道的数值。(b,d和左右嘴角下拉建立联系)。

   我们设置的工作到此结束,现在移动小圆圈,就可以非常直观而且方便的控制角色的表情。我们还可以添加其他的控制系统来控制其他的面部动画,而且还能用脚本语言来同时设置几个小圆的位置来达到特定的表情,将在后面的教程中进行讲解。

眼睛开闭动画:左右眼各一个控制框,眼闭表达式:-zp*100/10  眼开表达式:zp*100/10
分别做四个表情(左眼开,左眼闭,右眼开,右眼闭)
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2013-7-29 14:45:01 |只看该作者
这个对游戏制作很有帮助
回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

板凳
发表于 2013-7-29 18:02:54 |只看该作者
支持技术分享,希望有更多的交流
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-10 11:50 , Processed in 0.102422 second(s), 35 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部