Maya的布料解算入门
Maya是通过各个模块构建3D角色,使其可以实现大部分虚拟效果的工具,主要包括模型、绑定、特效、贴图、渲染,还可以利用工具调用其他功能。这里主要是针对解算部分进行说明,以方便使用maya进行布料等解算。
Maya相关说明在百度百科中可以查看,这里就不再赘述了。这里使用2020版本。
一.准备工作
Maya2020安装这里就不太多说了,windows用户基本就是点点点点就可以实现了,mac系统没用过,不晓得,而linux用户实现起来比较麻烦,首先需要安装相应的发行版,目前官方给出了针对ubuntu18.04的系统安装说明,但是安装起来相当复杂,我没成功。(据说linux系统下的maya可以有更快的运算效率)
如果想尝试ubuntu系统maya,然后安装失败了卸载的时候记住千万不要使用autoremove命令,否则后悔就晚了。
自定义界面
更改语言
首先安装maya后,界面会跟随系统,定义maya的语言版本,为了显得适应个人操作建议修改成自己喜欢你的语言,官方给出方法是更改环境变量才能是界面保持指定的语言版本或设置env,这里我会改成英语。
- 修改环境变量:
1.打开win+r打开cmd
2.输入sysdm.cpl打开系统属性,进入高级标签
3.新增系统环境变量为
确定即可。
-修改env(这个方法只适用安装包包含英语补丁):
1.打开C盘-用户(user)-当前用户名-文档(document)-maya-2020-Maya.env
2.使用记事本或者Notepad++打开
3.输入 MAYA_UI_LANGUAGE = en_US 保存关闭。
自定义工具栏
打开maya后按住空格,会发现一堆基本用不到工具都在工具栏内,这是后自定义个自己常用的工具栏就很方便了
1.首先创建一个自定义的模块叫Simulate;
2.然后再右侧找到;
Deform \ Edit Mesh \ Fields/Solvers \ Mesh Tools \ nCache \ nCloth\ nHair \ nConstraint
3.双击选择加入到Menus in Menu set中,根据自己的需要排序(一般情况下用这些工具就够了);
4.特殊情况下可能会用到skin(骨骼绑定模块) 和 Generate(毛发模块)建议不加载到这里,应为加入了就会变得特别多,就没有意义了。
5.按住空格
找到HotboxControls-HideAll隐藏所有
然后只显示common和Custom就可以了
建议打开和关闭的工具
建议关闭没必要的渲染器和插件以节省软件打开时间,比如说Arnold,如果项目不适用Arnold的材质和灯光,建议关闭
1.再窗口的首选项中找到插件管理器
2.
挂载animlmportExport 动画曲线导入导出工具(一般用得到)
取消Boss 流体海洋表面工具
取消mtoa 阿诺德渲染器
如果暂时不需要Bifrost可以先关闭,这将为打开maya节省很多时间
Bifrost一般在底部,直接拉到最下面你在Boss插件的相关位置
3.Maya工具栏有一排空间特别大的快捷工具栏,如果没有自定义工具可以关闭,因为基本上用不上还会占空间。
方法:进入窗口-设置/首选项-首选项中找到UI环境找到Shelf标签,取消选择。save
4.关闭模型编辑工具,减少右侧栏,
5.在显示里添加当前帧数和场景时间
6.
保存预设,并锁定。
设置文件打开方式
有很多情况下maya文件保存会以动画final的形式提交,因此,所有资产都是被加载进到maya文件中的,所以这里需要注意一下以免电脑加载缓慢。
1.Ctrl+o打开文件选择页面
2.
在options的Referencing标签中找到loadSettings,选择load no reference,
当打开文件时一般情况下就会弹出选择资产的界面
如果你发现文件有几百兆多半是资产被导入了,这就没什么办法了。
设置project工程目录
你可能处在练习状态下,为了节省系统盘资源占用,我们将工程转移到一个可以方便找到的位置。以方便找到movies和其他相关数据。
1.在file(文件)菜单栏下,找到project Window(工程设置)
2.创建一个新的工程点击new,创建一个新的工程
二.使用NDynamic模块进行解算
虽然ndynamic的布料解算是个老的知识点了,但是现在还有一些项目需要用到这个组件。
公司发的镜头一般都带有布料资产并会带有自定义的控制器,部分参数会传递到控制器上,但是这有时候可能并不能满足需求,就需要到资产内部修改子节点。
1.Maya解算基础
一个3D角色的服饰大多依托于角色绑定,也有部分是依托于父子关系的,父子关系的布料reference相对依托于绑定的布料问题更大一些,最好的处理方式是附加一个骨骼节点,为该布料增加权重,当然这就要说到资产创建,这里不说明资产创建的问题。
我的理解:maya 利用模型的点间距,通过计算点的数据传递使模型矩阵满足流体力学公式,然后通过分配切面约束和点距约束来达到模拟张力的效果,使其达到平衡状态的方法。
有布料资产的情况下解算
- 首先打开人物的reference,了解角色及控制器,查看控制器内是否有类似Dynamic或cloth或sim的字样的词条,那就是基础的控制器了。(这里不太好展示)
- 一般这个控制器里会有一些关键的属性参数,他们与原始参数建立了连接,使用这些参数一般都可以实现简单的解算。
- 这样的解算一般跟著重于实现简单动画效果,从而提升动画质量。
- 现在有很多动画都是通过绑定来达到固定的动画效果
2.快速创建布料
针对没有布料资产的文件就需要自行创建,这里给出一个简单的创建方法,以便可以快速实现。
布料的组成
一张布料是由多个shape和解算器组成的,默认情况下创建一个N布料会自动生成2个shape一个参数控制器,一个解算器组成,有时需要增加碰撞体和约束控制器。
创建布料
-
首先我们先构建一个简单的‘胳膊’和‘袖子’(通常情况下布料解算都是通过解算低模来包裹高模来实现解算效果,因为高模的模型复杂不利于解算,一般从动画final或绑定那里获得的资产文件高模和低模都是做好包裹的,通常不需要自行包裹,动画未进入final阶段的动画文件为了方便制作动画有可能会出现无高模的状态,这时需要请动画替换资产再进行解算)
-
选择绿色布料后,会注意到,Inputs下有两个节点,一个是绑定权重,另一个是是根。shapes里的clothShape是要做解算的低模。
这里需要注意
①.在创建布料之前需要注意模型的底层是否只有一个shape实体,需要打开上图标签。如果有其他东西需要咨询或可能是是之前创建过布料后做了修改等操作剩余的残留需要删除。
②.创建布料的模型最好是间距想相同或类似的达到均匀为佳,不能出现及点小间距模型,如出现间距不统一的地方请做适当修改
咳咳越写越多,这里不做过多解释,因为这篇文章只是入门而不知制作资产。 -
从自定义工具中选择创建布料,默认情况下是
这个样子的,如果存在解算器,则会有一个名字为Nucleus1的子选项。如果是独立个个体建议选择new选项而不是已有的。
需要注意的是上面的连个单选框(后期可以更改)。
1–local Space Output 为锁定当前创建布料为中心,这对于普通解算是必须的,他会让你的布料看起来是相对于人运动的
2–World Space Output 为锁定为世界坐标,这样在表现长距离唯一并没有特别长动画的效果下非常有效的加速效果。这个功能开启后会发现变成了Houdini的空间效果,如果想要维持这个世界坐标并产生正常的效果就需要将角色的全部移动到世界中心位置进行解算。 -
这时候就会在低模的基础上创建一个被骨骼带动的cloth的布料了。
内部结构
-
首先从表面上看除了原有的cloth模型还则更加了两个节点,一个解算器一个参数控制器。*
-
一般来说参数控制器内有且只有一个shape,如果出现两个就要小心了,这可能带来很多错误,并会给之后修改造车给麻烦。*
-
然后来看一下刚刚的shape模型。打开shape节点
会看到一个叫outPutChoth的节点,这个节点就是现在显示出来的shape也是解算所显示的shape,这个shape会继承原始shape的材质球,并会继承原shape上的部分参数,对解算造成影响,为了后面的区分我们新给个材质球到这个shape 上,
修改个颜色
然后会发现attribut里会有两个lamberte证明添加成功了。 -
然后选择现由于cloth顶层节点,在ncloth中的edit标签下会看到Display Current Mesh和Display Input Mesh,前者是当前的展示布料后者则是原始shape(这个原始shape还为Current Mesh提供了RestShape和InputShape的额外mash传递属性*
-
为了方便观察我们打开节点编辑器去讲解里面的内容
其中左侧两排为绑定的内容,
中间的clothShape为原始模型,我们会看到他的他的worldMesh是输出给nClthShape属性编辑器节点的,
右侧一排为解算器他的输出工程是通过下方的节点传递的,而下方nCloth有约束着解算器的输入属性。
然后最后一排为最终解算输出效果的shape和刚刚为原始模型赋予的材质球。
这样的结构就会让布料的初始位置永远的和模型同步 -
为了让我们的布料能有一部分跟随模型解算,也就是常说的约束可以使用两种方式进行约束。
①内部约束(摆脱Input和Rest控制的约束)
就是同InputMeshAttract属性控制约束,默认情况下,布料是受到Attract和Rest控制的,即使InputMeshAttract参数为0,但是仍然是受控和映像的,因此这会对解算效果比较特殊的布料会造成受限而无法实现效果。
如何控制Attract参数
1、选择nCloth1节点,Ctrl+A打开属性控制面板
2、点击DynamicPropertites标签
3、找到InputMeshAttract属性增加其参数大小以使布料受到Attract的完全控制。
InputMeshAttract 参数建议给到1及以上以达到受限的约束效果
InputAttractMethod 参数是约束方式,默认是不锁死的状态,另一个的锁死状态,如果非必要不建议锁死。
其他两个参数根据动画效果而调节这里不解释参数
4、为Attract绘制权重表示影范围
这里需要注意的是不要使用Texture的形式绘制贴图,这会增加shape面数,并且会出现控制不准确的现象。这中约束方式不会增加节点。
②外部约束(点和面的约束)
1、
先将outputcloth选择为点模式,然后选中需要约束的范围,ctrl加选需要依附的模型。从快捷标签中选择nConstraint创建pointToSurface对当前选择的点和已选择的面进行约束。
2、该约束方式是以解算器的初始帧数为约束建立开始时间,通过选择的点和当前距离选择点距离最近的面建立约束。(资产模式下是以资产初始帧为开始约束时间)
3、这种约束方式会增加三种节点,一个是碰撞体一个是约束器节点两个转换器。
这样一看,大致的意思就是拾取碰撞体和布料的区域序号整合到约束器上然后传递给解算器,让解算器处理。
4、这里创建的碰撞体和后面创建的碰撞体是一个东西,只不过这个没有开启碰撞,但是碰撞体是激活的。并且这种碰撞体不会根据布料和模型的距离预设碰撞距离也不会指定哪个解算器,如果担心出问题就需要手动创建碰撞体。 -
为了布料和角色产生必要的碰撞,需要为解算器添加碰撞体以保证碰撞的有效性。
选择碰撞体为其添加为碰撞体
然后指定需要添加的碰撞体的解算器,
这里需要注意一下,每个模型只能给一个解算器添加碰撞体,不能直接为两个解算器添加碰撞体,如需添加需要在节点编辑器中连接对应节点
如果是添加约束时创建的碰撞体则会时未开启碰撞的状体,并不是碰撞没有添加成功。
从节点编辑器里可以看到,碰撞体时和布料没有任何关系的。 -
修改解算器以达到场景需求
其他的先不看,先看看这5个重要的参数
首先CurrentTime是当前动画帧数,这个时黄色的,并不是和那个自己创建的控制器产生关联了,而是关联的时间线,不建议将这个进行BreakConnection。
若修改了,需要在节点编辑器中创建time节点重新连接。
然后StartFrame是解算开始帧。
FrameJumpLimit为分级跳帧解算,处理一些动作太快的往返的动画解算。
TimeScale是当前的动画速度反馈,动画速度越快就需要更大的数值以影响解算速度
这会使帧数成正比增长,也就是说如果timeScale为2就是每一帧就会产生两倍速度的解算效果,这会对解算精度造成影响,适当提高解算精度以防止穿帮。
SpaceScale 是根据角色空间场景的的比例进行调整参数,这需要了解默认的场景比例大小
如果布料比例大于这个范围则SpaceScale相对减小
如果布料比例小于这个范围则SpaceScale相应增大以维持正常比例
默认的方格大小为厘米模式,若发现做了修改请换算该大小进行SpaceScale的设置((默认设置)
这里讲的不是很全面,但是越想越多,越写越多,变成了太长不爱看系列,就不好了,如果有问题或意见请关注我的公众号或私信我