my funeral week

少しでも日々の生活に変化を。

MayaScripts_ForcePlayback:強制的に開始フレームからアニメーションを再生する

Mayaのアニメーション再生機能。シーンによってはきちんと最後まで再生されなくないっすか?
なんか最後から1~2フレーム手前で再生が停止してしまうことが多い気がします。

再生モードをループとかピンポンとか継続的に再生させるものになっている時はそこまで気になりませんけど・・・ワンショット再生にしていると再生停止後に再度再生させたくても、Mayaの標準の機能では最後のフレームに行かないと最初からアニメーションを再生はできません。よって、1~2フレーム手前で再生が止まってしまうとその分連続で再生ボタンを押さないとアニメーションを開始フレームから再生できなくて 本当にイライラ。なんなら時々何回押しても最終フレームに到達せず、結局手動でタイムスライダを開始フレームに持っていくこともしばしば・・・。

今までMayaはバージョン2010から2020まで触ったことありますが、未だにここだけ全然改善されないです。
この辺りはシーンの重さにも関わってくると思うので、軽いシーンならそもそもこんな問題は起きないのですが・・・。

という訳で、実行するたびに 強制的に開始フレームからアニメーションを再生させるスクリプト をこさえました。

ForcePlayback

めちゃくちゃ単純なコードです。

# encoding=utf8
# -*- coding:uft-8 -*-

import pymel.core as pm

BACKTOSTART = True

def main():
    # アニメーション再生中か否か
    isAnimPlaying = pm.play(q = True, st = True)
    
    startTime = pm.playbackOptions(q = True, min = True)
    
    if isAnimPlaying:
        # 再生停止し、開始フレームに戻る
        pm.play(st = False)
        if BACKTOSTART : pm.currentTime(startTime)
    
    else:
        # 開始フレームに戻り再生開始する
        pm.currentTime(startTime)
        pm.play(st = True)

アニメーション再生中なら再生停止し、そうでないなら開始フレームに戻ってからアニメーションを再生させるものとなっています。

自分は こいつを「Alt + C」に登録して標準のアニメーション再生を行うショートカットの「Alt + V」と併用しています 。現在のフレームからアニメーション再生したい時は「Alt + V」、最初からアニメーションを再生したい時は「Alt + C」みたいに。

アニメーション確認する際は開始フレームのポーズからの動作の流れをしっかり見たい性癖なので、再生停止処理時にも開始フレームに戻る処理を入れています が、不要な方は変数「BACKTOSTART」を「False」に書き換えてください。

本当なら標準の機能で解決する方法がどこかにあるのやもしれませんが、もう面倒なのでこれで満足しています。

ちなみにMaya2019くらいから、重いシーンでもアニメーションをスムーズに再生させる為のキャッシュ機能ができましたが、リグを操作するたび走るキャッシュ生成処理が重いので全く利用していません。次のバージョンのMayaで軽くなってることを願います。あと年間のライセンス利用料金を値下げしてください。またはMayaLTでノードエディタとPymelの利用を解禁してください。

さようなら。