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 属性,我应该使用SetChannelValue
或FbxAnimCurveFilterScale
而不是LclScaling.Set()
【讨论】:
以上是关于Python FBX SDK – 如何缩放具有关键帧的模型?的主要内容,如果未能解决你的问题,请参考以下文章