Python FBX SDK – 如何缩放具有关键帧的模型?

Posted

技术标签:

【中文标题】Python FBX SDK – 如何缩放具有关键帧的模型?【英文标题】:Python FBX SDK – How to scale models that have keyframes? 【发布时间】:2020-10-18 03:18:10 【问题描述】:

我正在尝试使用 Python FBX SDK 编写脚本来缩放模型。我正在使用LclScaling.Set() 设置比例值。但是我发现如果这个模型有关键帧,那么缩放就不会应用。

所以我的问题是如何正确缩放具有关键帧的模型。这是我的代码:

scale = node.LclScaling.Get()
value = 0.5
node.LclScaling.Set(fbx.FbxDouble3(scale[0] * value, scale[1] * value, scale[2] * value))

【问题讨论】:

我想通了。在 Maya 中,如果我设置平移或旋转关键帧,缩放属性也会在 FBX SDK 中具有动画节点。所以,如果我想修改 scale 属性,我应该使用 SetChannelValue 或 FbxAnimCurveFilterScale 而不是 LclScaling.Set() 【参考方案1】:

如果您无法缩放已经有动画关键帧的模型,它似乎在 Scale 参数上有关键帧,即使在回放会话期间缩放没有改变。当用户按下 S 快捷键为模型的位置设置动画时,这可能是可能的。此快捷方式一次生成 10 个关键帧,但这里只有 translation/rotation 关键帧对您很重要。

解决方案

手动或以编程方式删除图表编辑器中的冗余关键帧。

import maya.cmds as cmds

cmds.cutKey('pSphere1', time=(1,100), attribute='scaleX', option="keys")
cmds.cutKey('pSphere1', time=(1,100), attribute='scaleY', option="keys")
cmds.cutKey('pSphere1', time=(1,100), attribute='scaleZ', option="keys")

在此之后,您可以轻松地扩展您的模型。

附言

另一种合适的方法是更新 FBX 模型的旧比例关键帧(第一个在动画开始,第二个在动画结束)。

【讨论】:

谢谢!真的很有帮助!我通过你的方法消除了一些问题,但我仍然遇到了这个问题。例如,模型有旋转关键帧,我确保没有缩放关键帧,那么我的脚本仍然无法更改它的缩放值。也许我可以为这些模型添加比例关键帧来解决这个问题。网格和骨架之间有什么区别吗?再次感谢! 我认为角色的网格必须由骨架来管理。所以所有关键帧都必须分配给骨架(变形器的关键帧除外)。 顺便说一句,你知道如何在编辑器中为 Python FBX SDK 启用自动完成功能吗?【参考方案2】:

我想通了。在 Maya 中,如果我设置平移或旋转关键帧,缩放属性也会在 FBX SDK 中具有动画节点。所以,如果我想修改 scale 属性,我应该使用SetChannelValueFbxAnimCurveFilterScale 而不是LclScaling.Set()

【讨论】:

以上是关于Python FBX SDK – 如何缩放具有关键帧的模型?的主要内容,如果未能解决你的问题,请参考以下文章

fbx sdk 支持ios android吗

Fbx SDK 上轴转换

如何使用 FBX SDK 在 fbx 文件中加载嵌入的纹理? [关闭]

FBX SDK:如何逐点变换矩阵?

Linux,安装FBX SDK,如何自动确认?

FBX SDK 如何检索用户定义的对象属性