maya制作中山舰 海洋篇

作者:大山转稿【wingofstar】 来源:飞特网会员投稿教程 浏览次数:加载中... 网友评论 0

maya制作中山舰模型教程地址:http://3d.fevte.com/maya/jm/jm-24945.html

maya制作中山舰 绑定篇教程地址:http://3d.fevte.com/maya/dh/dh-24947.htmlmaya制作中山舰 海洋篇 飞特网 maya建模教程 

fevte编注:更多maya角色教程讨论交流和maya作业提交请进入飞特论坛三维作业板块,地址:http://bbs.fevte.com/forum-54-1.html

具体的操作步骤如下:

1.创建海洋。
从maya的visor库中拖入一个流体海洋的实例。这个实例包含了海洋动态和海面大气效果,是很好的范本,可以在它的基础上更改设置。

maya制作中山舰 海洋篇 飞特网 maya建模教程2.匹配场景单位比例。对整个海洋相关的元素成组,然后scale增大为10倍;而海洋材质的scale数值设定为0.1。

maya制作中山舰 海洋篇 飞特网 maya建模教程

接着增加一些海浪泡沫,根据需要的效果微调一些渲染细节。为了得到较为真实的效果,可以找一些照片进行参考。
海洋材质是基于世界空间的uv坐标,因此波浪大小和其他海洋参数不会受到几何体的缩放的影响。对nurbs平面可以进行任意的缩放。

maya制作中山舰 海洋篇 飞特网 maya建模教程

3.制作航船和海洋的相交线。
(1) 创建同步海洋运动的nurbs曲面。
创建海洋时默认生成的previewplane只是用于交互式预览,它既不能被渲染也不能发生动力学碰撞,因此我们需要创建一个特别的nurbs表面来弥补这些不足(默认的圆形nurbs表面与渲染形态不一样,所以不能用来做动力学碰撞)。
在时间栏下方的命令输入栏中,输入“oceannurbspreviewplane 50 50 oceanshader1”,然后按enter回车键执行命令,稍等一会就可以得到一个新的nurbs预览表面,它的行为和之前的oceanpreviewplane是一样的,但它可被渲染并能应用于通常的几何体动力学。因为需要此平面和船底发生相交,因此将nurbs放大至和航船长度差不多。
oceannurbspreviewplane 是maya内置脚本库中的一个mel脚本,目前还没有界面化,是个隐藏命令。【oceannurbspreviewplane 50 50 oceanshader1】:“50 50”是nurbs曲面的分辨率,一旦创建便不能更改;“oceanshader1”是场景中海洋材质的名称。如果海洋较为平静,使用20以下分辨率即可。

maya制作中山舰 海洋篇 飞特网 maya建模教程(2) 创建船体和海洋nurbs曲面的相交线。
创建一个和船壳差不多的nurbs模型。我使用建模时保留下来的nurbs曲线放样而成,多数情况下,我们也可使用一个nurbs球体变形而成。

maya制作中山舰 海洋篇 飞特网 maya建模教程

选择nurbs曲面,shift加选nurbs船模型,执行editnurbs->intersectsurfaces,设置如图。

maya制作中山舰 海洋篇 飞特网 maya建模教程

得到两个nurbs几何体之间的相交线,然后在outliner中选择这根相交线,执行editcurves->duplicatecurves,保留所有操作历史。因为模型较为复杂,因此会生成了不少nurbs曲线。在播放动画的时候,由于历史节点的缘故,nurbs曲线会随着模型位置的改变而变化,但同时maya的执行会很缓慢。maya的脚本库中有一个用于烘焙曲线动画的mel,但这只有在场景动画不需要再进行修改的时候才使用,后面会提到。
*复制相交线并保留历史记录,是为了稍后进行曲线动画烘焙而作的准备;如果不需要烘焙曲线动画,那么可以省略duplicatecurves这个步骤。

maya制作中山舰 海洋篇 飞特网 maya建模教程4.绑定航船和海洋的运动。
将nurbs船壳和多边形航船成组,执行fluideffects->ocean->makemotorboats。
因为场景只有一个海洋,所以maya会自动选择oceanshader1。

maya制作中山舰 海洋篇 飞特网 maya建模教程

选择生成的locator定位器,在它的形节点的extraattributes区块下,设置相关浮动参数。首先将starty设置合适的数值,让航船刚好悬浮至船的吃水线处。多次测试之后,最终参数设置如下。

maya制作中山舰 海洋篇 飞特网 maya建模教程

特别需要说明的是,因为考虑到绑定了流体,柔体,布料这些动力学系统,物体运行需要一段解算过程,因此不能直接在起始帧就让航船突然下沉。所以浮动参数开始起作用的startframe我设置为100,stary分别在第1帧和第99帧设置了动画关键帧:高度0到-40的位移动画。scenescale是匹配海洋尺寸的,数值应该和海洋材质的scale值相等,所以设置为0.1。
throttle(油门)和rudder(转舵)是两个有趣的参数,它们控制着航船的行进和转弯; waterdamping(水阻尼)会对行进速度有很大影响。throttlepitch(行驶倾斜)是开启throttle之后航船前后倾斜的程度,turnroll则是rudder启用时,航船在转弯时的侧斜程度。
throttle在scenescale匹配的时候,可以近似的理解为千米/小时的航速。
【注意】使用maya内的任何“boat”工具,boatlength,width和height都会自动从所选小船的包裹盒尺寸获取。这些工具将最长长度的坐标轴作为前方,所以当使用一个奇怪的外形(宽度大于长度),模型的转向和速度调节可能发生错误。在应用船体工具前,你可以暂时改变物体的缩放值,在使用工具后再恢复原状(此时maya会按应用工具前的形状定位方向轴)。 5. 创建航船尾流。尾流发射器有两种,一种是单纯的制造波浪,另一种除了波浪还产生泡沫foam(尽管可以设置只产生泡沫不产生波浪,但这不太现实):前者用于航船的前部和中部,后者则放置于船尾。选择海洋,执行ocean->createwake。

maya制作中山舰 海洋篇 飞特网 maya建模教程

maya的海洋尾流是通过流体纹理控制海洋材质的waveheightoffect属性而实现的,尾流发射器的密度发射比率是控制尾流强弱的重要参数。创建了尾流之后,场景会生成一个3d流体容器,选择物体并shift加选流体容器,执行fluideffects->makecollide。
maya2011新增了流体autoresize的功能之后,只要将流体发射器作为运动物体的子级即可,但因为wake是springmesh的流体发射形式,不能使用autoresize,只有发射foam泡沫的时候可以用。

maya制作中山舰 海洋篇 飞特网 maya建模教程

制作螺旋桨式的航船时,除了尾流,还要加入适当的泡沫。如果在创建尾流时候没有在选项中设置一定的foamcreation(泡沫产生)数值,那么只产生一个用于模拟尾流的3d流体容器;设置foamcreation数值大于0,则会增加一个用于产生泡沫细节的3d流体容器。当然,用户也可以手动将一个流体纹理连接到海洋材质的foamoffset制作泡沫。要注意的是,尾流强度由流体密度的发射比率决定,而泡沫量则是热量密度的发射比率决定,并且泡沫的流体节点会开启textureopacity。
一般来说,制作流体特效时尽量不要对流体容器进行缩放;不过当场景发生了比例关系的变化,为了减少计算量,则应将流体容器匹配场景比例进行缩放。

maya制作中山舰 海洋篇 飞特网 maya建模教程 6. 飞溅水花。航船在水面急速运行时,会产生撞击飘散的浪花。
首先,为了提高计算速度,需要先将航船和海面的相交线烘焙成点动画。在outliner中选择nurbs曲线,在命令输入栏中输入并执行命令:bakesoft 1 200 1【格式:bakesoft (起始帧) (结束帧) (间隔帧)】。完成之后,可以将nurbs预览海面(包括相交线)和nurbs船底删除,只保留烘焙后生成的曲线。当然,在这操作之 前你必须完成所有动画参数的调节,尤其是航船的运动和海面的状况。

maya制作中山舰 海洋篇 飞特网 maya建模教程

bakesoft和之前提到的oceannurbspreviewplane命令一样,是maya内置的未界面化的隐藏脚本。bakesoft可将曲线动画烘焙到cv点上,转为关键帧动画。注意:该命令一次只能用于一条nurbs曲线,并且计算过程中不能停止。

maya制作中山舰 海洋篇 飞特网 maya建模教程
 

选择烘焙后的新曲线,执行dynamics>particles>emitfromobject,设置如下:
emittertype:curve
rate:3000
speed:9
speedrandom:0
对产生的粒子设置重力场和扰乱场(magnitude:33,attenuation:0,frequency:0.5),并把粒子的conserve设置为0.9降低粒子的扩散行为。

maya制作中山舰 海洋篇 飞特网 maya建模教程粒子将随着海面曲线的变化而在不同的方位发射。不过为了更细致的表现出飞溅水花落到海面的效果,还需要设置表达式来使粒子吸附到海面。

maya制作中山舰 海洋篇 飞特网 maya建模教程

前面使用到的海洋浮动系统,其实是通过coloratpoint的mel控制物体的高度变化的;而在表达式中使用mel语句,是不会自动更新表达式引用的名称的。如
float $hei[] = `coloratpoint -u $u -v $v oceanshader1`;
locator1.translatey = $hei[0];
oceanshader1和locator1的名称都不能在设置了表达式后再修改,除非同时更新mel中的命名。也就是说,一旦使用了海洋中的“boat”功能,不要轻易修改受控物体的名称。
粒子表达式有两种:creation和runtime(又分动力学前后执行)。creation只在动画开始时执行一次,而runtime则会在动画每帧中执行。 本例中语句如下:

maya制作中山舰 海洋篇 飞特网 maya建模教程

【creation】
particleshape1.lifespanpp=rand(4,5);//设置粒子随机的生命周期
【runtime】
vector $foamp=particleshape1.position; //获取粒子当前的位置
float $foamu=$foamp.x;//将粒子位置的x坐标赋予变量foamu
float $foamy=$foamp.y;//将粒子位置的y坐标(高度)赋予变量foamy
float $foamv=$foamp.z;//将粒子位置的z坐标赋予变量foamv
vector $foamcolor[]=`coloratpoint -o rgba -u $foamu -v $foamv oceanshader1`;
//通过coloratpoint的mel命令获取海洋材质的相应色彩和透明度信息
float $foamheight=$foamcolor[3];//定义一个变量foamheight,将colratpoint所获取的材质透明度信息赋予它。
if($foamy<$foamheight)
particleshape1.position=<<$foamu,$foamheight,$foamv>>; //当粒子高度低于泡沫高度,将被吸附到海洋表面
以上完成了船底和海面接触时飞溅的水花,船尾部还缺少螺旋桨喷出的水花,只要再增加一个体积型的粒子发射器即可。

maya制作中山舰 海洋篇 飞特网 maya建模教程浪花粒子在海面漂浮一段时间后,逐渐消失。这里我使用一个噪波纹理控制粒子诞生的不透明度,并设置渐变过渡,在粒子消亡时不透明度为0。
*需要更为细致的特效,可以对粒子的速度设置runtime表达式,增加速度,透明度和生命周期之间的关系。如果粒子量大,表达式越复杂,计算速度就越慢。

maya制作中山舰 海洋篇 飞特网 maya建模教程

7.生成各种动力学缓存。
n布料执行:ndynamics->ncache->createnewcache。
流体执行:dynamics->fluideffects->createnewcache。
粒子执行:dynamics->solvers->createparticlediskcache。
柔体ik,则直接烘焙为骨骼动画。

maya制作中山舰 海洋篇 飞特网 maya建模教程

fevte编注:更多maya角色教程讨论交流和maya作业提交请进入飞特论坛三维作业板块,地址:http://bbs.fevte.com/forum-54-1.html

上一篇: maya制作中山舰 绑定篇
下一篇:

[错误报告] [推荐] [收藏] [打印] [关闭] [返回顶部]

  • 飞特网大部分教程属网友投稿,并不代表飞特网立场。如果您的教程在飞特网发布后没有注明作者和出处请联系我们处理。
    飞特网会员发布的所有作品版权规作者所有,未经作者同意,任何人不得将其用于商业目的;
    如发现本站有含色情等违反国家法律法规内容的图片及涉及个人肖像权及版权的内容,请即时通知我们,飞特网将立刻删除相关内容.本站原创内容,欢迎转载.请注明出处和作者,谢谢!
    访问本站推荐使用分辨率1280*1024,internet explorer7.0浏览器。