如何在玛雅场景中保存Python变量?
例如,我在Maya的脚本编辑器中创建了一个变量x,并保存了场景。当我重新打开玛雅和重新保存的场景,x变量不再存在。
有可能吗?
发布于 2014-04-27 06:20:07
是的,使用脚本节点、使用optionVar或将变量存储在属性中。
总体而言
场景持久化应该用节点来构建。事实上,玛雅的一切都应该是一个节点,或者是由节点树构建的。好处是,如果你让你的计算成为一个节点,那么玛雅将自动为你处理所有的事情。例如,渲染引擎就是这样存储数据的。他们注册一个特殊的节点并从该节点读取数据。
需要问这个问题,“如何在Maya场景中保存Python变量?”,这表明您确实应该构建一个节点解决方案。这方面有几个例外,这些异常与应该保存为optionVars的一般用户GUI首选项有关。
玛雅并没有强制你做正确的事情。你可以自由地做你想做的事,理智与否。因此,使用场景保存脚本作业将您的环境快照存储到加载自动运行的脚本节点是可能的,有点可疑。这是不可取的,就像在代码中使用全局变量是不可取的一样。这也是有点不可靠,因为用户可以禁用自动运行的在线加载scriptNodes,有充分的理由。
关于节点解
玛雅作为一种规则,并不像大多数人第一眼就知道的那样起作用。就像用代码编写的文本不是计算机通常执行的那样,而是编译后的代码才是要执行的。编译器对于我在这个上下文中可以做什么有一点回旋余地,并且通常会抛出一些东西。因此,在代码中,考虑文本在代码中的样子,而不是它构建的结构,并不是真正明智的想法。
在玛雅,你应该建造的结构是节点。在此之外还有两个额外的用例,它们是:
这两个只能专门用于读取节点。Mayas对象辅助函数本质可以非常有效地向用户隐藏事实,但这实际上是您想要做的。在这个范围之外的任何东西都不会受益于使用Maya。因此,每当您使用maya时,您都希望利用节点。把它想象成在自己的编程语言之上使用第二种语言。这是玛雅的实际语言。
让我们从网格随机点位置的天真方法开始(注意,我避免使用对象一词,因为Maya没有这样的概念):
import maya.cmds as cmds
import random
def randomize_points(scale):
sel = cmds.polyListComponentConversion(ff=1, fe=1, fuv=1, fvf=1, tv=1)
sel = cmds.ls(sel ,fl=1)
for item in sel:
cmds.move((random.random()-0.5)*scale,
(random.random()-0.5)*scale,
(random.random()-0.5)*scale,
item, r=1)它可以工作,但有三个缺陷:
代码在意义上是简单明了的,id可以像用户在GUI中所做的那样。但到底会发生什么呢?变化到哪里去了?简单地说,答案是2倍,它们要么去调整数组(很可能),要么对象位置数组。但有一个更好的方法,我可以使用玛雅原语来操纵一个类似的行为。输入节点。
首先,您需要进行一点节点购物,哪些节点实际上可以提供噪声功能?问题是这里似乎没有多少竞争者。尽管有一个节点,基本上是滚动你自己的变形,那就是粒子节点。这就是如何用粒子节点、一些噪声和一些属性来解决这个问题:
..。待续..。
发布于 2016-06-08 08:46:36
下面是在maya文件中保存python变量的简单示例。
让我们将变量X保存在Maya文件中,并且X的值是100。
我们不想看到这个错误:
# Error: NameError: name 'x' is not defined # 若要在Maya文件中保存变量,请在保存Maya文件之前执行以下代码。
import maya.cmds as cmds
var_node = cmds.scriptNode(scriptType=1, name='CustomVariable', beforeScript='python("x = 100")')
cmds.scriptNode( var_node, executeBefore=True )再次打开文件并执行:
print xhttps://stackoverflow.com/questions/23317884
复制相似问题