🧤
【Maya】Pythonでアニメーションベイクを実行するとキーが一致しなくなる
スクリプトでベイクした際にモーションがズレる
cmds.bakeResultsを使ってベイクした際にモーションがガクガクしたりキーがおかしくなることがあって解決するために検証したことをまとめました。このAPIがちょっと癖があって何も考えず使えるものではなさそうです。Mayaのメニューからベイクした際には問題ないのですが。
環境
Maya2020.4 Python2.7
実装方法
すでに手動でベイクして調整している場合は現在実行しているコマンドを確認します。
これをスクリプトで実現するようにします。
bakeResults -simulation true -t "0:254" -hierarchy below -sampleBy 1 -oversamplingRate 1 -disableImplicitControl true -preserveOutsideKeys true -sparseAnimCurveBake false -removeBakedAttributeFromLayer false -removeBakedAnimFromLayer false -bakeOnOverrideLayer false -minimizeRotation true -controlPoints false -shape true
こういう引数で設定を渡していきます。
cmds.bakeResults("select_node", simulation=1, hierarchy="below", time=(1, 100))
フルベイクで出す
Mayaでリダクションを掛けない場合は1frame単位でフルベイクします。掛けない場合は別ソフトウェアで補完されます。
minimizeRotationをTrueにする
回転がおかしい場合はこのオプションをTrueに指定します。
回転チャネルのベイク処理中に、キー間でローカル オイラー コンポーネントを最小化するかどうかを指定します。ドキュメントから引用
smartを引数で渡さない
smartBakeをOFFで出したかったので意図的にFalseを渡していたのですが、smartは引数に指定した時点で挙動がおかしくなるようです。Mayaの不具合かなと思います。
ひどいジョイントは分かりやすくガクガクしたモーションになりますが、他のジョイントもズレてるようでした。自分はPythonで確認しましたが、melでも起きると思われます。
FYI: https://discourse.techart.online/t/bakeresults-not-actually-baking/8807
結果
以下はコマンドを使わずMayaでベイクした際と限りなく近いモーションでベイクできたコマンドです。スクリプトでベイクすると結構遅くなるのは気がかりです。
UIの描画などを止めてベイクの処理を高速化したりできるみたいです。
cmds.bakeResults(
hierarchy="below",
time=(start_time, end_time),
simulation=1,
shape=1,
controlPoints=0,
preserveOutsideKeys=1,
disableImplicitControl=1,
sparseAnimCurveBake=0,
sb=1,
oversamplingRate=1,
removeBakedAttributeFromLayer=0,
removeBakedAnimFromLayer=0,
bakeOnOverrideLayer=0,
minimizeRotation=1
)
Discussion