由于是Dynamic chain,我们不能对于IK进行位移的调整。
以上是创建单一的Dynamic chain,下面我们来创建多个Dynamic chain。首先,让我们先删除上面创建的Dynamic chain,如图操作。
然后,执行select -r nurbsPlane1;HfCreateAttractor;disable -v 0 gridGrp;disable -v 1 followDelayGrp;设置如图。
这是个多么复杂的场景,让我们来隐藏我们现在不想看到的物体吧。
为NURBS打上关键帧,播放动画;你也可以,当然最好执行这段语言来设置。playblast来观看。
我们发现,其实这个动作并不自然,让我们回去调整FurAttractor的差数吧
setAttr "FurDescription1.Scraggle" 0.2;
setAttr "FurDescription1.ScraggleFrequency" 1.5;
setAttr "FurDescription1.Attraction" 0.65;
setAttr "FurAttractors1.AttractorsPerHair" 8;
setAttr "FurAttractors1.Power" 0;
setAttr "FurAttractors1.StartLength" 0.5;
setAttr "FurAttractors1.EndLength" 10;
setAttr "FurAttractors1.ThresholdLength" 0;
差异还是很大的,我们接下来从理论上来了解Dynamic chain,了理论才能掌握Dynamic chain(动力学链)根本。
2 Dynamic chain(动力学链)的结构和组成
看到上面的例子你一定想知道Fur受到吸引器运动的原理,下面我们来看看Fur的Dynamic chain的构成吧:
新建文档,用这个脚本创建场景。
选择grid类型用8×8 ,选择Dynamic chain ,执行Create >继续执行Window->OutlinerWindow ,让我们来看清Dynamic chain 的结构吧。
好复杂是吧,我们先来对它做个了解。
在DynamicFurAttractor下面有分别有:
IK,骨骼,复制曲线,曲线,粒子和弹簧。
它们的关联关系是:
弹簧 控制>- 粒子 控制>- 曲线 控制>- 关联的复制曲线 控制>- 骨骼 受控>- IK
也就是说,弹簧是控制的根源,由于弹簧的运动带动粒子的运动,影响了曲线的变化,才导致骨骼的运动和变化。
有点复杂,如果你还没有明白,继续往下看吧。
由上面的理论我们得出结论要想很好的控制Dynamic chain,其关键是选择Dynamic chain中的粒子和弹簧进行编辑。
的确,如果是个更大的场景有上百个粒子和弹簧,那选择将是一件费力不讨好的工作,并且这样的操作很会引起误选和错误。
Maya强大的Mel这时该出场了,让我们用Mel来帮忙吧。你可以直接 运行这个脚本(此脚本为本人原创)。
脚本运行后将在Shelf上多了两个按钮,分别标注为 “Sl_P” 和 “Sl_S” ,
执行“Sl_P”后,将场景内的所有粒子选择,并放在创建标注为“DCPP”的层中,将层模板化;
执行“Sl_S”后,将只显示出场景内的所有弹簧(原始的场景是看不到弹簧的,只有在运动后才会有弹簧显示出来),方便选择。
执行下面的命令为NURBS打上关键帧
playbackOptions -min 0 -max 120;
currentTime 0 ;
select -r nurbsPlane1 ;
setKeyframe ".tz";
setKeyframe ".rx";
currentTime 20 ;
move -r 0 0 -2 ;
rotate -r 20 0 0 ;
setKeyframe ".tz";
setKeyframe ".rx";
currentTime 0 ;
modelEditor -e -allObjects 1 modelPanel4;
modelEditor -e -locators 0 modelPanel4;
modelEditor -e -xray 1 modelPanel4;
DisplayShaded;
performPlayblast 3;
播放playblast。
对比……
currentTime 0 ;
modelEditor -e -allObjects 1 modelPanel4;
modelEditor -e -nurbsCurves 0 modelPanel4;
modelEditor -e -joints 0 modelPanel4;
modelEditor -e -ikHandles 0 modelPanel4;
modelEditor -e -dynamics 0 modelPanel4;
modelEditor -e -grid 0 modelPanel4;
performPlayblast 3;
3 弹簧部分试验
其实我们上面所作的所有试验,仅仅是告诉大家弹簧和粒子在动力学中的作用,接下来就让我们来点实用的吧,使用这个脚本创建新的场景。最好将这个脚本用中键拖拽到shelf上做个按钮,以便接下来继续使用。选择grid类型用3×12 ,选择Dynamic chain ,执行Create > ,执行Playblast。
调整:
第一步>-
setAttr "FurAttractors1.AttractorsPerHair" 6;
setAttr "FurAttractors1.Power" 0.5;
setAttr "FurAttractors1.Influence" 5;
第二步>-
用上节所提到的“Sl_P”按钮,选择粒子调整conserve 0.97;
(请在通道框中调整,如果在属性列表中调整只能对单一的粒子进行调整)
同样用“Sl_S”按钮,选择弹簧调整参数
stiffness 40
(请在通道框中调整,如果在属性列表中调整只能对单一的弹簧进行调整)
damping 0.35
第三步>-
modelEditor -e -allObjects 1 modelPanel4;
modelEditor -e -nurbsCurves 0 modelPanel4;
modelEditor -e -joints 0 modelPanel4;
modelEditor -e -ikHandles 0 modelPanel4;
modelEditor -e -dynamics 0 modelPanel4;
DisplayShadedAndTextured;
执行Playblast。
下面我们来着重介绍一下spring(弹簧)两个重要参数stiffness (硬度): 默认值是20,当数值为0时spring最硬,数值约大,spring越软。推荐调节在10~100之间效果较好。damping (阻尼,衰减): 默认值是0.2,当数值为0时spring最大保持原始状态,数值约大,变化幅度约大。推荐调节在0.1~1之间效果较好。
常见的毛发类型比较:
stiffness 100;damping 10,stiffness 35;damping 1,stiffness 35;damping 1。
毛发2。
毛发3。
毛发4。
对于弹簧的理解我们先到这里,因为影响毛发运动的不止是弹簧,还有其他的因素,比方说粒子和动力场。
4 力场部分试验
新建文件>--用这个脚本创建场景。选择grid类型用4×4,选择Dynamic chain ,执行Create >,场景如图:
(air)风力场测试
点击按钮“Sl_P”按钮。
SelectAllParticles;
air -pos 0 6 0 -m 3 -att 1 -dx 1 -dy 0 -dz 0 -s 0.5 -iv 0 -iro 1
-vco 0 -es 0 -mxd 20 -vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5 ;
connectDynamic -f airField1
curve1Particle curve2Particle curve3Particle curve4Particle curve5Particle
curve6Particle curve7Particle curve8Particle curve9Particle curve10Particle
curve11Particle curve12Particle curve13Particle curve14Particle curve15Particle
curve16Particle;
setAttr "airField1.visibility" 0;
modelEditor -e -allObjects 1 modelPanel4;
modelEditor -e -nurbsCurves 0 modelPanel4;
modelEditor -e -joints 0 modelPanel4;
modelEditor -e -ikHandles 0 modelPanel4;
modelEditor -e -dynamics 0 modelPanel4;
setAttr "FurDescription1.Scraggle" 0.15;
setAttr "FurDescription1.LengthNoise" 1;
setAttr "FurAttractors1.AttractorsPerHair" 4;
setAttr "FurAttractors1.Influence" 2;
setAttr "FurAttractors1.InfluenceNoise" 2;
DisplayShadedAndTextured;
playbackOptions -min 0 -max 120;
currentTime 0 ;
playblast -percent 50 ;
风吧毛发给吹翻了。
点击按钮“Sl_S”按钮,选择屏幕上显示的所有弹簧,其实应该是只有弹簧显示。
设置stiffness 100;damping 5;
setAttr "FurAttractors1.Influence" 0.5;
expression -s "airField1.magnitude = sin (time/4)" -o airField1 -ae 1 -uc all ;
modelEditor -e -allObjects 1 modelPanel4;
modelEditor -e -nurbsCurves 0 modelPanel4;
modelEditor -e -joints 0 modelPanel4;
modelEditor -e -ikHandles 0 modelPanel4;
modelEditor -e -dynamics 0 modelPanel4;
playbackOptions -min 200 -max 400;
currentTime 200 ;
DisplayShadedAndTextured;
重新播放动画。
(turbulence)紊乱力场测试
新建文件>--用这个脚本创建场景。
选择grid类型用4×4,选择Dynamic chain ,执行Create >
点击按钮“Sl_P”按钮,执行Fields->Turbulence
然后执行
playbackOptions -min 0 -max 120;
currentTime 0 ;
setAttr "turbulenceField1.visibility" 0;
DisplayShadedAndTextured;
playblast -percent 50 ;
很明显的变化。
修改参数,点击按钮“Sl_S”按钮,选择屏幕上显示的所有弹簧,修改damping 2;
setAttr "FurAttractors1.AttractorsPerHair" 4;
setAttr "FurDescription1.Scraggle" 0.15;
setAttr "FurDescription1.LengthNoise" 1.5;
setAttr "FurDescription1.InclinationNoise" 0.2;
setAttr "turbulenceField1.magnitude" 20;
setAttr "turbulenceField1.attenuation" 0.2;
modelEditor -e -allObjects 1 modelPanel4;
modelEditor -e -nurbsCurves 0 modelPanel4;
modelEditor -e -joints 0 modelPanel4;
modelEditor -e -ikHandles 0 modelPanel4;
modelEditor -e -dynamics 0 modelPanel4;
DisplayShadedAndTextured;
(radial)放射力场测试
保持这个场景,执行下面的脚本
currentTime 0 ;
select -r turbulenceField1 ;delete;
setAttr "FurDescription1.Length" 2.3;
setAttr "FurDescription1.LengthNoise" 1.5;
radial -pos 0 4 0 -m 5 -att 5 -typ 0 -mxd 20
-vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5 ;
setAttr "radialField1.visibility" 0;
connectDynamic -f radialField1 curve2Particle curve1Particle
curve3Particle curve4Particle curve5Particle curve6Particle
curve7Particle curve8Particle curve9Particle curve10Particle
curve11Particle curve12Particle curve13Particle curve14Particle
curve15Particle curve16Particle;
expression -s "radialField1.magnitude = sin(frame*20)+5"
-o radialField1 -ae 1 -uc all ;DisplayShadedAndTextured;
playblast -percent 50 ;
(uniform)统一力场测试
保持这个场景,执行下面的脚本
currentTime 0 ;
select -r uniformField1 ;delete;
uniform -pos 7 4 0 -m 20 -att 5 -dx 1 -dy 0 -dz 0
-mxd -1 -vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5 ;
connectDynamic -f uniformField1 curve2Particle curve1Particle
curve3Particle curve4Particle curve5Particle curve6Particle
curve7Particle curve8Particle curve9Particle curve10Particle
curve11Particle curve12Particle curve13Particle curve14Particle
curve15Particle curve16Particle;
select -r uniformField1 ;
setKeyframe "uniformField1.tx";
currentTime 50 ;
move -r -14 0 0 ;
setKeyframe "uniformField1.tx";
currentTime 100 ;
move -r 14 0 0 ;
setKeyframe "uniformField1.tx";
currentTime 0 ;
DisplayShadedAndTextured;
playblast -percent 50 ;
(gravity)重力场测试
点击按钮“Sl_S”按钮,选择屏幕上显示的所有弹簧,修改 damping 0;修改 damping 0;保持这个场景,执行下面的脚本。
select -r uniformField1 ;delete;
playbackOptions -min 0 -max 120;
currentTime 0 ;
select -r nurbsPlane1 ;
setKeyframe "nurbsPlane1.rx";
setKeyframe "nurbsPlane1.tz";
currentTime 10 ;
rotate -r 25 0 0 ;
move -r 0 0 -6 ;
setKeyframe "nurbsPlane1.tz";
setKeyframe "nurbsPlane1.rx";
gravity -pos 0 4 0 -m 4 -att 0 -dx 0 -dy -1 -dz 0
-mxd -1 -vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5 ;
connectDynamic -f gravityField1 curve2Particle curve1Particle
curve3Particle curve4Particle curve5Particle curve6Particle
curve7Particle curve8Particle curve9Particle curve10Particle
curve11Particle curve12Particle curve13Particle curve14Particle
curve15Particle curve16Particle;
setAttr "FurAttractors1.Influence" 1;
currentTime 0 ;
DisplayShadedAndTextured;
playblast -percent 50 ;
上述,只是部分的力场测试,大家有兴趣的话可以做更多的比较。上面的脚本,都是经过反复验证的,很好用,并且速度很快,如果你实在看不懂,那就请一句一句的执行,以“;”表示为一句。我的经验和关键参数全都在上面的脚本里了。大家不要问我为什么不用汉字,而用脚本,其实,我是实在找不到比用脚本告诉你更好的方法了,多看看,你也许会悟出点门道,了解Maya的语言,其实就是了解Maya的真正面貌。
5 分吹草地***(超实用的动力学草地)
到了精彩的部分了,如果你现在还没用启动Maya,那接下来激动人心的时刻你是感受不到了。
第一步:用这个脚本创建一个比较复杂的场景
日出时一个安静的草地被一个意外到来的足球而打破,背景用了夸张的手法,从清晨直到正午,灯光的变化使得整个场景更加生机勃勃。场景中有一个可供渲染的摄像机 Cam_view,和一个长满草的坡地。调皮的足球在你执行脚本的时候已经将Key烘焙好了,所以现在的回放速度应该是十分流畅。材质和灯光都已经设置好了,当然你不满意还可以继续调整。
第二步:为草地添加动力学吸引器
选择草地平面 "ground",Fur->Create Attractor,请设置如图,以便使接下来的操作不至于出错。
第三步执行这个脚本为你的草地添加力场。
如果你的第二步按图执行的话,这一步将不会出错。
第四步:现在场景有点复杂了,回放速度也慢了很多;很多东西如果你在视图看不到,可以在Outliner里查找,另外场景为你新增加了几个层,方便你的选择。
对于草地的运动当然还可以进一步调整,比如将粒子与草地平面产生碰撞等,产生更精确和细腻的效果。接下来的事情你应该很熟悉了,选渲染设置。设置Production Quality的图像品质,建议用 HD 720 输出模式,锁定等比后你可以自定义图像大小。试试看吧,一个含有动力学草地的短片即将在你的手中诞生。
小节:
虽然场景中的几乎所有参数都已经设置好,你还是可以根据你的喜好来调整的。场景中的做法和参数应该是很有价值的,保存场景或是保存创建场景的脚本,你可以仔细研究,算是对我们这个系列教程的总结和实战发挥。
创建场景的脚本中附加了很多有用的东西,比如,如何让Maya为你立刻创建一个足球,还有一个不错的动态无缝天空,变化的流云,例外场景中的图面气氛也是很优秀的,如果你是初学者,那要好好研究一下了。
结束:
当你看到这里时,我想我可以在网上教程中讲到的MayaFur的技术点,都讲完了。
学习应该是很快乐的,在大家开心的欣赏直观而又思路清晰的教程时,是否可想到在你们的学习之路上,这个教程将会是带动你学习Maya兴趣的重要部分。
或许教程中的还有很多内容没有讲完整,那是想留更多的空间让你来试验和感受,当你在学习中得到一份收获时,那种喜悦是无法言表的,在大家的学习之路上,这或许只是一滴水,一块石,但愿用我一点点的时间能激起大家学习的千层浪。虽然你在网上可以如此轻松的浏览和学习到Maya的诸多知识,但请不要忘记那些编绘教程的网友,当然也包括我。他们是用自己的知识和时间来换取你的进步。或许我们是同道中人,或许还不是;但是只要你可以保持良好的学习力,相信在CG的天空一定会有你的光辉。
中国的CG之路还很长,我或许和你一样都在等待,等待一个真正可以一展的时代;在那一刻到来之前我们所有能做的只是准备,再准备。如果你是个热爱学习的人,你是高尚的。因为这世界上所有高尚的东西都是要花时间和精力去学的,包括Maya 。
最后,要建议大家选择一个适合你的主题进行练习,那当然不是长发飘飘或是剧烈运动的毛发;即使如此,Maya的Fur还是能够创造出多种多样优秀的毛发效果。想要熟悉掌握本篇所有的内容,获得更多有关Fur的控制能力:不断练习,也只有不断练习,才是个好办法。