在Maya单机版中获取动画开始和结束关键帧(无用户界面)

2024-10-02 04:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Maya Standalone获取动画的第一个和最后一个关键帧。如果不确定,Maya Standalone表示没有用户界面。这完全是命令行,Maya没有运行;这意味着您通常可以在Maya中执行的某些操作需要特殊的工作循环。 我所做的是使用maya.mel.eval('setPlaybackRangeToMinMax'),但令人惊讶的是,这在独立maya中不起作用。 因此,我正在寻找一种变通方法,基于现有动画,使用pymel.core设置最小和最大播放范围。到目前为止,我没有发现任何成功,我想知道是否有人有这样的例子。非常感谢


Tags: 命令行coreeval动画用户界面例子standalonemaya
2条回答

好的,经过进一步的测试,我能够让下面的工作

# Assuming that I've already imported or opened an animation file and selected the object
import pymel.core as pmc

keyframes = pmc.keyframe(q=True, time=(-9999999, 9999999))
min_max = sorted(keyframes)
min = min_max[0]
max = min_max[-1]

这已经成功地返回了完成其余工作所需的第一个和最后一个关键帧。我正在处理供应商的MoCap数据,所以我必须测试极端的时间范围,以便找到任何和所有关键帧,但它是有效的

您可以通过以下两种方法获取当前场景范围:pymelcmds

import pymel.core as pymel

pymel.playbackOptions(q=True, min=True)
pymel.playbackOptions(q=True, max=True)

import maya.cmds as cmds

cmds.playbackOptions(q=True, min=True)
cmds.playbackOptions(q=True, max=True)

在批处理或接口中运行它应该无关紧要。 Check out the docs了解更多信息

编辑:

是否尝试获取给定对象的第一个关键帧和最后一个关键帧的范围?如果是这种情况,那么您需要使用cmds.keyframe。您可以传入一个对象,它将返回所有关键帧的帧列表。从那里,您可以对其进行排序,然后获得第一个和最后一个键,这将是您要查找的范围:

import maya.cmds

obj = "pSphere1"  # Object to check animation range with.
all_keys = sorted(cmds.keyframe(obj, q=True) or [])  # Get all the keys and sort them by order. We use `or []` in-case it has no keys, which will use an empty list instead so it doesn't crash `sort`.
if all_keys:  # Check to see if it at least has one key.
    print all_keys[0], all_keys[-1]  # Print the start and end frames

如果不希望检查所有属性,则可以包括一个属性来检查关键点。例如,假设您为球体的平移设置了动画,您可以从translateX获得其所有关键点,如下所示:cmds.keyframe("pSphere1.tx", q=True)

相关问题 更多 >

    热门问题