maya nCloth 教程Word格式.docx

上传人:b****4 文档编号:8157992 上传时间:2023-05-10 格式:DOCX 页数:37 大小:1.48MB
下载 相关 举报
maya nCloth 教程Word格式.docx_第1页
第1页 / 共37页
maya nCloth 教程Word格式.docx_第2页
第2页 / 共37页
maya nCloth 教程Word格式.docx_第3页
第3页 / 共37页
maya nCloth 教程Word格式.docx_第4页
第4页 / 共37页
maya nCloth 教程Word格式.docx_第5页
第5页 / 共37页
maya nCloth 教程Word格式.docx_第6页
第6页 / 共37页
maya nCloth 教程Word格式.docx_第7页
第7页 / 共37页
maya nCloth 教程Word格式.docx_第8页
第8页 / 共37页
maya nCloth 教程Word格式.docx_第9页
第9页 / 共37页
maya nCloth 教程Word格式.docx_第10页
第10页 / 共37页
maya nCloth 教程Word格式.docx_第11页
第11页 / 共37页
maya nCloth 教程Word格式.docx_第12页
第12页 / 共37页
maya nCloth 教程Word格式.docx_第13页
第13页 / 共37页
maya nCloth 教程Word格式.docx_第14页
第14页 / 共37页
maya nCloth 教程Word格式.docx_第15页
第15页 / 共37页
maya nCloth 教程Word格式.docx_第16页
第16页 / 共37页
maya nCloth 教程Word格式.docx_第17页
第17页 / 共37页
maya nCloth 教程Word格式.docx_第18页
第18页 / 共37页
maya nCloth 教程Word格式.docx_第19页
第19页 / 共37页
maya nCloth 教程Word格式.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

maya nCloth 教程Word格式.docx

《maya nCloth 教程Word格式.docx》由会员分享,可在线阅读,更多相关《maya nCloth 教程Word格式.docx(37页珍藏版)》请在冰点文库上搜索。

maya nCloth 教程Word格式.docx

WindDirection(风向):

也很好理解,抱怨一句,虽然syflex的Delta属性不直观,但它的locator做的很直观,风向和大小一目了然,nCloth就不太直观。

==================================

GroundPlane栏不常用,它的作用是指定一个二维平面扮演一个无限大的碰撞物体,比如一个无限大的地面,它的属性包括:

方向(Origin),法线方向(Normal),反弹力(Bounce),摩擦(Friction)。

=====================================================================

SolverAttributes(解算器属性):

在这里,可以设置解算器的三个重要属性:

Substeps(精度):

就是每一个frame的解算次数,每一帧解算次数越多,则精度越高,也需要更多的计算时间。

这是一个全局的属性,在nCloth节点下,我们还可以设置每一个布料单元的解算精度。

MaxCollisionIterations(碰撞检测(times/substeps)):

当发生碰撞的时候,每一次解算(substeps)就是前一个属性中,解算器进行多少次碰撞插值,最低为一次,如果设为0,则碰撞检测关闭。

CollisionLayerRange(最大碰撞层数):

nCloth在布料间碰撞关系上引入了层级的观念,下级层影响上级层和同级层,上级层不影响下基层,这里告诉maya你要使用多少层的布料碰撞,第一层编号为0,布料层级关系是nCloth非常强大的功能,我们可以很方便的设置一个角色的毛衣和夹克衫的碰撞关系。

===================================

TimeAttributes(时间):

这里我们可以设置解算器的起始帧,默认为时间轴第一帧,这个属性会被连接到每一个下属的nCloth节点的TimeAttribute下的startFrame,我们可以手动打断这个连接获得更多的控制。

上面那个CurrentTime,我们最好不要去动它,当然,你可以试着搞一把看看会发生什么事情(什么都没有发生)

ScaleAttributes(缩放系数):

这个是比较重要的一栏,我们可以在这里对时间和空间进行缩放,默认为1,就是不做变动。

如果我们的模型是按照厘米为单位建立的,则需要修改SpaceScale为0.01,因为nCloth默认的解算单位是米。

TimeScale如果你需要得到一个“子弹时间”的耍酷效果,可以修改这个数值。

====================================

好了,这次就讲这么多,片子还在紧张制作中,我每天就抽一点之间写一小部分,其实还是鼓励大家看maya的帮助文档来的快。

这是我第一次写教程,不知道大家是否喜欢,如果有不明白的,或者我说错的地方,欢迎大家指出,我会努力回答大家的问题。

我们继续来了解一下nucleus节点各个属性对布料解算的影响。

首先声明一点:

本教程都是我自己写的,肯定有不足和错误的地方,大家还是要以maya的help文档为准。

另外呢,我写这个小教程的目的,主要是为我们这个blog做在火星上一个宣传,拉点人气,也和大家分享一下自己的经验。

我们来看一下场景,上一篇的场景我们下次将nClothShape节点的时候再用,这次我们用如下的布置:

所有设置都用默认,运行50帧。

首先来看一下重力:

重力为9.8

重力为0.98

差别很明显,我们继续将重力保持在0.98,而修改一下SpaceScale的数值为0.1

重力为0.98,SpaceScale 

0.1

对比一下重力为9.8同时SpaceScale的数值为1的情况,可以看到,效果是一样的。

接着让我们来修改一下GravityDirection的方向为1,+y向上:

GravityDirection010

当你需要模拟降落伞效果的时候,可以修改这个数值。

我们来看一下风力:

现在我们看不到风的作用是因为WindSpeed默认设置为0,所以,没有风,我们修改一下windspeed为1,看看有什么效果

airDensity:

2

windspeed:

1

windDirection:

000

我们发现,似乎没有作用,原因是我们没有设置风向,所以修改一下:

00-1,让风向-z轴方向吹:

00-1

怎么还是没有反应的样子?

把windspeed调高到10:

很好,小风开始轻轻吹了,不过我们发现一个有趣的现象,重力对布料的影响变弱了:

其实是airDensity在起作用,我们给它设一个极端的数值:

0,可以看到,重力又回来了:

将airDensity设到较高的数值10:

布料发生了很大的起伏,或许,这就是我们想要的效果。

总结:

我们怎么理解这三个数值的关系:

首先把方向(WindDirection)排除,因为它就是一个向量(00-1)和(00-100)效果一样,都是-Z方向的风,和大小没关系。

不管是风还是重力,中间都有一个“空气密度(AirDensity)”作为介质,在真空(airDensity=0)的情况下,一张纸和一个铁球在重力的作用下,下落速度应该是一样的,但是如果在空气中(airDensity>

0),纸的速度会变慢,重力的作用会被空气阻力消减(这个例子其实在nCloth中并不十分准确,但可以这样理解),在airDensity不变的情况下,WindSpeed就是风力的大小了。

有同学可能会想:

可不可以将airDensity或者WindSpeed设为负值呢?

答案是,airDensity如果是负值的话,则解算结果会非常奇怪,不要将它设为负值,但WindSpeed可以设为负值,其结果是把windDirection反向(X-1)。

这一节就讲到这里,下一节我跳过GroundPlane,因为它很简单。

重点要讲的是SolverAttributes和CollisionLayerRange。

2007年7月30日,电影史上最悲痛的一天,英格玛伯格曼和安东尼奥尼永远地成为史书上的传奇。

好,这次我们来看一下nucleus节点的SolverAttributes栏下的三个属性

Substeps:

直译过来就是“子步”,我们就当作解算精度来理解,即每一帧的计算次数,默认为3次。

什么时候需要改动这个数值呢?

我们来看下面这个场景:

从第0到第50帧,一个pCylinder快速沿+Z方向穿过悬挂的布料。

我们以默认值看一下圆柱穿过布匹的那一帧。

(补充一下:

在作布料演算的时候,回放速度必须是playeveryFrame或更低,除非你的CPU比PS3的强大。

以后我们会讲到如何运用回放速度这个选项)

结果非常糟糕,如果你遇到像这种碰撞物体快速移动的情况下,可能需要提高Substeps的数值,我们尝试一下将Subsetps设置为6,12和24:

Subsetps=6

Subsetps=12

Subsetps=24

观察解算结果,发现,当Substeps从3提高到6的时候,效果非常显著,结果可以让人接受,数值为12的时候,已经非常好了,如果再高到24就浪费了。

实际工作中,我们需要反复尝试一下,找到最合理的数值。

下面我们看一下MaxCollisionIterations(最大碰撞检测次数),这个数值是指,在每一个Substeps,发生碰撞事件时,所做的碰撞检测次数。

我们来实际看一下它的效果,Substeps改回默认的3,MaxCollisionIterations分别为6、12、24:

MaxCollisionIterations=6(default)

MaxCollisionIterations= 

12

24

是不是发现了MaxCollisionIterations和Substeps对解算结果起到了同样的效果?

没错。

那我们怎么区分和设置这两个看上去十分相似的数值呢?

如果你足够细心的观察图中布料的下摆,你就会发现它们之间的一个显著区别。

当我们修改Substeps属性的时候,随着数值的提高,布料下摆变得越来越光滑,而MaxCollisionIterations却没有这个效果。

我们可以这样去理解这两个数值的关系,MaxCollisionIterations是Substeps的子集。

Substeps对布料的全局精度,方方面面都有影响,而MaxCollisionIterations只对布料碰撞事件发生影响。

最后,我们来看一下nucleus的重头戏:

CollisionLayerRange(碰撞层范围)。

说碰撞层范围,我们就不得不提前提到碰撞层的概念了。

我们来看如下场景:

大家有没有用过Syflex的碰撞层哦,是不是还记得在Syflex里面,两层布料如果要做碰撞,那是费了老劲了,拓扑要一样,大小要一样,还有一堆参数。

当我拿到nCloth的帮助文件,我差点跳起来了,太他妈好使了。

在这个场景里面,两块布料大小不一,拓扑不同,但nCloth就不管这些琐碎。

先讲一下nCloth的碰撞层是怎么回事,然后我们再来看实例。

不管是布料(cloth)还是碰撞物体(Passive或者collisionMesh)都被指定了一个所属的碰撞层(在nClothShape节点中):

每一个碰撞层都有一个编号,从0开始为第一层,依次类推。

每一个层内,可以指定任意多的nCloth物体,当发生碰撞的时候,编号较低的层中的nCloth对编号高的层中的物体,扮演PassiveObject的角色,高层中的物体对低层的物体只扮演被碰撞的角色。

如果两个cloth物体处于同一层,那么他们之间会互相影响。

这么说可能有些糊涂,我们来看实例:

球体是一个PassiveObject处于层0,中间带棋方格的布料和球体处于同一层(0),最上层的布料,处在编号1层。

碰撞检测就有一个自球向上的过程。

好,如果我们将棋方格该到层2,看看解算结果:

棋方格被上方的布料狠狠的压制住,毫无反抗能力,连四角的约束也救不了它。

因为它的层编号高于上层布料。

我们再把棋方格的层编号改为3:

看到,结果是一样的,虽然发生了层级的跨越。

collisionRangs 

决定了两个对象之间所能发生碰撞的最大范围,如果超出这个范围,则不发生碰撞,计算公式:

clothA的层号 

-clothB的层号的绝对值减去collisionRangs的值<

0则发生碰撞,否则不发生碰撞。

则我们可以通过设置这个数值来排除不需要的碰撞事件。

(感谢火星时代bbs论坛上的ID“盗亦有道”同学的指正)

在我现在进行的短片中,CollisionLayerRange足可以对付如此复杂的碰撞关系:

好了,今天就讲到这里,明天我们来解决nucleus节点下的最后两个项目:

TimeAttributes和ScaleAttributes,借用乱讲老师的一句话:

不要光看,要练啊!

谢谢大家的支持

通宵,和fluid干上了,云彩和大海,现在头还有点晕~,所以下文中可能发生语无伦次,跳切越轴等的状况,请大家谅解。

另外这部分内容需要大家自己做解算才能体会到区别,我截图也无助于说明问题,所以就干写了,也请大家谅解。

昨天北京突降雷暴雨,我的adsl被雷打击了,所以更新的有点晚~还请大家谅解。

今天我们来解决nucleus节点中最后俩节目:

TimeAttributes和ScaleAttributes,先来看TimeAttributes(时间)。

没有时间就没有空间,也就没有布料的解算,在这一栏中,有两个半属性,为什么说是两个半呢,因为CurrentTime被连接到了场景中的一个“绝对存在节点”--Time,time节点,没道理可讲,就是输出当前帧。

你可以去打断这个连接关系,但我想不出这么干的理由。

startframe(解算起始帧):

很好理解,但并不如你想的那么简单,我们打开hypergraph(很多书上翻译做:

超图,很酷的翻译,但hyperShade为什么不叫超影呢?

后来我才明白,原来金山词霸把hypergraph翻译做超图...)节点管理器,在节点管理器中,展开nucleus的上下游连接我们发现,nucleus.outTime输出到所有下游的nCloth节点的nClothShape.currentTime.记住这个连接关系,后面我们会提到这点。

ScaleAttributes(缩放系数):

这个数值是用来和时间和空间相乘的,如果设为2,前面提到的那个“绝对存在节点”Time就会以两倍的速度输出时间,加快解算过程。

但是施加在布料的上力的效果也会增加,最终的结果是解算结果变的极不准确(我自己的实验结果)。

那如果减小这个数值呢?

比如0.1,其结果是解算结果变的更加漫长,布料行为变得无比优雅轻柔,近乎失重。

spacescale对于我们来说更加有用处,主要和你的建模的时候所采用的尺寸有关,前文说过,ncloth的解算采用米为单位,如果你的模型是按照厘米建立的,那么默认9.8的重力可能就太大了,将spacescale修改为0.01可以得到正确的结果。

我一般修改为0.1,因为我们都要求按照1:

10的比例建模,可能有些同学从来没有想过建模还要考虑比例,那你就需要为自己的模型找到一个比例尺。

如果不注意比例尺这个问题,那么在动力学解算的时候,可能就会心里没个谱了。

好,nucleus节点我们就讲完了,我有讲错的地方请大家一定要告诉我,不要一个人偷着乐,如果还有不明白的地方,发帖问,我一定会回答的。

下一节开始。

让我想想,讲怎样建立一个nCloth场景吧,然后我们就可以继续交流怎样设置nCloth节点。

开始工作之前,找一下创建布料所需要的菜单,把菜单组该到nCloth

从上到下,依次为:

创建nCloth对象,创建碰撞物体,赋予解算器,获取nCloth实例文件,删除nCloth对象,删除历史纪录,显示原始shape节点,显示输出shape节点,nCloth节点属性标签的显示和隐藏,交互式回放。

看上去很多的样子,我们慢慢来讲。

首先搞一个ploy的plane,起个名字flag,subdivisionswidth/height设置为15,以x为轴旋转90°

,设置scaleX=2,scaleZ=1.25,世界坐标向上移动0.625,放着别动。

我们来观察一下这块“布”:

首先看尺寸,我们做nCloth要养成习惯,先问尺寸,不光要问自己,还要问和你合作的模型师,要个比例尺,我的maya(也是多数人的maya)默认单位是厘米,一个格子就是1*1厘米(默认网格),我们这块布,2*1.125厘米,就是说如果现实中长1米,高0.625米的布,那么我们的比例尺就是0.625,得到这个比例尺,我们就要可以去调整那个spaceScale和重力的数值了。

(0.625,6.125),多说一句,关于重力,虽然理论上是有一个“准确的数值”存在,比如9.8,但实际上,在Autodesk的工程师的blog上,他们推荐尽量使用小的数值,这样可以得到比较好的结果,所以我们采纳这个建议,取一个整数6。

选择这块布,(保留历史和transform的数值),打开CreatenCloth的optionBox,可以看到两个选项,spaceoutput解算空间矩阵和solver(建立/重用解算器):

不要被我的倒霉翻译唬住了,没那么复杂,spaceoutput决定采用哪个转换矩阵来进行布料解算,物体空间或者世界坐标。

一般我都无视这个选项,直接用默认的localspace,但我还是解释一下。

当采用localspace的时候,我们能得到可靠和准确的解算,因为inputMesh和outputMesh同时受到nucleus节点的影响,也就是说,原始Mesh和解算用的Mesh共享一个变换矩阵(transformnode),再大白话,inputMesh跟着outputMesh走!

如果使用worldSpace,IM和OM将处于不同的transformNode下,文档中解释说,这样更有利于做布料缓存。

就我自己的经验来看,貌似可以忽视这点优势。

solver(解算器):

如果场景中没有nucleus解算器存在,那就新建一个,反之,你可以选择新建一个,或者使用已有的解算器。

要注意的是,如果两个nCloth对象处于不同的解算器下,他们之间将不会发生解算关系。

我们选择localSpace和CreateNewSolver,创建布料:

那个绿色的是新创建的nCloth节点的选择handle,选择它就选择了nClothShpae节点。

在我们按下创建按钮以后,我们需要观察一下场景中发生了些什么。

选择handle,打开hyperGraph,展开上下游连接:

我们观察一下DG图,看到中间那个亮灰色的shape节点,那个就是我们一开始创建的pPlane的shape节点(它上面的polyPlane1是我们创建pPlane时候的历史记录),也就是inputMesh最右边的meshShape就是我们在场景中看到的那块布料,也就是outputMeshnCloth1节点是一个transform节点,下面是一个nClothShape,所有的布料属性就在里面。

我们播放一下动画,布料随重力下落了。

我们进入元素选择模式,选择角上的几个vertex:

然后给它加一个transform约束:

看到出现一个绿色的locator,关于约束,我会在后面详细介绍,这里就略过了。

我们播放一下(记得我上一节提到的注意事项):

好了,这次就先说到这里。

下次重点介绍nCloth节点的众多属性,争取让旗子飘起来。

这一节我们开始介绍nCloth节点,首先来看一下布料的碰撞属性,我们继续使用上一节使用的场景-flag

观察一下默认的运算结果,似乎还不错,没有发生穿插。

先看一下和碰撞和自碰撞相关的几个属性:

Collide(碰撞):

打开或关闭控制布料和其他物体之间的碰撞检测。

selfcollide(自碰撞):

打开或关闭布料自身的碰撞检测。

当我做布料的时候,可能发生这样的情况:

在所能忍耐的极限下,还不能得到很好的自碰撞结果,而且这些自碰撞检测对于镜头来说并不重要,这个时候我就干脆关闭布料的自碰撞,轻微的穿插还是可以允许的。

CollisionLayer(最大碰撞检测层数):

前文已经阐述过,请留意我的“勘误”。

Thickness(全局碰撞厚度):

其实就是布料的厚度,这个厚度值是可以在场景中实时看到的(见下文)。

SelfcollideWidthScale(自碰撞厚度缩放系数):

这个数值被拿来和Thickness相成,默认是和布料厚度一致,我们可以修改这个数值来得到我们所要的效果。

SolverDisplay(显示解算厚度):

刚才我说了,布料的厚度和自碰撞厚度是可以被实时看到的,就是在这里设置:

在下拉菜单里,默认是off,关闭显示。

下面依次是:

a)

b)

c)

a:

碰撞厚度 

b:

自碰撞厚度 

 

c):

拉伸Links

d)

e)

d:

弯曲Linkse:

解算优先权

以上的翻译并不准确,完全是根据我自己的理解,我逐个做一下解释:

a:

对于自碰撞厚度来说,它是通过对布料mesh点的偏移(offset),来求得一个用于碰撞解算的shell(壳),我们近距离观察一下:

可以看到被壳包裹在内的outputMesh。

需要特别指出的是,壳的显示形态是随着CollisionFlag(碰撞检测参数方法)的变化而变化的,在这里,牵扯到的知识点一下子拓展开了,别急,慢慢来。

nCloth布料的碰撞参数有三种:

vertex,edge和face:

vertex:

顶点碰撞,在没一个顶点建立一个碰撞球(collisionsphere)计算碰撞.

edge:

边碰撞,在每一条细分后的e

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2