用于沿(x,y)网格移动摄像机的Mel / Python脚本

时间:2015-12-17 08:15:18

标签: python matrix camera maya mel

我正在尝试为Maya创建Mel或Python脚本,它会逐行移动相机通过方形矩阵。能够输入自定义行/列值(N)会很棒。

我草拟了an algorithm我需要的,但遗憾的是缺乏实施代码的知识。

非常感谢代码方面的任何帮助 - 谢谢。

2 个答案:

答案 0 :(得分:2)

虽然@BrendanAbels答案合理,但它回避了Maya的用途。 Maya用于动画,因此你很少想在代码中移动东西(这样,因为它没有用处)。你想要的是你的代码启动一个节点结构来完成你想要的。

构建节点的优点如下:

  1. Maya将为您构建GUI。任何有能力的Maya用户都知道如何操作的GUI修改和动画。
  2. 您可以稍后更改结构的内部工作或为输入设置动画。
  3. 这会将您的代码嵌入M​​aya文件中,以便以后可以恢复。
  4. 好的,我们该如何做到这一点。有几种方法。我们可以使用ramp和lookup节点。或者我们可以直接做到并直接连接表达式节点。那么这在梅尔看起来是什么样的:

    addAttr -at long -sn N -k 1 persp;
    addAttr -at long -sn Xmax -k 1 -min 1 -dv 10 persp;
    addAttr -at long -sn Ymax -k 1 -min 1 -dv 10 persp;
    expression -s ("translateX = N % Xmax;\r\n" +
                   "translateY = ( (N - translateX)/Xmax ) % Ymax;")
               -o persp -uc all persp;
    connectAttr time1.o persp.N; 
    // eliminate prev line if you want to drive manually
    

    请注意 persp 节点如何调整3个新频道。我把时间连接到你的节点,但你可以真正地连接任何东西。自己驾驶它可以让你做不同的事情(如果你愿意,可以在渲染过程中移动相机)。

    你想要使用它有点不透明,因此很难说更多。可以说我们可以用较少的工作从头到尾解决你的整个问题,你做任何我们以前见过的事情都是极不可能的。

答案 1 :(得分:1)

您要使用的主要命令是lsxformcurrentTimesetKeyFrame

以下是设置变换位置的python脚本的基础知识。您可以使用currentTime更改时间值,使用setKeyFrame设置密钥。

此脚本希望您选择相机变换节点(即第一个ls命令)。

import maya.cmds as cmds

nx = 10
ny = 10
cam = cmds.ls(selection=True)[0]

z = 0
for x in range(nx):
    for y in range(ny):
        cmds.xform(cam, worldSpace=True, translation=[x, y, z])