您好, 访客   登录/注册

MAYA实现龙卷风特效实践

来源:用户上传      作者:

  摘  要: 为了改善特效制作效果,更好的利用MAYA制作動画特效。通过,根据MAYA操作实际情况,以龙卷风特效制作为例,介绍了如何运用MAYA制作龙卷风特效。通过MAYA能够制作出逼真的动画特效。因此,可以在特效制作过程之中合理运用MAYA,进而作出精彩的特效。
  关键词: MAYA;龙卷风;特效
  中图分类号: TP391.41    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.08.054
  本文著录格式:宋玮,黄学军,陈志勋. MAYA实现龙卷风特效实践[J]. 软件,2020,41(08):200-204
  【Abstract】: In order to improve the effect of special effects, better use Maya to make animation effects. Through, according to the actual situation of Maya operation, taking tornado special effect production as an example, this paper introduces how to use Maya to make tornado effect. Through Maya, we can make realistic animation effects. Therefore, we can use Maya reasonably in the process of special effects production, and then make wonderful special effects.
  【Key words】: Maya; Tornado; Special effects
  0  引言
  MAYA软件是Autodesk旗下的三维建模和动画软件,也是现今最为流行三维动画软件,在国外绝大多数的视觉设计领域都在使用maya,即使在国内该软件也是越来越普及,随着计算机性能的不断提升,越来越多的CG镜头被应用到影视作品中,比如《指环王》、《蜘蛛侠》、《哈里波特》、《权力的游戏》等系列作品都出自MAYA。
  为更好地制作龙卷风特效,首先简单介绍龙卷风的形成过程:在高温高湿的不稳定云团中,地面与高空中的空气温差过大,使得热空气迅速上升,冷空气急剧下降,上下层空气对流速度过快形成许多小漩涡。当漩涡逐渐扩大再加上激烈震荡就容易形成大漩涡,当发展的涡旋到达地面高度时,地面气压急剧下降,地面风速急剧上升,形成龙卷风。龙卷风中心的风速极快,破坏力极强,常会拔起大树、掀翻地面物体甚至摧毁建筑物等。
  图1是用Maya实现龙卷风的最终合成图,按制在介绍龙卷风主体整个制作过程之前先简单介绍特效中需要用到的粒子、力场、流体、以及粒子表达式的相关属性和知识点。
  1  粒子系统
  粒子系统主要是用来模拟用基础几何体无法表达的物理现象,比如烟雾、云雾、火焰、水流、爆炸、雷电等。主要用到几个属性。
  发射类型:Maya粒子有点发射、线发射、面发射、体积发射以及从物体发射等几种。
  发射速率:发射器在一秒内发射粒子的数量。
  生命周期:粒子的生存时间,可以永久,指定时间或者指定区间内随机生命值。
  粒子可以通过Goal命令将粒子吸附到几何表面的控制点。
  2  Maya力场
  Maya力场是动力学模拟中不可缺少的一部分,为动力学对象比如粒子、布料、几何体等产生运动所需的力。包括独立场(比如重力场、空气场等)、对象场(由对象产生对对象自身或其他对象产生影响)、体积场(对封闭空间内的动力学对象产生影响)、体积轴场(用Nurbs曲线定义一个轴场,影响该曲线轴场范围内的动力学对象)。主要用到以下几个属性。
  Along Axis:沿轴运动。
  Around  Axis:绕轴运动。
  Away From Axis:远离轴运动。
  Away From Center:远离中心运动
  Away From Center:远离轴心运动。
  Magnitude:场强幅度。
  Turbulence:模拟随时间变化的湍流风的力的强度。
  Turbulence Speed:湍流随时间更改的速度。
  Turbulence Frequency X、Y、Z:控制适用于发射器边界体积内部的湍流函数的重复次数。
  Detail Turbulence:第一个湍流由于惯性衍生出的第二个湍流的相对于第一个湍流的强度。
  3  Maya流体主
  Maya流体主要用来模拟各种大气、液体、爆破等效果[1]。包括动力学流体和非动力学流体两种,动力学流体指遵循流体动力学的物理规律,Maya内部在每一帧都会用相关方程和公式来解算动力学流体。非动力学流体实际上是通过对流体的外观和纹理设置相关动画来模拟流体运动,在运行效率上远快于动力学流体,但由于仅仅只能模拟流体的外观和纹理,实际上运用有限,几乎只能用来模拟2D流体。本文中使用的是动力学流体,主要用到以下几个模块。
  3.1  容器特性
  Base Resolution:基本分辨率,在保持流体的最小单位依然为正方体时,同时调整容器的X、Y、Z三轴的分辨率。可以简单的理解为一个单位立方体中包含流体数量的多少。
  Size X、Y、Z:流体容器在X、Y、Z方向上的单位数量。缩放流体容器大小并不会增加流体容器的单位数量。   Auto Resize:自动调整大小,因为在动力学模拟中流体密度有可能会消散,较小的模拟区域可以提高模拟速度。
  Resize Closed Boundaries:调整闭合边界大小,启用之后流体将沿X、Y、Z方向的边界属性设定来自动调整大小。本文中用自动调整大小以及调整闭合边界大小使龙卷风特效中沿Y方向自动调整大小以节省计算量。
  3.2  动力学模拟
  Dynamic Simulation:动力学模拟部分包括了重力、粘度、摩檫力、阻尼等物理现象以及解算方式等属性。
  Substeps:子步,指在一帧中执行计算的次数,对高密度以及高细节的流体的稳定性和模拟结果非常有用。
  Contents Details:主要包含密度、速度、湍流、温度、燃料、颜色几个部分,下面介绍本文中仅涉及密度、速度、湍流相关属性。
  密度Gradient Force:渐变力指沿密度变化方向上的力,正值使流体逐渐蓬松、负值使流体紧缩,效果类似于Self Attraction and Repulsion(自吸引和排斥),但由于该属性仅对相邻流体进行解算,所以会降低不少的解算时间。
  速度Swirl:可以在流体生成小比例的漩涡和涡流。
  湍流属性与动力场的湍流完全相同。
  3.3  流体着色
  Shading属性包括了流体的透明度、辉光、颜色、不透明度等着色属性。
  4  粒子表达式
  粒子表达式是Maya的Mel语言与粒子本身属性以及自定义属性相结合的结果,可以编写表达式同时控制所有的粒子或者按不同的方式控制每个单一的粒子[2]。分为创建时表达式和运行时表达式两种,创建时表达式在发射粒子或运行动画前时执行,仅仅影响粒子运动的第一帧。运动时表达式在除发射粒子以外的每一帧都执行。可以将粒子在运行时某一帧的状态(包括位置、速度、旋转、缩放等)初始化为粒子第一帧。
  图2是龙卷风主体的制作流程图,可以看到包括了一个由Nurbs曲线、圆环挤压产生的Nurbs曲面,然后再由曲面重建UV后得到第一套粒子系统粒子1,粒子1的运动是连续并且一致的,产生的流体完全无法控制。为实现真实的龙卷风效果,还需要由粒子1发射第二套粒子系统粒子2。为了得到龙卷风外部的湍流运动细节,再由Nurbs曲线创建一个volumeAxis?Fields体积轴场。用于控制粒子2和流体容器的运动细节,粒子2缓存之后作为流体容器的发射器。流体容器产生的流体云,也就是最终形成的龙卷风,由流体自身的动态模拟属性、粒子2、以及volumeAxisFields体积轴场三个部分共同控制。
  4.1  Nubrs曲面部分
  Nubrs曲面由Nurbs曲線和圆环挤压产生,然后通过调整曲面的控制点得到龙卷风的外形,这里需要注意的是Nurbs曲面要删除创建历史,否则在通过Nurbs曲线创建volumeAxisFields体积轴场的时候如果需要调节Nurbs曲线会同样影响到Nurbs曲面的形状。而且为了方便以后的粒子计算,需要重建该柱面的UV的范围为0到1[3-4]。该曲面的主要作用是将粒子1执行Goal命令将粒子1吸附到曲面上。最后制作出的曲面如图3所示。
  4.2  粒子系统1部分
  为模拟龙卷风特效,粒子1需要粒子从上自下沿曲面V方向运动,并且在曲面的U方向上顺时针旋转。
  创建粒子发射器,把发射器放到Nurbs曲面的顶端附近。为方便以后计算以及后期合成,将MAYA的默认帧率设置为25帧每秒,发射器的发射速率Rate设定在500左右。选择发射器产生的粒子1与龙卷风曲面执行Goal命令,目标权重设为1,可以将粒子吸附到龙卷风曲面的控制点上。为了得到自上而下的螺旋线运动,给粒子1添加GoalU、GoalV两个属性,在GoalV属性上添加渐变贴图,并调节渐变方向使粒子自上而下沿曲面U=0的参考线运动。粒子的运动速度由粒子寿命lifespan决定,即lifespan属性值等于粒子从上至下运动所需的时间,这里设置为8秒。在给GoalU属性添加Creation创建时表达式particleShape1.goalU= rand(1,0),可以得到粒子在Nurbs曲面上边缘的随机位置沿曲面自上而下运动,类似下雪的散射效果。在GoalU属性添加Runtime before dynamic运行表达式particleShape1.goalU+=0.015。这里的0.015就是粒子每帧沿U方向的位移增量。到这里已经得到了沿曲面进行自上而下的螺旋运动的粒子1。
  4.3  粒子系统2部分
  粒子系统2由粒子系统1创建,主要作用是完整的模拟出龙卷风的运动轨迹以及外部的湍流细节。
  选择粒子1,执行nParticles菜单下的Emit from Object,发射类型设置为Omni,发射速率22左右。粒子2是在粒子1的基础上发射粒子,生命周期需要设置得短一些,粒子2设置为随机生命,Lifespan为0.25,Lifespan Random为0.125,粒子2的生命值在(0.125,0.375)这个区间中随机取值。为模拟龙卷风的效果,粒子2的运动速度相对粒子1更慢一些,把Conserve值设为0.75,该属性表示粒子的相对速度值。这里得到的粒子2系统只是从粒子1系统直接发射出的散射效果,并没有龙卷风外形中的湍流效果。
  接下来为粒子2添加Volume Curve曲线控制,选择nurbs曲线,执行Fields/Solvers菜单下的Volume Curve命令,可以得到一段和曲线形状走势相同的体积轴场volumeAxisFields,作用范围就是在体积轴场的封装范围内,用这个场去控制粒子2的发射形态可以得到很好的龙卷风外形[5-6]。设置volumeAxisFields的section Radius半径值为8左右,添加Curve Radius的控制点,使体积轴场的外形与开始创建的NURBS柱面相似并且完全把柱面封装在体积轴场以内。设置好体积轴场的外形之后选择第二套粒子以及体积轴场执行Fields/Solvers菜单下Assign to select命令使体积轴场与第二套粒子关联。设置体积轴场的Along Axis、Away From Center值为0,这两个值会影响第二套粒子偏离轴以及偏离中心的值,龙卷风特效中并不需要粒子偏离轴以及偏离中心。现在的第二套粒子运动与添加体积轴场之前的运动并没有太大区别,为了得到龙卷风外外层那些类似小溪湍流的形体效果,将体积轴场的Turbulence、Turbulence Speed、Detail Turbulence值设置为1,Turbulence Frequency X、Y、Z值设为0.75。现在得到的粒子运动与龙卷风就很相似了,也可以细调之前的第二套粒子的生命周期区间,Turbulence相关的属性值,直到符合效果为止。在调整结束之后必须要为粒子做缓存,否则因为随机值的存在粒子在每次播放的运动都不可能完全与上一次一致,这对后期的渲染合成来说是致命的,因为一旦合成需要调整某一帧画面的时候,无法再通过渲染得到完全一致的画面。缓存的目的就是把粒子的运动结果保存到磁盘上,保证每次粒子运动的一致性。选择第二套粒子执行nCache中的Crate Particle Disk Cache命令,设置缓存目录以及缓存更新方式即可。接下来使用第二套粒子以及MAYA流体实现龙卷风效果。   4.4  流体云部分
  流体云部分是最后实际形成的龙卷风主体,粒子2系统作为流体云的发射器负责流体的发射,体积轴场作为外部场对流体产生影响,流体自身的动态模拟、着色等都在流体云部分进行设置。
  创建3D流体容器,并且在容器中不添加任何发射器。将容器的位置移动到龙卷风的顶端附近,将流体容器的分辨率设置为80左右,该分辨率只是在测试过程便于观察的折中分辨率,设置过高影响测试速度,太低无法体现效果。
  流体容器的X、Z方向的面积大小要足以包含第二套粒子,让流体在扩散的过程中不至于触碰到容器。这里设置SizeX、Z属性值为24。Y方向会用跟随粒子的方式进行自动大小调节,SizeY给一个初始值5,以避免在最开始粒子运动的时候尺寸太小流体触碰到容器。BoundaryX、Z设置为bothsides,BoundaryY设置为Yside。在Auto Resize选项里勾选Auto Resize选项,取消勾选Resize Closed Boundaries选项,这样就指定自动调整大小为Y方向。为保证自动大小调节的过程中流体不会触碰到容器壁,Auto Resize Margin值设置为3。
  流体模拟龙卷风特效中只需要流体的动力学以及密度两个属性,首先设置流体的动态模拟,Gravity重力设置9.8。由于龙卷风特效中并不需要viscosity粘度以及Friction摩檫力,设置为0。Damp阻尼可以控制流体的矢量速度,该属性的大小值很敏感,这里设置为0.03。High Detail Solve高质量解算设置为All grids。由于流体是从粒子产生的,substeps设置为2或者更高一些,并且勾选Emit in substeps选项,以避免随机寿命很小的粒子不能发射出流体。Solver Quality解算质量可以设置得高一些,比如200左右。这里的解算只是对流体的运动进行解算。在Density面板下设置Dissipation耗散值为3左右,Gradient Force渐变力可以影响流体的膨胀,这里设置为45。在Velocity面板下设置Swirl旋流值为6左右,Noise噪声值为0.25。Turbulence面板下设置Strength值为0.35,Frequency、Speed值为0.5。最后选择第二套粒子作为流体容器的发射器。
  選择fluidEmitter1,将发射类型设置为Omni,为得到细腻的流体效果,Max Distance设置为0.1,这里的值是每个粒子发射的流体的宽度,0.1就是0.1个网格单位,默认单位是厘米。Rate值设置为1200左右。流体的热量和燃料通常用来模拟火焰、岩浆等,为节约计算资源,在Fluid Attributes面板下关闭发射Heat method、Fuel method。在之前制作的第二套粒子运动状态已经很好的模拟出龙卷风效果,在Emissions Speed Attributes面板下设置Speed Method的方式为Replace,使粒子发射的流体继承流体的速度,Inherit Velocity设置为1或者更高一些。到这里流体的动力学部分就已经设置完成,最后将流体与之前的体积轴场相关联即可。
  流体的着色,这个属性与动力学不同,这里的属性在做了流体缓存之后依然可以根据缓存文件来进行调整,并不需要重新缓存一次。主要是透明度、阴影、颜色等设置。在透明度面板下的Input Bias值可以很直观的影响流体的厚度,Lighting面板下必须勾选Self Shadow自阴影选项,否则流体看上去就是白糊糊一篇,没有层次感。其他选项可根据审美需要调整。
  流体的动力学以及外观属性已经设置完成,根据工作站的性能设置流体的基本分辨率,分辨率不宜低于150,否则会丢失很多细节甚至整个形态都会发生变化。也不宜过高,太高的分辨率在视觉上并没有多少提升,但是计算量几乎是以指数倍数增长的。这里给出一个参考值,基础分辨率设置200,3.4G的8线程Cpu计算完整的一次龙卷风特效大约需要47小时左右。计算完成之后对流体进行缓存,由于龙卷风特效中并没有使用流体的温度、燃料、颜色以及纹理属性,取消勾选这些选项可以提高缓存的速度。为方便后期管理缓存文件设置为指定时间范围内一个文件,由于缓存文件相对较大,本文中最后得到的缓存文件约为90G,所以缓存文件格式应选择mcx格式,该格式使用64位索引创建,大小可以超过2G,mcc使用32位索引创建,单个文件不能超过2G。
  图4为本文创建出的龙卷风主体的动画截图,可以看到外形基本和之前的Nurbs曲面保持一致,而且龙卷风有自上而下逐渐产生的过程,在流体自身的动力学属性以及体积轴场的作用下,龙卷风外部有很好的湍流以及消散细节。顶部积云以及底部龙卷风两个组成部分的创建过程与龙卷风主体相同,仅仅是外形和细节上的区别,这里不再赘述。需要注意的是顶部积云与底部龙卷风的速度与龙卷风速度不同,顶部积云相对龙卷风主体的旋转速度要慢一些,底部龙卷风的旋转速度相对龙卷风主体要稍快一些。在制作过程中流体旋转速度就应该相应的设置得更慢或者更快一些。
  4.5  地面尘埃
  图5是地面尘埃的创建流程图,地面尘埃相对龙卷风来说要简单一些,仅仅需要一套粒子系统即可完成,基本思路是给粒子系统添加重力场,使粒子与地平面发生碰撞,再给粒子添加体积场,使粒子绕场中心旋转,缓存之后使用几何体做粒子替代就可以渲染输出了。这里简单介绍下粒子运动以及粒子替代的基本方法。
  创建一套粒子系统,将发射类型设置为volume,发射速率为1500左右,即每秒发射1500个粒子。再将volume的类型设置为Cube立方体,Cube的面积相比之前制作的龙卷风相比要足够大。发射器的Away From Center以及Away From Axis属性设置为0。将时间线长度设置为10秒,播放完动画可以得到约15000个粒子。尽管粒子的数量越高就显得越真实,但这里粒子的总数不宜过高,否则导入龙卷风特效中会遮挡住大部分龙卷风,视觉效果并不好。然后对粒子进行初始化,再将发射器的发射速率更改为0。创建一个地平面,面积至少要保证粒子不会掉到地平面以外。给粒子添加重力场,对粒子和地平面执行碰撞命令,resilience弹跳、Friction摩擦、offset偏移值保持默认。   添加一个VolumeAxisField体积轴场,将Volume Shape设置为球形。这里需要注意的是只用到体积轴场的上半球,将体积轴场的球心位置在地平面稍微往下一点的位置,由于粒子会与地平面碰撞不会掉落到地平面以下,也就保证了只有上半球影响到粒子。如果下半球也影响到粒子,将在调整粒子运动上带来更多的步骤以及不可控因素。
  体积轴场Around Axis属性值的正负表示粒子围绕圆心做顺时针还是逆时针运动,为了和龙卷风的旋转方向一致这里设置为–8,Magnitude值设为8,Turbulence湍流设置1,Turbulence Speed设置为0.125,Detail Turbulence设置为1。粒子的Conserve值设置为0.95。这里可以通过不断调节属性以及多次初始化粒子得到满意的动态效果,调节完毕之后为粒子创建缓存文件。
  粒子替代在测试阶段为了便于观察仅需要基础的立方体、球体、圆柱体、圆锥体即可,但这里需要注意的是所有替代几何体的都需要做物体冻结,即所有几何体的位置、旋转值为0,缩放为1。并且位于坐标原点。否则在进行替代的时候会出现偏移。为粒子添加每粒子自定义属性,主要用于几何体的随机替代以及每粒子自转、缩放、速度属性。这里的表达式与之前龙卷风主体粒子1系统的表达式类似,给替代Id一个随机值可以得到几何体随机替代的效果,给自转、速度属性一个初始的随机值以及一个很小的每帧增量就可以得到每个几何体相对运动的随机效果。给缩放一个随机值就可以由一个几何体产生很多大小不同的几何体。可以大大减小替代几何体的数量。需要注意的是这里所有的表达式需要在创建时运行,但仅由于之前对粒子做了初始化处理,所以这里粒子的创建表达式并不会对所有粒子进行取值。比如几何体随机替代,在创建时给出了随机值,但實际上在第一帧并不会随机替代几何体,仅仅会把粒子替代为Id为0的几何体。如果把随机表达式写到运行时,则会发生每一帧几何体都在不停的随机变化,比如立方体在下一帧变为球体等。解决方法比较取巧也相对简单,将随机表达式写到运行时,播放动画,把效果满意的一帧对粒子进行初始化,再删掉运行时的随机表达式,就可以得到随机替代的几何体。自转、速度、缩放也可以用同样的方法得到满意的随机值。对粒子替代的动态效果满意之后可以直接将所需替代的几何体直接添加到替代节点并删除之前的立方体、球体、圆柱体、圆锥体的测试替代几何体即可。
  最后再介绍下龙卷风特效的渲染,Maya2017版本以来引入了新的Arnold渲染器,并且不再提供之前的MentalRay渲染器。Arnold渲染器相对于MentalRay渲染器更简单一些,不再像之前MentalRay渲染器需要进行多次测试才能得到较好的渲染结果。在本文的龙卷风特效中添加了用一张Hdr贴图控制Sky-dome light,然后再给了一个平行光进行补光就可以得到不错的渲染结果。在粒子替代方面为了节省渲染时间也仅仅使用了几种树叶作为替代。为了后期合成还必须要将各部分分层渲染以及渲染出不同的通道,例如AO、Shadow、reflection等。
  图6为最终渲染出的动画文件,流体部分已经很好的模拟出龙卷风的效果,与龙卷风伴随的雷电效果在合成软件中完成相对更为方便。地面尘埃部分如果需要更好的效果可以使用几套粒子共同完成,比如离龙卷风距离较近的部分使用一套粒子,粒子替代可以用一些稍大的几何体比如树干、石块等,旋转速度可以稍快一些。较远的部分用树叶等替代,旋转速度也可以稍慢一些,使尘埃部分更有体积感和层次感。
  5  结语
  MAYA是当前最为流行的一款三维动画软件,其在视觉领域中有着非常广泛的应用。上文结合龙卷风特效制作,对MAYA进行了介绍。通过最终效果图可以看到,利用MAYA制作出的龙卷风特效效果逼真。因此,可以利用MAYA根据实际需求来制作出各种所需的动画特效。
  参考文献
  [1] 陈建彬. 基于Maya的流体特效表示和转化工具研发[D]. 山东大学, 2019.
  [2] 胡晓辉. MAYA粒子特效动画模块研究[J]. 科技创新与应用, 2018(5): 193-194+196.
  [3] 胡晓辉, 肖新元. MAYA的UV和材质渲染无损传导研究[J]. 科技广场, 2017(10): 43-46.
  [4] 周彦鹏. 基于Maya技术的数字游戏场景设计与制作[J]. 艺术科技, 2017, 30(3): 105.
  [5] 刘永刚. Maya粒子表达式应用——Crowded Bugs特效制作[J]. 影视制作, 2020, 26(1): 66-74.
  [6] 李伟. Maya在影视动漫产业中的应用[J]. 信息与电脑(理论版), 2019(15): 155-156.
转载注明来源:https://www.xzbu.com/8/view-15321590.htm