注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

心语静听

http://1xin.blog.163.com/

 
 
 

日志

 
 
关于我

漫画作品: 《少年漫画》发表《友情的力量》《自强之梦》《武者之心》,《科幻大王》发表《埃尔的憾事》。社科出版社人猿泰山、地心之旅系列小说插图和封面。 动画个人作品:《甄子丹动作动画》、《武之梦 A Warrior's Dream》。 参与动画作品: 《Everlasting》、 《现代广告》、 《墙——献给母亲》、 《海啸》动画MV、 奥运福娃动画宣传片、 残奥会福牛动画宣传片、 联想thinkpad x300官网动画、 央视专题片《水问中国》三维特效、 《功夫兔3》。

网易考拉推荐

3dsmax8的表情控制教程(1)  

2006-03-18 01:38:42|  分类: 三维动画 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
3dsmax8的表情控制教程(1)
——逸心 编写 2006/03/18
半夜写教程我容易吗?请不要随便转载和发表,谢谢!
图片显示不清的请点击观看大图。
 

想像上图一样,用一个控制器方便的控制几种表情的变化吗?请跟我一步一步来。
 
首先你要做出像下图一样的6个表情目标,分别是起左嘴角(left_up)、起右嘴角(right_up)、微笑(smill)、左嘴角往下(face_ld)、右嘴角往下(face_rd)、两边嘴角都往下(face_dd),表情目标的名称我都已经标注在模型的头上。
 
 
为标准头添加morpher修改器,并且将所有目标加进通道。调整各通道的数值,表情应该会有变化,只不过不太直观,而且表情通道太多的话,通道列表就显示不全了,调节起来会很麻烦。做好这步后,往下进行。
 
在前视图中人头旁边创建一个矩形和圆形,再加一个文字作为控制器的名字放在下面。矩形的长宽都是5,如下图所示。
 
 
将圆形和方形居中对齐后,按住"Alt"键的同时在圆形上点右键,在右键菜单中选择freezeTransform,如下图。
 
 
随后可以看到圆形的position控制器多了一个Zero PosXYZ控制器,如下图。
 
 
这样做的结果是,如果你想快速让圆形返回最初位置(方形中心),你可以按住"Alt"键的同时在圆形上点右键,在右键菜单中选择TransformTo Zero。圆形马上回到原位。这时表情应该也回到标准状态。
 
 
为了在移动圆形的时候不至于移到方形外面,我们可以给它限制一个运动范围。max8的新功能中有一个limit限制控制器可以帮助我们很快完成这个工作。
 
如下图所示,在X Position上点右键,在弹出的菜单中选assigncontrller...,然后在列表中选择Float Limit,点OK完成。
 
 
不好,又出现一个面板!放松,像下图一样,把上限和下限的数值指定好,就可以关掉它了。为什么取这两个数值?我们知道在max中,x轴向右为正方向,z轴向上为正方向,圆形在原位的时候坐标为0,所以向左或向下移动时,它的x/z位移就会是负值。因为方形的边长是5,圆形正好在它的中心,所以圆形向上下左右移动的时候,最左到最右的距离和最上到最下的距离都是5,因此它在x、z轴向上的位移都在-2.5—2.5之间。
 
 
同样对Z Position指定floatlimit控制器,数值同上。设定好后如下图所示。
 
 
下面来让圆形的移动控制表情!
 
在max里面可以使用几种方式让一个物体的变化来驱动另一些物体的变化,这里因为涉及到的运算比较复杂,所以只能选择表达式控制器,用圆形的位置来驱动表情数值。
 
首先选中已经有morpher修改器的人头,在trackview轨迹视图中找到morpher下面的left_up通道,点右键,在菜单中选择assigncontroller...,在控制器列表中选择FloatExpression表达式控制器,如下图:
 
 
现在弹出来一个表达式的对话框。不要担心,表达式只会用一些逻辑判断和初中数学的知识,不难,关键是要找出物体之间的联系,并把这种联系用规范的语句写出来。
 
首先我们要确定驱动者用什么来驱动,也就是先找变量。表达式里的变量有两种,scalar是标量,只有一个数值(可以带正负),比如温度、时间、长度、高度、角度等等;Vector是矢量,用多个轴向上的坐标来代表空间中某点的位置或者旋转量和缩放值,一般会用[-3,34,25]这种形式来表示。max里的position、rotation、scale就是矢量,而Xposition、Y rotation、Zscale这些前面带有具体轴向的数值就是标量。
 
现在我们需要两个数值,分别是圆形在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没有假设是否为正,因为即使它为负值的话,最后结果得到负值,表情也不会有变化。
 
注意:表达式里面所有字符都要是英文状态下输入,尤其要注意标点符号不要用错,否则会出错或者没反应。
 
 
下面我要把xp指定给圆形在x轴上的位置:点亮xp,找到Assign toController这个大按钮,按下去,然后在列表里找到Circle01的Transform项目,点开前面的加号,一直到看到X position:FloatLimit位置,把它点一下,让它变黄,好,点OK结束!
 
 
用同样方法,把zp指定给圆形的Z position:Float Limit。
 
 
这时候向右上角移动圆圈,应该会看到角色的左嘴角往上翘了。
那么剩下的重复工作就交给你了,下图中所有的xp、zp都是指定给圆的Xposition:Float Limit和Z position:FloatLimit。右嘴角上翘的表达式如下:
if(xp<0,-40*xp*zp/2.5,0)
 
 
smill微笑表情的表达式如下图。这里要增加p、q两个标量。q、p是代表左、右嘴角上翘的数值,p数值在0到100变化时,q此时肯定是0,小圈的xp值是-2.5到0,smile的数值s与p正好是s=100-p的关系,同理小圈的xp在0到2.5时s=100-q。最终整合起来就是s=100-p-q,如果小圈的zp值=0,x=0,此时为初始表情,smile值也应为0。故s=0.4*zp*(100-p-q)。
0.4*zp*(100-p-q)
 
 
p代表右嘴角上翘的通道数值,如下图:
 
 
q代表左嘴角上翘的通道数值,如下图:
 
 
Face_rd 左嘴角向下的表达式:
if(xp<0,40*xp*zp/2.5,0)
 
 
Face_ld 左嘴角向下的表达式:
if(xp>0,-40*xp*zp/2.5,0)
 
 
face_dd 两边嘴角都往下的表达式:
-0.4*zp*(100-d-b)
 
 
这里也要增加两个标量b、d,分别代表Face_rd和Face_ld通道的数值。
 
 
 
我们设置的工作到此结束,现在移动小圆圈,就可以非常直观而且方便的控制角色的表情。我们还可以添加其他的控制系统来控制其他的面部动画,而且还能用脚本语言来同时设置几个小圆的位置来达到特定的表情,我将在后面的教程中进行讲解。
  评论这张
 
阅读(306)| 评论(10)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017