スクリプトオペレータ検証

会社にて新しいフェイシャルアニメーションツールを開発しなければならなくなった。
どうしよう…なにかいい方法は…?と悩んだあげく、XSI徒然日記さんのPoseMixerToolを使用してみることにしたw

いいツールだったんでつい!!(言い訳)
が、PoseMixerToolの説明中にも書かれていたように「複数ポーズを登録すると、重い。」
これはエクスプレッションがどんどん複雑になっていってるからなので、避けようがないですねー。
かといってある程度フレームレート確保しないと使いづらいし…
ということでスクリプトオペレータをためしてみることにしました。

スクリプトオペレータ >>> エクスプレッション であることはいろんなところで聞いてはいましたが
試したことはなかったし、どのくらい変わるものなのか明確な数値を示してくれてるものを見たことがなかったので、とりあえず手動で同様の条件を組んでみて実験!!!

実験結果

  キーフレームなし(fps) キーフレームあり(fps)
エクスプレッション 591 116
スクリプトオペレータ 586 196

結論:スクリプトオペレータはエクスプレッションの約1.6倍早い!!

まぁかなりざっくりなので、実装方法次第では数値は上下する可能性もありそうです。
さらに実験によってわかったのは以下の事。

  • 関連するプロパティにキーフレームがない場合とある場合では計算の有無で処理速度が大きくかわる。
  • スクリプトオペレータは直接パラメータを接続した方が処理が早い。めんどくさいからと言って大元からアクセスしようとするとエクスプレッションより処理は遅くなる。

ということ。分かりにくいので解説をば。

処理負荷

関連するパラメータにキーフレームが存在していない場合、エクスプレッションやスクリプトオペレータの計算は行われないようで、処理的に特に負荷がかかることはないが、1つでもキーが存在すると計算が行われ処理負荷が高まる。これはFカーブ云々ではなく、「キーフレームが1つでも存在していれば」という条件のようでした。

繋ぎ方

カスタムパラメータ「AAA」があり、その中に「Param1」「Param2」というパラメータが存在していた場合

  • カスタムパラメータ「AAA」を入力ポートに繋ぎ、パラメータ「Param1」「Param2」の値を取得する
  • パラメータ「Param1」「Param2」を直接入力ポートに繋ぎ値を取得する

では後者の方が圧倒的に処理スピードが速くなるらしい。前者は逆にエクスプレッションのときよりも処理速度が落ちてしまう。これは注意せねば…。

スクリプトオペレータにしてもリアルタイム再生は難しいにしても光は見えた!!(多分)