布料系统NCLOTH.docx
《布料系统NCLOTH.docx》由会员分享,可在线阅读,更多相关《布料系统NCLOTH.docx(19页珍藏版)》请在冰点文库上搜索。
布料系统NCLOTH
重力和风
结算器属性
缩放属性
nCloth简化一览
nSlover
将人物身上的衣服转化为nCloth
将需要和nCloth碰撞的人物和物体转化为passiveobject
观看成效,交互进行
nCloth支持多边形,可能不支持nurbs。
一些相关的菜单如以下图:
nMesh:
创建nCloth
nConstraint:
创建约束
nCache:
创建缓存
nSolver:
能够进行一些操作
Fields:
里面有一些场
创建nCloth前要注意一点:
第一要删除模型的历史记录,冻结物体。
接下来,选择旗子,点击nMesh>CreatenCloth
Tips:
点击DisplayInputMesh会显示物体本身的shaper节点,可是也失去了布料的成效。
点击DisplayCurrentMesh就切换回布料节点了。
Tips:
Nucleus是nCloth的核心。
大体概念就跟引擎是一样的。
Nucleus中的参数都是以“米”为单位的。
如何使布料物体,轻忽默许的重力和风力?
就在nClothShape节点下的DynamicProperties栏,勾选IgnoreSolverGravity和IgnoreSolverWind。
勾选上这两个就会忽略掉默许的重力和风力了。
如以下图:
Nucleus的SpaceScale
Nucleus中的ScaleAttributes栏中的SpaceScale值,拖动它会对最终的模拟成效有专门大阻碍。
它的属性值与模型的大小有关。
若是你的模型是以厘米为单位的。
那么你就要把它的属性值调整为0.01。
若是模型是以分米为单位的,那么它的属性值为0.1。
以此类推。
如以下图:
当你给布料所跟从的物体K动画时,为了节省资源能够先把布料成效临时无效化,等K完动画以后再来看布料成效。
方式是:
Modify菜单下EvaluateNode栏中的nCloths勾选去掉即可。
如以下图:
Nucleus的TimeAttributes
Nucleus中的TimeAttributes栏中的StartFrame操纵着布料解算的起始时刻。
若是需要开始静止一段时刻的话能够利用那个参数。
如以下图:
Nucleus的重力和风
第一看图:
下面,详细讲解参数。
那个地址边的参数每一个都会对布料的模拟产生阻碍。
●
Gravity:
要紧属性重力值默以为9.8米/每秒。
(因为布料模拟的默许单位为米),若是为0重力将失去作用
●GravityDirection:
重力的方向,默以为-Y轴。
能够把它看为一个重力的倍增器。
若是方向全数为0,那么重力也将失去作用。
若是大于1就会强化重力成效。
●AirDensity:
要紧属性空气的密度。
风的要紧参数,若是为0,风力就失去作用。
调大它会增加风的成效。
●WindSpeed:
风速。
越大风力越强,为0。
风力失去作用。
●WindDirection:
风力的方向。
分为3个方向,为0,风力也将失去作用。
它也是风力的倍增器。
●WindNoise:
为风的方向添加随机性。
●Lift:
那个参数在nClothShape中,后图有标示。
那个参数与风力中的AirDensity有关联性。
●Drag:
那个参数在nClothShape中,后图有标示。
那个参数与风力中的AirDensity有关联性。
布料的碰撞1
Tips:
MAYA中按住H+鼠标左键调出热盒能够快速切换功能模块。
第一,要注意圆布的制作要点:
面数要均匀,如以下图:
第一个是标准的POLY圆柱所有的极点集中在了一路,这确实是个很糟糕的选择。
利用那个做布料运算就会在中心显现奇怪的褶皱。
第2个是利用NURBS圆环曲线生成平面并转换为POLY生成的圆形桌布,注意生成完了以后要进行一次CleanUp使它规整。
那个模型面数散布平均,是个理想的模型。
接下来就能够够进行正式的制作了。
第一,把圆桌布做成布料。
具体就不说了。
接下来,要把墙壁做成被动刚体,让它与布料产生碰撞。
如以下图:
点击红色标识的命令即可把墙壁变成被动刚体。
注意在Solver下拉列表中要选择跟布料一样的nucleus1系统,不然它们就不在一个引擎下工作,自然就无法进行碰撞了。
布料的碰撞2
那个地址要紧讲了DisplayInputMesh和DisplayCurrentMesh和ConvertnClothOutputSpace这三个命令。
如图:
前两个确实是显示基础网格仍是显示布料的切换命令。
最后一个确实是切换布料的坐标系。
布料有两种坐标系:
局部坐标系和世界坐标系。
二者区别简单来讲局部坐标系确实是基础网格和布料共享一个transfrom节点即移动旋转放缩都在一路。
而世界坐标系确实是布料拥有了独立的坐标系,它能够有自己的移动旋转放缩,同时也受到基础网格的阻碍。
下面的图A和图B确实是说明这两种阻碍的不同:
图A局部坐标系:
图B世界坐标系:
布料的碰撞3
如安在不减缓模拟速度的情形下,增加布料的面数?
答案是:
在布料物体上进行SMOOTH操作,而不是在原始物体上。
Exturde命令也是如此。
如何删除布料的历史?
答案在以下图:
要注意:
那个地址删除的历史是指的原始物体上的历史,而不是布料本身的历史。
若是删除布料本身的历史,那么布料也就不存在了。
。
成立和利用nSlover
要学习如何成立解算和如何切换解算器。
Substeps和MaxCollisionIterations
第一要将两个很重要的属性。
在nucleus中的SolverAttributes栏中的Substeps和MaxCollisionIterations。
这两个数值是操纵布料解算精度的数值。
Substeps是说在每一帧的布料的解算次数,数值越高,精度越高,速度也越慢。
MaxCollisionIterations是说在每一次Substeps中,布料的最大碰撞次数,数值越高,精度越高,速度也越慢。
如以下图:
成立新的解算器:
成立方式是:
nSlover>AssignSolver>NewSolver。
如图:
你会看到有两个选项:
NewSolver和nucleus1。
nucleus1是成立布料时默许的引擎(解算器)。
因为咱们要新建一个解算器,因此点击NewSolver。
点击完以后,你会看到大纲视图里多了一个nucleus2。
如图:
播放动画,会发觉布料穿过了墙壁。
这是固然的啦!
因为它们不在一个解算器里了,因此没有了交互。
因此,若是要发生碰撞,物体就必需要在一个解算器里。
解决方式确实是,选中墙壁,为它标记解算器nucleus2。
如图:
再次播放动画,发觉一切正常了。
//引申一下,若是场景复杂,穿插物体较多就能够够利用那个不同解算器的方式使布料本体能够“穿透”一些物体,达到神奇的成效。
//
利用两个解算器,还能够提高解算的精度和优化计算时刻。
具体思路的如此的。
先用一个较低解算值的nucleus1来进行场景的预览,用来调剂布料和碰撞物体的位置啦,布料的大体属性啦等等。
若是中意了,能够保留一个预设。
保留预设方式如以下图:
然后,在把那个保留的预设导入nucleus2中,而且增大Substeps和MaxCollisionIterations,来提升解算精度,例子中利用了6和32。
增大精度也意味着计算时刻会延长,那个地址咱们要意识到Substeps和MaxCollisionIterations的数值是能够K帧的。
因此,在物体碰撞前咱们用一个很小的值来节约计算时刻,在碰撞的前一帧调大数值来提高精度,达到更好的成效。
这确实是鱼和熊掌兼得的方式。
AEDisplay菜单和Interactive
AEDisplay菜单其实确实是一个显示菜单,但它不是用来在视图中显示分类的,而是在物体的属性编辑器里来显示相关的栏。
而InteractivePlayback就不一样了,它的功能很有趣也很有效。
点击它就会播放动作,神奇的是在播放时你还能够移动墙壁来观看它与布料之间的交互阻碍。
(实测在播放进程中无法移动布料)(有时候点击命令不执行,这时你先直接点击播放动画让时刻条走一下,然后再点击InteractivePlayback往往就会起作用了)。
这种交互会让你很方便的去调整布料和碰撞物体中的关系或修改布料的属性。
碰撞厚度
播放动画,会发觉例子中布料和碰撞物体之间有着专门大的裂缝。
选择碰撞物体,按Ctrl+A进入属性编辑器的nRigid节点,在Collisions栏下的SolverDisplay下拉菜单中,选择CollisionThickness,现在,视图中碰撞物体会被一个黄色的线框所包裹,那个黄色线框确实是碰撞物体的厚度了。
如图:
若是,我增大Thickness的值会看到黄色线框也随着增大,现在播放动画就会发觉布料离碰撞物体更远了。
这说明黄色区域确实是MAYA计算碰撞时的“外壳”,也确实是所谓的“厚度”。
咱们再来看布料,会发觉它也有Collisions栏,从SolverDisplay下拉菜单中,选择CollisionThickness也能够看到布料也有个黄色区域。
注:
碰撞厚度的黄色物体可不能被渲染。
若是加大它的Thickness值再播放,也会发觉布料离碰撞体更远了。
这就说明MAYA的布料碰撞是计算黄色物体之间的碰撞而不是布料本身。
因此,调整Thickness值的大小就能够够操纵碰撞之间的间隙。
接下来,要讲讲下边的3个数值:
Bounce(弹力),Friction(摩擦力),Stickiness(粘性)。
Bounce顾名思义确实是弹力的意思,那个地址要注意不要将Bounce值调的大于1,不然会造成不稳固。
若是你非要调整的话,你能够调剂碰撞物体的Bounce值。
Friction(摩擦力)那个值也专门好明白得,麻布的摩擦力确信要大于丝绸很多。
要注意的是,那个值往往会和Stickiness(粘性)相关联。
两个值很相似,不同在于Friction(摩擦力)是在物体切线方向上的力而Stickiness(粘性)那么是物体在法线方向上的力。
Stickiness(粘性)那个值在场景上的作用事实上是两边Stickiness(粘性)的和,也确实是它们之间彼此作用的关系。
其实Friction(摩擦力)也是这种关系。
举个例子来讲:
布料的Friction(摩擦力)和Stickiness(粘性)为1所产生的成效和布料和墙壁的Friction(摩擦力)和Stickiness(粘性)值各为0.5所产生的成效是一样的。
碰撞层1
发生碰撞的三个条件:
1.nCloth、passiveobject要具有相同的nucleussolver;
2.碰撞层之间的差值(即布料和碰撞物体之间的差值)小于等于CollisionLayerRange;
3.nCloth的碰撞层大于等于被动碰撞物体的碰撞层;
注意:
碰撞层小的拥有优先权(低层级阻碍高层级)
个人明白得:
1)低层级的相当于被动物体;
2)低层级的对高层级的具有作使劲;
3)高层级的不对低层级的具有作使劲;
碰撞层的位置如图:
CollisionLayerRange的位置如图:
碰撞层2
主若是讲述各层级之间的关系。
举例来讲,例如人穿衬衣外衣茄克。
那么把人设为0级,衬衣设为1级,茄克设为2级,并把CollisionLayerRange设为1。
那么皮肤将会对衬衣起作用,而对茄克不起作用。
衬衣将会对茄克起作用,茄克被衬衣所驱动而衬衣可不能被茄克所阻碍。
它们之间的关系确实是人物>衬衣>茄克。
通过设置碰撞层,咱们减少了没必要要的碰撞,节约了资源节省了计算时刻。