3D教程-表达式动画入门
作者:网友整理魔方还原器(魔方学院)v1.2 40.28M / 简体中文
点击下载瑜伽入门教程免费版(瑜伽) v2.8.0 安卓版 23.88M / 简体中文
点击下载韩语快速入门经典教程安卓免费版(韩语入门基础教程) v1.2 手机版 28.39M / 简体中文
点击下载先说一点常识:
人体的重心和双腿的数学关系,比如我们迈腿走100个单位,中心走多少?----50!
假设腿一为 pos1腿二pos2,中心的位置公式知道了吗?----(pos1+pos2)/2
pos1和pos2是表明位置和方向的,所以我们称之为“向量”。
表明重量、长度、或者任何没有方向的量叫“标量”。比如半径。
不管向量和标量,都可以在3ds max中随便起名子,我们可以自由的定义他们,比如我可以叫他们pos1,可以叫foot1,但是不能用中文,即便是中文版也不行。
在max表达式中,加法和减法用“+ ”和“ - ”表示,乘法和除法分别用“ * ”和“ / ”表示
下边开始我们的实例:
实例一,沿正弦曲线运动。
在顶视图中建一个半径为20的球。选择球体,在“运动”面板内的“指定控制器”展卷栏内选择 位置:位置 XYZ行,并点击“指定控制器”按钮,在选择控制器对话框中选择“位置表达式”控制器,然后点击“确定”按钮。
这时会弹出位置“表达式控制器”的相应菜单。在此对话框的右上方有一个很大的对话窗口,在这个窗口中输入如下的公式:[50*S,20*sin(720*S),0]然后按下对话框下方的“计算”按钮进行计算。
播放一下看看是什么效果?是一个正弦曲线!!在顶视图打开运动轨迹,如下图:
下面我来解释这个公式
方括号:方括号代表物体运动的三维矢量,在3ds max中凡是方括号里面都拥有3组数字,这三组数字可以叙述物体的空间位置,每组数字之间都用逗号隔开。
第一组数字:50*S,这组数字表明物体在X轴向上的运动,S(一定要注意“大写”)是一个时间变量,它的数值变化与时间帧数成正比,每秒中包含的帧=1S。有了这样的基本概念50*S这样的一组数就说明随着我们播放动画S的数值就会越来越大,因此50*S的计算结果也会越来越大,物体在X轴上的运动距离也会越来越远。其中50是比例数值,此数值越大距离越远。
第一组代表x轴的数值,第二组是y ,第三组是z。
第二组数字:20*sin(720*S),这组数字表明物体在Y轴向上的运动。S的含义与刚才的解释是一样的。Sin是正弦函数,它可以绘制曲线和波浪线。720决定了“波”的数量,如果你将此数值变小就会看到运动中“波”的数量少了。20决定了“波”震荡的范围,增加或减少此数值可以使“波”的幅度变大或变小。
第三组数字:0,这组数字表明物体在Z轴向上的运动。0表明在Z轴的空间坐标为0。
如果你改了一下数值,要计算一下才能得到新的结果。彻底明白了吗?
呵呵,对,也许你已经想到圆的参数方程,x=r* cosθ,y=r*sinθ。好,第二个例子。
第二个例子 圆形和椭圆运动
在公式对话框中输入如下的公式:[50*cos(360*S),50*sin(360*S),0]然后按下对话框下方的 按钮进行计算,如下图所示:
这组公式中,50代表运动的半径,改变此数值的大小会改变圆的大小。360表明一秒中内完成一次圆周运动,如果你把此数值改为720则表示一秒中内完成两次圆周运动。如果你将其中的一组半径值改为100,我们将得到椭圆运动。如下图所示:
[50*cos(360*S)/S,50*sin(360*S)/S,0]然后按下对话框下方的“计算”按钮进行计算。这样我们将得到螺旋动画。
公式比较长,我们可以在逗号后边用回车换行
在这组公式中“/S”表明圆周运动的半径将随时间推移而缩小,因此我们得到的是螺旋动画。由于初始时间S为0,除以一个接近0的数所得的结果很大,所以如果你觉得螺旋的起始位置需要调整的近一些可以修改公式为[50*cos(360*S)/(S+0.4),50*sin(360*S)/(S+0.4),0],这样在开始时除数的数值就不是0而是0+0.4=0.4了。结果见下图:
[page]
实例三 下面我们要把曲线运动改为小球弹跳
1、在公式对话框中将原公式修改为[50*S,0,20*sin(720*S)]并计算,播放动画,这是一个标准的sin曲线,我们觉得球运动的没有弹性,软绵绵的。
2、我们要修改它,在公式对话框中将原公式修改为[50*S,0,abs(20*sin(720*S))]并计算,播放动画,这时我们发现小球的波形运动已经变为了弹跳运动。abs为“绝对值”函数,这种类型的函数可以将计算结果的负值变为正值,比如abs(-5)=5。
3、如果你想模拟弹跳越来越低的动画可以将原公式修改为[50*S,0,abs(20*sin(720*S))/(S+0.3)]然后按下对话框下方的“计算”按钮进行计算。播放动画看看。怎么样?“咚。。。。咚。。。咚。。咚咚咚咚。。。。”。
实例四 把小球在两个乱动的物体间跳来跳去
1、在3ds max中制作两个方块,然后让他们随便动画,可以随意做几个关键帧。
2、再做一个小球。
我们这个个练习要把小球在两个乱动的物体间跳来跳去。
选择球体,在“运动”面板内的“指定控制器”展卷栏内选择位置:位置 XYZ行,并点击“指定控制器”按钮,在选择控制器对话框中选择“位置表达式”控制器,然后点击“确定”按钮。
左侧有建立量值的对话框,可以建立标量和向量,在名称栏内写一个名字“pos1”
然后选择“向量”,之后“建立”pos1这个向量。在下方的向量值列表中会出现名字“pos1”
选择这个名字,然后指定给Box01方块的 位置:位置 XYZ控制器。
再用同样方法建立pos2,指定给Box02方块的 位置:位置 XYZ控制器。
在公式对话框中输入(1+sin(360*S))/2*(pos1-pos2)+pos2然后按下对话框下方的计算按钮进行计算。这时我们发现小球可以自动完成弹跳运动。
这个式子为什么能够控制小球在两个方盒间来回运动呢?我解析一下两端的情况:当sin(360*S)为1时,(1+sin(360*S))/2=1,式子就成为 1*(pos1-pos2)+pos2=pos1,也就是说小球的位置为pos1,即Box01的位置。
当sin(360*S)为-1时,(1+sin(360*S))=0,也就是(1+sin(360*S))/2*(pos1-pos2)=0,所以小球的位置为pos2,即Box02上。
中间状态自己想象咯….
[page]
实例五 自动滚动的圆球
制作球体的滚动动画时,如果能够根据球的移动距离而自动计算出球的旋转角度将为我们的动画制作提供很多方便,在这个例子中我们来尝试解决这个问题。
1、做一个半径为20的球体,在球体外面建一个虚拟物体,将虚拟物体与球体对齐。然后用链接工具使球体成为虚拟体的子物体。
3、选择球体,在 “运动”面板内的“指定控制器”展卷栏内选择 旋转: Euler XYZ\X 旋转: Bezier 浮点行,并点击“指定控制器”按钮,在选择控制器对话框中选择“浮点表达式控制器”,然后点击“确定”按钮。
注意:这里只选旋转的Euler XYZ中的一个轴X,不选Y和Z轴。简记作Euler XYX\X。
4、在表达式控制器的对话框左上方的名称栏中输入Radius并选择下方的“标量”选项,然后点击“建立”按钮,这样我们就定义了一个名称为Radius的标量。做完这样的操作,下方的“标量”栏中将会显示Radius的字样。选择这个字样后点击下方的 按钮,然后在弹出的对话框中设定标量值=20。这个数值是球体的半径值。
5、在表达式控制器的对话框左上方的“名称”栏中输入Ymov并选择下方的“向量”选项,然后点击“建立”按钮,这样我们就定义了一个名称为Ymov的“向量”。做完这样的操作,下方的“向量”栏中将会显示Ymov的字样。选择这个字样后点击下方的指定控制器按钮,然后在弹出的控制器选择对话框中选择Dummy01的 位置:位置 XYZ 行。这样就设定Ymov这个向量=Dummy01的位置。
6、在公式栏输入如下的表达式:degToRad(360*(Ymov.y/(Radius*2*pi)))。在这个公式中degToRad是角度转弧度的函数,Ymov.y表明这里的数值使用Ymov这个矢量的Y轴数值。Radius是我们定义的标量,它的大小等于球的半径。Pi=3.14159,是max内定义的常量。现在你可以拖动虚拟物体的Y轴进行移动,我们看到球自动的发生旋转,但旋转的方向反了,你可以在整个的公式前增加“-”号。最后的公式为:-degToRad(360*(Ymov.y/(Radius*2*pi)))。贴个棋盘格的位图可以看得更清楚一些。
7、顺便提一下:圆周长=2*pi*半径。这样做的滚动是非常真实的,比如在做汽车的轮子的滚动时可以采用此法。
实例六 if表达式的应用,这个表达式有免费视频,但还是在此贴出来。
1、if判断语句是表达式控制器的重要工具,它可以教会计算机识别不同的状态从而地动设置动画。在下面的例子中我们将使用if判断语句让计算机分析摄影机与圆柱体的距离关系,使摄像机离圆柱体远时圆柱体的片断数自动减少,相反当摄像机离圆柱体近时圆柱体的片断数自动增加。
2、建立一个圆柱体,然后建立一个目标点摄像机,目标点对准圆柱。
3、选择“圆柱体”打开“曲线编辑器”图表,在浏览器中选择“高度分段”层级。
4、在“高度分段”层级上点击右键选择“指定控制器”命令。在新弹出的控制器选择框中选择“浮点表达式”控制器。
5、在表达式控制器的对话框左上方的“名称”栏中输入Maxsegs并选择下方的“标量”选项,然后点击“建立”按钮,这样我们就定义了一个名称为Maxsegs的“标量”。做完这样的操作,下方的“标量”栏中将会显示Maxsegs的字样。选择这个字样后点击下方的按钮,然后在弹出的对话框中输入100。这样就设定Maxsegs这个标量=100
6、用同样的方法创建新的标量Height。设置Height=100。
7、在表达式控制器的对话框左上方的Name栏中输入Camera并选择下方的“向量”选项,然后点击“建立”按钮,这样我们就定义了一个名称为Camera的“向量”。做完这样的操作,下方的“向量”栏中将会显示Camera的字样。选择这个字样后点击下方的 按钮,然后在弹出的控制器选择对话框中选择Camera01的“位置: 位置XYZ控制器”。这样就设定Camera这个 向量= Camera01的位置。
8、用同样的方法创建矢量Myself, 点击下方的 按钮,然后在弹出的控制器选择对话框中选择Cylinder01的“位置: 位置XYZ控制器”。这样就设定Myself这个 向量= Cylinder01的位置。
9、在公式框中输入:
if(length(Camera-Myself)>35,3 +(50*Height)/length(Camera-Myself),Maxsegs)
(由于这个公式比较长你可以在逗号后换行)然后按下对话框下方的 按钮进行计算。现在你可以拖动摄像机的位置观察圆柱体高度上的片断数的变化。在此公式中if判断由三段公式组成,其含义为当摄像机与圆柱的距离大于35时,圆柱体的片断数按照第二组公式计算,当摄像机与圆柱的距离小于35时,圆柱体的片断数为100。其中length是计算距离的函数。
OK That's all!
小结一下:
任何的函数后面都要跟一组小括号,例如:abs()sin()cos()length()等,我们可以用函数列表FunctionList按钮察看里边都有什么函数,以及它们的用法:
里边有我们在该教程中使用的绝对值(Absolute Value)函数,常量(constant)e=2.71828…pi=3.1415…,e的x次方exp(x), ceil(x) 返回x的进一近似值整数,比如3.2返回4,floor(x)用去尾法返回x的近似值整数,比如5.7返回5。mod(x,y)返回x/y的余数。noise(x,y,z)是一个3维噪波函数。pow(x,y) 返回x的y方,等等….
这只是表达式动画的一个入门,希望大家深入研究,掌握并能够灵活使用这种省时省劲,效果尤佳的方法制作动画。
加载全部内容