maya软件中实现实时动力学效果的研究

2019-10-20 09:15房焕祁
艺术大观 2019年28期
关键词:动力学

房焕祁

摘要:动画制作为了追求效果的表现对于物体和环境的空间关系,物体与物体之间的运动关系都有着十分苛刻的要求。在常规的刚体物体运动中,通过学习了相应的物体的运动规律之后,可以通过人眼的观察对物体的物理运动进行判断来作为参考进行制作。但是在柔性类物体的运动中,由于maya软件自身的动力学模拟计算需要一个解算的环节,这就导致一旦所制作的动画中,出现了头发和布料类的物体就需要不断地解算和返修以期达到最好的效果。但是在解算和返修的过程中需要大量的时间和工作量,会拖慢整个制作的进度,长时间的返修和解算会影响制作人员的情绪增加制作时间和工作量,导致作品不能够达到预期的效果。因此在动画制作中实现实时动力学对整个动画制作有着重要的意义。

关键词:maya;动力学;实时动力学

一、maya软件动力学介绍

maya软件是一款集模型制作、角色绑定、动画制作、特效制作以及渲染图形的综合性软件。其功能及其强大,是目前制作三维动画的主流软件。本文中提到的动力学就是maya特效模块中的一个分支。在maya软件中对动力学的定义是指通过软件来描述一个在真实的物理环境中的物体是如何进行移动的物理学分支。maya软件的动力学动画是通过使用了物理学的规则来通过软件计算模拟自然力,maya动力学动画能够计算模拟逼真的物理运动,这一点如果使用传统的序列帧动画来实现会使工作量剧增而且难以实现。

二、在动画制作中使用maya软件实现实时动力学的意义

首先在动画制作中都不能避开物理运动,所有的动画在制作的同时都会遵循物理学定律。抛开特殊的环境和效果不谈,绝大多数的动画制作都是要在一个基本符合物理规律的环境下进行制作的。所以在动画制作的制作中,物理运动规律是必须遵守的一个基本条件。由于必须遵循物理运动规律,在比较完整的物体或者肢体动画制作中所需的制作工作量不是十分繁重,但是一旦进入到一些特定物体,例如布料、头发、衣服等柔性物体的制作中,要制作出真实的物理状态是难以通过序列帧动画的制作方法来实现的,所以maya软件有专门的FX动力学模块应对来对此类情况。

在maya软件的FX模块是有专门的针对头发和布料类别物体模拟的专用设置,但是这些设置有一个明显的缺陷,也就是无法实现实时的动力学模拟效果,虽然有交互式模拟的设置,但是在交互模式下对动画制作有很大的影響,并且每一种动力学设置都需要一个解算阶段,也就是无法在动画制作的过程当中即时的解算动力学效果,这样会衍生出很多的问题。例如动画中最不允许出现的穿帮,在动画制作的过程中,如果物体和物体之间出现了不符合物理学不合理的穿插,这种情况通常被称作穿帮。穿帮会对动画效果产生巨大破坏,会使整段动画显得不真实极大地破坏了动画的表演效果,所以这种情况是绝对不允许出现在动画制作中的。而头发、衣服、和布料类的柔性物体,因其特殊的物理运动规律是十分容易出现穿帮的情况。所以在动画制作中,经常会因为无法及时的观察到这类物体的即时动力学表现而导致出现穿帮,需要再次重新调整动画反复的测试,导致工作量剧增的情况。

动画制作为了追求效果的表现对于物体和环境的空间关系,物体与物体之间的运动关系都有着十分苛刻的要求。在常规的刚体物体运动中,通过学习了相应的物体的运动规律之后,可以通过人眼的观察对物体的物理运动进行判断来作为参考进行制作。但是在柔性类物体的运动中,由于maya软件自身的动力学模拟计算需要一个解算的环节,这就导致一旦所制作的动画中,出现了头发和布料类的物体就需要不断地解算和返修以期达到最好的效果。但是在解算和返修的过程中需要大量的时间和工作量,会拖慢整个制作的进度,长时间的返修和解算会影响制作人员的情绪增加制作时间和工作量,导致作品不能够达到预期的效果。因此在动画制作中实现实时动力学对整个动画制作有着重要的意义。

三、在maya软件中实现实时动力学的两种方式

(一)如何在maya软件中通过动力学曲线和样条线IK配合实现实时动力学

在maya软件中动力学设置有很多种方式,例如头发系统或者是布料系统,我们先对动力学曲线和样条IK配合来实现实时动力学进行介绍。本文中提到的动力学曲线是通过maya软件中的头发系统(Hair System)生成的,它具有头发几乎全部的属性,在控制上和灵活性都十分的强大和方便。而样条线IK是maya软件中骨骼反向动力学设置中的一项功能,通常为体积比较长而且弯曲的关节链对象设定动画pose或者设置动画。

首先创建一根曲线模拟马尾发型的状态:对其命名为Test_curve。然后选中曲线Test_curve在maya软件的FX模块下执行nHair菜单下的动力学华选定曲线命令,使曲线成为动力学曲线。这一步骤是将一个原始的无属性曲线转化成为一个带有动力学模拟属性的曲线,为后续工作做准备。此时在maya软件的大纲视图中原始曲线消失出现了hairSystem1、nucleus1解算器、hairSystem1Follicles组以及hairSystem1OutputCurves组。此时我们需要删除nucleus1解算器,因为在此环节不需要nucleus1解算器进行工作。并且在hairSystem1的属性设置中将使用Nucleus1解算器的选项取消掉,由于删除nucleus1解算器的节点所以在解算设置中需要将Nucleus1解算器关掉。将hairSystem1Follicles组的中心点移动到曲线的起始端,然后在hairSystem1Follicles组下的follicle1节点下的形状节点中将点锁定属性修改为基础,这样动力学曲线的运动会以曲线的起始点为基点进行动力学模拟。此时在打开交互式播放的模拟状态下,移动曲线就能够观察到曲线在模拟动力学运动的效果。此时为了能够让曲线更加接近头发在物理环境下的运动效果,可以对hairSystem1属性中hairSystemShape1节点下的动力学特性菜单中迭代次数增加到8,将刚度增加到0.35。

接下来创建一段骨骼使用样条线IK命令将动力学曲线和骨骼结合成线性IK骨骼。先创建一段骨骼,数量视具体长度而定。打开在装备模块下的骨架菜单中的创建样条线IK控制柄命令的属性,只保留根在曲线上的选项其他选项全部勾选掉。接下来先选择我们创建的骨骼链的根骨骼,再加选末端骨骼,最后在保留之前的选择的骨骼链的根骨骼和末端骨骼的前提下再次加选hairSystem1OutputCurves组下的curve1动力学输出曲线。此时线性IK骨骼制作完成,骨骼能够跟随动力学曲线进行运动。

此时我们将hairSystem1OutputCurves组下面的曲线curve2加载到节点编辑器中,展开它的上下游节点,在展开的节点中在hairSystemShape1节点的菜单下面有一个当前时间的选项是被连接的状态。这个选项连接在time1的节点的输出时间中,也就是说在maya软件中这个动力学曲线的动力学模拟效果是通过时间节点的输入来进行开始和结束模拟的。也就是动力学模拟是通过时间来控制的,但是这个时间是一个独立的时间,和当前的时间是区分开的。只有当这个当前时间开始运行的时候动力学模拟才会开始,否则动力学曲线的模拟是不会运行的。因此我们需要对这个当前时间进行修改和设置。

首先我们需要打断hairSystemShape1下当前时间的连接,然后创建一个定位器locator1,我们通过定位器locator1来模拟当前时间。并将定位器locator1吸附到线性IK骨骼组的末端骨骼上,使用线性IK骨骼组的末端骨骼对定位器locator1进行一个保持偏移的点约束,下面我们使用表达式进行设置。

if(frame!=hairSystemShape1.startFrame)

hairSystemShape1.currentTime = hairSystemShape1.startFrame + 1 + locator1.translateX - locator1.translateX + locator1.translateY - locator1.translateY +locator1.translateZ - locator1.translateZ

else

hairSystemShape1.currentTime = hairSystemShape1.startFrame;

以上表達式的内容是,如果maya软件时间帧数不等于动力学曲线模拟的开始时间,那么动力学曲线模拟时间就等于动力学曲线模拟开始时间加1,并加上定位器locator1的X轴位移,再减去定位器的X轴位移,加上定位器的Y轴位移,再减去定位器的Y轴位移,加上定位器的Z轴位移,再减去定位器的Z轴位移,如果条件不成立那么动力学曲线模拟时间等于动力学曲线模拟开始时间。其目的是使用定位器locator1模拟了动力学曲线模拟的开始时间,通过使用表达式将动力学曲线模拟的时间和当前时间连接,让动力学曲线的模拟时间不在受原时间节点的限制,能够即时的进行动力学模拟,使之能在动画制作中进行更加直观的观察,方便制作节约时间。

(二)如何在maya软件中使用布料系统实现实时动力学

在maya软件中布料模拟系统也是在动画制作中重要的一个环节,布料系统的工作原理和maya软件中的头发系统的工作原理十分类似。也是通过解算后才能展示布料的物理运动效果,所以实现maya软件布料系统的实时动力学效果也需要从解算时间下手。

首先创建一片多边形面片(pPlane1)并将其分段加高,以便于在模拟布料解算时能够有比较精确的效果。调整好大小及位置之后将其所有属性都进行冻结变换,让多边形面片(pPlane1)的通道栏数值都归为默认状态。然后再次创建球型多边形物体(pSphere1)将其设置为被动碰撞物体。为多边形面片(pPlane1)设置布料模拟命令(创建ncloth),此时多边形面片(pPlane1)被设置成布料模拟物体,在大纲中出现了nucleus1、nRigid1、nCloth1三个节点。再次对多边形面片(pPlane1)进行设置,进入多边形面片(pPlane1)的点级别旋转最顶端的顶点设置变换约束,此时大纲中出现了dynamicConstraint1节点。此命令是为了让布料系统能够按照设置进行移动。创建一个控制器nurbsCircle1并添加两个属性,第一个属性TimeOn为枚举型作为开关,第二个属性位浮点型tm。将大纲中dynamicConstraint1节点作为子物体设置到控制器nurbsCircle1的层级下面为方便以后控制物体。然后对变换约束产生的dynamicConstraint1节点进行动画设置播放并测试模拟效果。解算模拟正常后找到nucleus1节点,将其在节点编辑其中展开能够看到布料系统的解算时间和maya软件的时间滑块之间的关联方式。在节点编辑器中显示,时间滑块将时间输入给布料解算系统的当前解算开始时间也就是当前时间选项,这表示在时间滑块运动时布料解算才开始解算。我们需要将nucleus1节点下的被时间节点控制连接的当前时间选项打断,断开时间节点的控制。此时当前时间就是解算模拟的开始时间,打断了时间节点的连接后当前时间选项不受时间节点的控制,表明布料解算模拟的开始时间不再受控制,此时我们通过MEL命令进行连接。

float $tm;

$tm="nurbsCircle1.translateX";

$tm="nurbsCircle1.translateY";

$tm="nurbsCircle1.translateZ";

$tm="nurbsCircle1.rotateX";

$tm="nurbsCircle1.rotateY";

$tm="nurbsCircle1.rotateZ";

$tm="nurbsCircle1.scaleX";

$tm="nurbsCircle1.scaleY";

$tm="nurbsCircle1.scaleZ";

$tm=time1.o;

if(nurbsCircle1.TimeOn==0){

nurbsCircle1.tm+=1;

}

else{

nurbsCircle1.tm=1;

}

以上MEL命令的意思是我们赋值一个变量,让布料解算开始的当前时间和变量连接,变量被赋值了控制器的位移和旋转以及缩放属性,此时变量的值不为零是跟随控制的移动变化的,也就实现了在物体运动的时候,布料解算系统的开始时间不再受时间滑轨的限制。此时控制布料系统解算开始的时间是变量,变量不为0时布料解算的当前时间就不为0也就意味着开始了布料的解算模拟。此时就能实现布料解算的实时运动,并且控制器的两个属性能够控制实时布料解算的开关,以便于在动画制作中能够任意打开或者关闭布料系统的实时动力学效果,方便动画师的工作。

到此通过对IK骨骼和样条线的设置以及布料系统的设置,在maya软件中实现了实时动力学的效果。并且在maya软件动画制作中有很多种方法都能够实现实时动力学的效果,制作方法千差万别但最终的目的都是为了能够使动画制作更加方便和快捷。在众多的为了能够使动画制作的过程变得更加容易和轻松方法中,实时动力学只是极其微小和冷门的一个小分支。动画制作产业是一个密集型的工作产业,在每一个环节都需要大量的时间来设计和制作。而每一个能够行之有效的减少工作量和制作时间的小技巧,都能够一点点的节省动画制作的时间和减少动画制作的工作量。以此来减少大家的工作负担和节约工作时间,使大家的作品能够达到预期的效果。

猜你喜欢
动力学
具反馈控制和Allee效应的偏利共生系统动力学行为(英文)
例谈“等时圆周”结论在动力学中的应用
低汽气比变换催化剂动力学研究
低汽气比变换催化剂动力学研究
地球化学动力学起源现状及发展趋势
用动力学观点解决磁场常见问题的研究
应用动力学和能量观点分析多过程问题
解析动力学中的图象问题
传送带模型中的动力学和能量转化问题
巧用数学知识求解动力学问题梁开展