• International日本語
  • 製作途中プロジェクトの動作が重い原因を教えて頂きたいです。

先日金魚すくいのアニメーションに関して日本のSpineディスコードサーバーで質問させていただいた者です。大変お世話になりました。
Spineの動作が重くなる原因について、やはり詳しく知りたいとなりましてご紹介いただいたフォーラムへの質問とアップローダー経由でのSpineプロジェクト送付を行い、さらなるご助言を仰ぎたく思います。

https://xgf.nu/i18Lf
こちらになります。

通常のSpineプロジェクトでしたら60FPS前後で安定するのですが、お渡しした物は私のPC環境では約
5FPSにまで落ちました。
スキン数、ボーン数ともに完成時はお渡ししたプロジェクトの5倍になる想定ですので、負荷が大きい問題については解決する必要があり、また後学のためにもどのような箇所に問題があるか是非ご意見いただきたく思います。またお手間取らせてしまいますがどうぞよろしくお願い致します。

    Related Discussions
    ...

    godman こんにちは!
    フォーラムへ質問を投稿していただきありがとうございます。ただ、フォーラムでは私以外のSpineチームのメンバーも投稿を確認していますので、もし今後ご質問される際は、初めて見た人でも経緯が分かるように問題についての説明を記載いただければ幸いです。

    さて、添付データを拝見しまして、私のPC上でもアニメーション再生時にエディターのFPSが8FPS程度まで落ちてしまうことを確認しました。
    原因についてですが、ボーンも多い上にメッシュ頂点も非常に多く、全体的にパフォーマンスを低下させてしまう要因が多いセットアップになっていましたので、まずはスケルトンの実行時のパフォーマンスに関する情報がまとまっているユーザーガイドの測定基準ビューのページを、今後のためにもぜひご一読されることをお勧めします: Spineユーザーガイド: 測定基準ビュー

    上のページ中のCPU使用率の項目にある通り、ボーンの数もCPUには影響しますが、それだけではなく「タイムラインの数が多い」とアニメーションを適用するために必要な処理を増加させてしまいます。
    例えば、送っていただいたデータでは設定モードでは金魚の配置がばらけておらず、アニメーション中にトランスレートと回転のキーを使って金魚の配置をばらけさせていますが、そのようにすると金魚1匹をばらけさせるためだけに2つのタイムラインを必要としますので、金魚を設定モード内でばらけさせておいて配置用のタイムラインを全て削除したらそれだけで5,300個ほどあるタイムラインのうち402個ほどタイムラインを減らすことができますので、もしボーンを減らすことが出来なかったとしても、タイムラインを減らすように工夫されることをお勧めします。

    ただ、現在の金魚のアニメーションが完成形に近い状態なのかは分かりませんが、もしそうだとしたら、幸い、現在のディティールくらいの動きは4/1以下のボーンで再現が可能ですので、純粋にボーンを減らすのが早いかもしれません。例としてボーンを減らしたセットアップを作成してみましたので、以下のZIPファイルをダウンロードして、中のSpineプロジェクトを確認してみてください。(同じ画像素材を使う想定ですので、イメージパスを修正してご確認ください):

    kingyo-reduced.zip
    105kB

    kingyo_reduced.spine : 金魚単体で修正したデータ
    kingyo_reduced_duplicated.spine: 修正した金魚を120匹ほど並べてみたデータ(私のPC上では60FPSで再生できることを確認しました):


    おそらくオリジナルのデータで金魚1匹につき大量のボーンが設定されていたのは、金魚の動きをできるだけ滑らかにしたいためかと思いますが、以下のTipsにもある通り、メッシュとウェイトをうまく利用すればそれほどたくさんのボーンを使わずとも滑らかな動きを実現できます:
    http://ja.esotericsoftware.com/spine-tips#15-fisherpelican
    (※上の「釣り人ペリカン」の実際のSpineプロジェクトはTwitchのアーカイブページの「Download Files」ボタンからダウンロードできます。)


    また、補足として、タイムラインを減らすためにはコンストレイントを利用するという手もあるのですが、今回の要件では「金魚を大量に複製しないといけない」ということで、残念ながら現在の機能ではボーンの複製をする際に同時にコンストレイントを複製することができない関係で非効率的なやり方となってしまうので省きました。

    この回答がご参考になれば幸いです。

      Misaki
      詳細なご返答、並びに2つの改善サンプルの作成誠にありがとうございます。
      フォーラムは多くの方が目を通すもの、という意識が抜けご迷惑をおかけし大変失礼致しました。
      以降フォーラムへの書き込み時にはこの事注意してまいります。

      頂いたサンプルSpineはこちらのPCでもほぼ60FPSで動きました。
      ボーンやメッシュの作りによって大幅に処理が軽くなる点は、サンプルを見てどのように作るべきか理解出来ました。
      タイムラインを減らすほど軽くなる、などSpineの性質についてもよく知らない点であったため助かります。
      また今回は関係ないのですが紹介いただいたリンク先の情報からクリッピングの負荷が特に重い点なども今後の製作に関わる重要な情報として活用させて頂きます。今の私の知識では書かれている内容を完全に理解できてはいないかもしれませんが、また処理が重くなった際には特にこのページを参考に読み解いて参ります。
      提示頂いた改善案に従い、Spineプロジェクトを作り直し軽量化を測る予定です。
      非常に丁寧なご対応ありがとうございました、もしまた解決出来ない問題に直面した際にはご助力仰ぐことになるやもしれません、その際はどうぞよろしくお願いいたします。

        godman ご参考になったようで良かったです!もしユーザーガイドを読んでよく分からなかった点などがありましたらお気軽にこのフォーラムでご質問ください。ご返信いただきありがとうございました!