いつもお世話になっております。
スケルトンのボーン構成をプロジェクト途中で改修する際、不必要なボーンを削除したり、セットアップ位置を変更するケースが生じます。
その際、削除したいボーンのキーが、どの制作済みアニメで使用されているか調べる必要があるのですが、アニメが量産されていくほど、確認が大変になっていきます。
作成済みアニメに特定のキーが使用されているかを検索する方法はありますでしょうか?
いつもお世話になっております。
スケルトンのボーン構成をプロジェクト途中で改修する際、不必要なボーンを削除したり、セットアップ位置を変更するケースが生じます。
その際、削除したいボーンのキーが、どの制作済みアニメで使用されているか調べる必要があるのですが、アニメが量産されていくほど、確認が大変になっていきます。
作成済みアニメに特定のキーが使用されているかを検索する方法はありますでしょうか?
koyu2 こんにちは!
特定のキーというのは特定のボーンのキーということで合っていますか?
残念ながらボーンがどのアニメーションの中でタイムラインを持っているかは確認するための便利な機能はありませんが、少なくとも「どのアニメーションでも使用されていないボーン」は検索と置換の未使用のチェックボックスにチェックを入れていただくことで検索することができます。
ただしこの方法はランタイムでは必要なボーン(例えばUnity上でBoneFollowerのターゲットにするために追加しているボーンなど)も選択しますのでランタイムで必要なボーンを削除してしまわないように気をつけてください。
ボーンがどのアニメーションで使われているかを確認するのに最も簡単なのはエクスポートしたJSONファイルを対象のボーン名で検索する方法だと思われます。
koyu2 ご意見をいただきありがとうございます!
ボーンを含めアタッチメントやスロットがどのアニメーションで使われているかを確認できる方法についてですが、実際どういった機能が良いか(追加の検索ボタンなのかビューなのか、各アイテムの横に表示されるのか、ツリービュー下部のプロパティに表示されるのか)などのご意見はありますか?
例えば各アイテムの横にボタンとして追加する場合、それほど使用頻度が高い機能ではないと思われるため、作業中のほとんどの時間では不必要なボタンが追加されることになってしまい、ビューとして追加する場合、選択中のアイテムの状態に応じてどのようにそのビューの内容を適切に切り替えるための実装がかなり複雑になってしまうため、簡単に追加することができません。
もし何か具体的な確認方法についてアイデアがありましたらご提案いただけますと幸いです。
そうですね。
必要な時に検索したいけど、普段使いする機能ではないので、ツリー欄やプロパティにUIを置くのは適切ではないと私も感じます。
個人的に検索と置換の画面が一番親和性が高そうに感じますね。
この機能の本質はアニメーション中のキーフレーム検索だと思います。
そのため検索と置換が「アイテムの文字列」を対象としてその範囲限定方法にツリー選択があるのに対して、
キーフレーム検索はあらかじめツリー選択したアイテムを対象にするのが適しているように感じます。
手前味噌ですが以上を踏まえて検索と置換画面の別タブ配置したUIを考えてみました。
左列:ツリーで選択したアイテム
中央:選択したアイテムが使われているスケルトン中のアニメ一覧
右列:選択した左列・中央のアニメのキーフレーム情報
左下のセットアップと同キーを含めないトグルは、セットアップから何も変更なくキーだけ置いたフレームを除外するオプションです
(1フレーム目にとりあえずキーを確定させる、というやり方で全てアニメを作っていた場合、検索が実質機能しなくなってしまう懸念があります)
あらかじめ選択して画面を開くのは直感的ではない、
左列はツリーそのままでいいんじゃないか、
などなど粗は多いと思いますがご参考までに。
koyu2 追加の説明および画像をご用意いただきありがとうございます!
この場合、最終的にそのウィンドウから得られる操作は何を想定していますか?添付していただいた画像だと下部に添えられているボタンは、選択
、置換
、キャンセル
ですが、最初にツリービューでアイテムを選択した状態でそのウィンドウを開いている想定ということなので、もしそのウィンドウで何かを選択するとしたらアニメーションを選択することになるのかなと思いますが、おっしゃっている目的からするとアニメーションを選択する必要は無いはずだと思います。
もしその検索ウィンドウではただそのアイテムが使用されているアニメーションの一覧を見れるだけで、そのウィンドウを閉じて削除などの操作をするということになるのであれば、複数アイテムを一度に確認できる意味があまりないように感じます。(どのアイテムがどういう結果だったかを記憶して削除操作をすることになるのでユーザーの負担になってしまいます)
また、もしこのウィンドウ上で削除操作をできるようにするとしても、逆にアニメーション以外の情報が欠落しているので、誤操作に繋がってしまわないかを懸念しています。
例えばボーンは子ボーンを持っている可能性があり、親ボーンの削除は子ボーンにも影響しますので階層を確認する必要があります。
スロットやアタッチメントは全くキーを持っていなかったとしてもスケルトンの見た目に関わっている可能性があるため、ドープシートが確認できるだけでは不十分な場合があります。
また、いただいたご意見をチーム内で共有したところ、Nateから「ボーンを削除した時に、いくつのキーが削除されたかを表示するトーストメッセージを追加することができる」という提案がありました。
※トーストメッセージとは特定の操作の後にビューポート下部に表示される以下のようなメッセージのことです:
(現在もアタッチメントキー/コンストレイントキーが削除されたというメッセージは表示されますが、削除したのキーの数は表示されていません。)
また、「SpineをCLIから --trace
パラメーターと共に起動した場合、どのアニメーションからキーが削除されたかのログを出力する」ことも可能だということでした。
どちらの案も削除する前ではなく削除した後でどれだけの影響があったかを把握する方法になりますが、もしこれらの変更があった場合、@koyu2 さんのワークフローを改善できますか?
ご共有ありがとうございます!
下部に添えられている選択、置換、キャンセル
すみません、こちらはスクリーンショットを取った置換と検索画面の名残で特に意味はありません。
ご指摘のように、ボーン削除など検索後の操作まで想定するとなると
アイテム選択が直感的ではなく、情報も不十分ですかと思います。
もし専用ビューを用意するとしたらですが、下記のようにTreeそのものを配置してアイテム選択するほうが良いかもしれませんね。
実装のご負担や、実際の使用感に考えが及んでいるか分かりませんので、あくまで一例としてご参考いただければ幸いです。
>ボーンを削除した時に、いくつのキーが削除されたかを表示するトーストメッセージを追加することができるという提案
こちらのアプローチもよいですね。
ただ、知りたい情報としては削除されたキー数より、どのアニメで削除されたかが大事かと思っています。
トーストメッセージの際のログ出力で、キーが削除されたアニメ一覧が確認できたら便利かと思います!
一つ懸念があるのですが、ボーン削除時トーストメッセージのログ書き出しは、
削除されたキーフレームのログ書き出しをするか、設定で選べるとありがたいです。
と言うのも自身のプロジェクトでは1スケルトン中に複数キャラを配置して、
必要なキャラを出力する際は、スケルトン複製 → 不要キャラを削除 → 出力という手順を踏んでいるのですが、
1キャラのボーンやコンストレイント量が多いため、現時点で削除するのに20秒ほど動作が固まります。ここに1キャラ分全ボーンにアニメ使用検索が追加された場合、かなり時間がかかってしまいそうです
用途としてはアイテムを使用したアニメorキーの検索なのでどのようなアプローチでも助かります。
ここまで読んでくださってありがとうございます!
koyu2 追加のご説明をいただきありがとうございます!
と言うのも自身のプロジェクトでは1スケルトン中に複数キャラを配置して、
必要なキャラを出力する際は、スケルトン複製 → 不要キャラを削除 → 出力という手順を踏んでいるのですが、
1キャラのボーンやコンストレイント量が多いため、現時点で削除するのに20秒ほど動作が固まります。
おそらく根本的に改善した方が良いワークフローはこちらの方だと思います。実際、さまざまなケースでスケルトンをエクスポート直前に分割するというワークフローを取らざるを得ないことがありますが、そもそもスケルトンのマージや複数スケルトン間のリンクがより簡単にできるようになれば最初からスケルトンが分かれていても作業がしやすくなるはずで、必要なキャラクターをエクスポートする度にボーンやコンストレイントを削除するという作業も不要になるはずです。
スケルトンのマージの改善については以前から当社のロードマップにあり、全般的な改善の案は以下のチケットにまとまっています:
EsotericSoftware/spine-editor582
また、スケルトン間のスキンの移動に関する改善の案もあります:
EsotericSoftware/spine-editor524
その他、以前チーム内で挙がった案で、現在はアニメーションのインポート時にインポート先のスケルトンに対応するボーンが存在しないとそのタイムラインは無視されてしまいますが、対応するボーンがなければそのボーンを追加するというオプションがあれば便利ではないかという案もありました。
これらの改善は、特定のアイテムがどのアニメーションで使用されているかを確認できる機能を追加するよりも多くのユーザーに恩恵があるはずだと思います。
もちろん依然としてキー検索が便利なケースはあるかと思いますが、これについては代わりにどのアニメーションで使用しているか分かりやすいように命名を工夫したり、または外部ツール(スプレッドシートなど)に記録をとって管理するなどの回避策を取ることも可能かと思います。
理想的には全ての改善を実装できた方が良いですが、残念ながらリソースの制約上それは不可能なため、出来るだけ多くのユーザーに恩恵がある機能を改善することで全体的なワークフローが改善できればと思います。
いずれにせよ改善のためのご意見をいただき誠にありがとうございます。フォーラムに投稿されたご意見は、GitHub上でチケット化していないものでも関連する改善を行う際に参考にしていますので、今後の開発の役に立ちます。
もし何か依然として懸念されていることやご不明な点がありましたらどうぞご遠慮なく投稿してください。