🧤

【Maya】Pythonでアニメーションベイクを実行するとキーが一致しなくなる

2022/12/21に公開

スクリプトでベイクした際にモーションがズレる

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