Maya浅谈nhair毛发

浅谈nhair毛发

一、要想nhair不出问题,就要遵循以下规则 1、如果头发有动态,出缓存指定缓存,关闭动力学,删除(关闭)解算节点 2、如果头发没有动态,关闭动力学,删除(关闭)解算节点 nhair的毛发解算节点,也就是nucleus节点,一般是直接删除的,Maya在后台渲染的时候会自动打开动力学,有几率给nhair毛发渲染造成一定的影响

动力学改为静态

关闭结算节点

二、有动态 1、Maya内展示

maya内展示

导出缓存(这一步一般都是解算来出的) 导出缓存前要打开毛发动力学和解算节点,我这边提供几个Python脚本,可以更改所有节点

# 打开所有毛发动力学
for obj in cmds.ls(type="hairSystem"):
   cmds.setAttr((obj + ".simulationMethod"), 3)
   print obj, cmds.getAttr(obj + ".simulationMethod")
# 打开所有解算节点
for obj in cmds.ls(type="nucleus"):
   cmds.setAttr((obj + ".enable"), 0)
   print obj, cmds.getAttr(obj + ".enable")

选择毛发节点,nCache->Create New Cache->nObject 口

选择毛发点

然后设置导出的路径,文件格式等, 然后点创建

创建

3、关闭动力学,关闭(删除)解算节点 这里是关闭场景内所有的节点,我这边提供几个Python脚本

# 关闭所有毛发动力学
for obj in cmds.ls(type="hairSystem"):
    cmds.setAttr((obj + ".simulationMethod"), 1)
    print obj, cmds.getAttr(obj + ".simulationMethod")

# 打开所有解算节点
for obj in cmds.ls(type="nucleus"):
    cmds.setAttr((obj + ".enable"), 0)
    print obj, cmds.getAttr(obj + ".enable")

动力学改为静态1

关闭结算节点

4、指定缓存,如果有cacheFile节点直接指定,如果没有就采用下面的方法 可以发现我们的文件已经没有动态了

指定缓存

我们现在指定缓存, 选择毛发system的shape节点

shape节点

nCache->Attach Cache

attachcache

更改设置,指定到毛发,点merge

merge

merge后,我们点播放,可以看到毛发是有动态的,直接拖动帧是看不到动态的

播放merge

5、检查cacheFile路径是否正确

import maya.cmds as cmds
import os
all_image = cmds.ls(exactType ="cacheFile")
for a in all_image:
    b = cmds.getAttr(a+".cacheName")
    c = cmds.getAttr(a+".cachePath")
    print (c+"/"+b+".xml")

三、无动态 没有动态就方便了,直接用工具关闭所有毛发动力学和解算节点

# 关闭所有毛发动力学
for obj in cmds.ls(type="hairSystem"):
    cmds.setAttr((obj + ".simulationMethod"), 1)
    print obj, cmds.getAttr(obj + ".simulationMethod")
# 关闭所有解算节点
for obj in cmds.ls(type="nucleus"):
    cmds.setAttr((obj + ".enable"), 0)
    print obj, cmds.getAttr(obj + ".enable")