首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Maya场景保存Python变量

用Maya场景保存Python变量
EN

Stack Overflow用户
提问于 2014-04-27 00:01:50
回答 2查看 4K关注 0票数 2

如何在玛雅场景中保存Python变量?

例如,我在Maya的脚本编辑器中创建了一个变量x,并保存了场景。当我重新打开玛雅和重新保存的场景,x变量不再存在。

有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2014-04-27 06:20:07

是的,使用脚本节点、使用optionVar或将变量存储在属性中。

总体而言

场景持久化应该用节点来构建。事实上,玛雅的一切都应该是一个节点,或者是由节点树构建的。好处是,如果你让你的计算成为一个节点,那么玛雅将自动为你处理所有的事情。例如,渲染引擎就是这样存储数据的。他们注册一个特殊的节点并从该节点读取数据。

需要问这个问题,“如何在Maya场景中保存Python变量?”,这表明您确实应该构建一个节点解决方案。这方面有几个例外,这些异常与应该保存为optionVars的一般用户GUI首选项有关。

玛雅并没有强制你做正确的事情。你可以自由地做你想做的事,理智与否。因此,使用场景保存脚本作业将您的环境快照存储到加载自动运行的脚本节点是可能的,有点可疑。这是不可取的,就像在代码中使用全局变量是不可取的一样。这也是有点不可靠,因为用户可以禁用自动运行的在线加载scriptNodes,有充分的理由。

关于节点解

玛雅作为一种规则,并不像大多数人第一眼就知道的那样起作用。就像用代码编写的文本不是计算机通常执行的那样,而是编译后的代码才是要执行的。编译器对于我在这个上下文中可以做什么有一点回旋余地,并且通常会抛出一些东西。因此,在代码中,考虑文本在代码中的样子,而不是它构建的结构,并不是真正明智的想法。

在玛雅,你应该建造的结构是节点。在此之外还有两个额外的用例,它们是:

  1. 出口商(进口商,但由于他们的性质,他们是节点绑定,因为他们的目标玛雅)
  2. 图形用户界面,可内省Mayas当前状态或向用户提供外部信息。

这两个只能专门用于读取节点。Mayas对象辅助函数本质可以非常有效地向用户隐藏事实,但这实际上是您想要做的。在这个范围之外的任何东西都不会受益于使用Maya。因此,每当您使用maya时,您都希望利用节点。把它想象成在自己的编程语言之上使用第二种语言。这是玛雅的实际语言。

让我们从网格随机点位置的天真方法开始(注意,我避免使用对象一词,因为Maya没有这样的概念):

代码语言:javascript
复制
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)

它可以工作,但有三个缺陷:

  1. 除非你运行它,否则你不会知道它是什么样子的。 你可以撤销艰难,所以测试和撤销。也许你也需要一个随机的种子变量?
  2. 您需要为此构建一个GUI,这样用户就可以使用它了。
  3. 没有办法指定随机性的配置文件。 (这里有一个,所以您可以很容易地运行代码,我可以使用许多pythons噪声实现中的一个。我还是会解决这个问题的。)

代码在意义上是简单明了的,id可以像用户在GUI中所做的那样。但到底会发生什么呢?变化到哪里去了?简单地说,答案是2倍,它们要么去调整数组(很可能),要么对象位置数组。但有一个更好的方法,我可以使用玛雅原语来操纵一个类似的行为。输入节点。

首先,您需要进行一点节点购物,哪些节点实际上可以提供噪声功能?问题是这里似乎没有多少竞争者。尽管有一个节点,基本上是滚动你自己的变形,那就是粒子节点。这就是如何用粒子节点、一些噪声和一些属性来解决这个问题:

..。待续..。

票数 4
EN

Stack Overflow用户

发布于 2016-06-08 08:46:36

下面是在maya文件中保存python变量的简单示例。

让我们将变量X保存在Maya文件中,并且X的值是100。

我们不想看到这个错误:

代码语言:javascript
复制
# Error: NameError: name 'x' is not defined # 

若要在Maya文件中保存变量,请在保存Maya文件之前执行以下代码。

代码语言:javascript
复制
import maya.cmds as cmds

var_node = cmds.scriptNode(scriptType=1, name='CustomVariable', beforeScript='python("x = 100")')
cmds.scriptNode( var_node, executeBefore=True )

再次打开文件并执行:

代码语言:javascript
复制
print x
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23317884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档