我其实不会用Yeti插件,做不出好看的皮毛效果,因项目而熟悉Yeti的mel。Yeti的文档是相当全,不懂的完全可以看Yeti官方文档,进入正题。
1. 在Maya中获取Yeti graph node
import maya.cmds as cmd
all = cmd.ls(type='pgYetiMaya')
node的类名为 pgYetiMaya。 长时间不用Maya都忘了去哪找node的type了。
2. 获取Yeti graph node中的 cache 文件路径
cmd.getAttr(node+'.cacheFileName')
node为 1 中获取的节点名。 大部分时间不知道属性名,只能悲催地用
cmd.listAttr(node, r=True)
列出来慢慢找了。
3. 获取Yeti节点图内部节点
其实Yeti本身内部就是一个旧节点图,通过命令可以获取到这些节点,并能修改其属性。mel命令如下:
pgYetiGraph -listNodes node
node为 1 中获取的节点名
4. 获取Yeti节点图中的某种节点
pgYetiGraph -listNodes -type "texture" node
-type指定 节点类型,类型可以在Yeti的Graph editor中查看。
通过maya.mel.eval() 执行后会得到一个包含node name的list
5. 获取Yeti节点图中某个节点所有属性
pgYetiGraph -node "texture" -listParams node
-node 指定Graph editor中存在的节点。
-listParams 说明要列出所有属性
6. 获取Yeti节点属性
pgYetiGraph -node "texture01" -param "file_name" -getParamValue node
-param 指定属性名。大部分时候不知道属性名,就需要5中的方法,先全列出来看看。
-getParamValue 说明是获取属性。很明显肯定有对应修改属性的参数。
7. 修改Yeti节点属性
pgYetiGraph -node "texture01" -param "file_name" -setParamValueString "new_path" node
-setParamValueString 后面加空格 跟上新路径
8. 一点参考代码
import maya.cmds as cmd
import maya.mel as mel
def get_graph_path(node):
return cmd.getAttr(node+'.cacheFileName')
def set_graph_path(node, path):
cmd.setAttr(node+'.cacheFileName', path)
def get_texture_node(graph_node):
mel_cmd = 'pgYetiGraph -listNodes -type "texture" %s' % str(graph_node)
texture_nodes = mel.eval(mel_cmd)
return texture_nodes
def get_texture_path(texture, graph):
mel_cmd = 'pgYetiGraph -node "%s" -param "file_name" -getParamValue %s' %(str(texture), str(graph))
path = mel.eval(mel_cmd)
return path
def set_texture_path(path, node, graph):
mel_cmd = 'pgYetiGraph -node "{node_name}" -param "file_name" -setParamValueString {path} {graph}'.format(node_name=str(node), path=str(path), graph=str(graph))
print mel_cmd
all_yeti_nodes = cmd.ls(type='pgYetiMaya')
for node_name in all_yeti_nodes:
# 获取yeti cache的路径
cache = get_graph_path(node_name)
# 每个yeti cahce内部都是个节点图,获取所有 texture节点
# 返回的是节点名字的list
tnodes = get_texture_node(node_name)
for node in tnodes:
# 获取texture节点内部的 图片路径
texs = get_texture_path(node, node_name)
# 给texture节点设置新的 path
#set_texture_path(texs, node, node_name)
更多请参考Yeti官方文档