modular-avatar icon indicating copy to clipboard operation
modular-avatar copied to clipboard

[Reactive Component] Object Toggle の応答を遅延させないオプション

Open nekobako opened this issue 1 year ago • 4 comments

Object Toggle のドキュメントには、応答タイミングの遅延について

不幸な「事故」を避けるため

とありますが、遅延なしに応答して事故になる状況がよく分かっていません…。(見えてはいけないものが見えてしまうことへの対策なのは何となく分かるのですが)

よく分かっていないが故の考えかもしれませんが、遅延してほしくない場合のためにオプションで応答タイミングを切り替えられたらいいのかも?と思いました。

動画あります。 https://misskey.niri.la/notes/9wxqa6oaex

nekobako avatar Aug 15 '24 00:08 nekobako

事故の事例:上着を脱いだら、1フレームだけ丸裸に・・・あるいは、1フレーム棒人間になっているなど。 この対応は少し暫定的な面もあって、改善はしたいと思っていますので、ドキュメンテーションに「遅延の程は現在バージョン互換性保証外」と明記して行こうと考えています。

今後の対策としては、「すべてのリアクションの処理が終わるまで反応を止める」など考えています。

bdunderscore avatar Aug 15 '24 00:08 bdunderscore

遅延なく即時 & 同時に切り替えることができれば丸裸や棒人間が見えることはないのではと思ったのですが、それが困難ということになるのでしょうか…?

ドキュメントと今後の対策について承知しました!

nekobako avatar Aug 15 '24 00:08 nekobako

実装的にはちょっと難しくなるんですね。何度も連鎖できるうえに、ループ状に連鎖することもあったり外部のアニメーションと干渉することもあったり・・・

今の実装では、各ゲームオブジェクトの(遅延なしの)状態をアニメーター変数に管理し、フレーム毎に適用しています。そのうえで、前のフレームのゲームオブジェクトのON/OFF状態変数がONになった場合、強制的にONにしています。実装は比較的に簡単だけどちょっと微妙な結果になりますね。

改善するには、

  1. 連鎖した条件の階層をBlendtreeなどを使って、複数段階を一括で処理(遅延を減らす)
  2. 連鎖グラーフを分割し、分割ごとに入力バッファー、計算、適用段階に分けて、遅延を合わせる
  3. そのうえで、外部アニメーションが連鎖途中の状態に干渉される場合なんとかする(ここが一番難しいかも)

完璧な実装を作るまで1.10.0のリリースを遅らせるよりは、いったん出して後から遅延を改善したほうが良いかなと考えています。

bdunderscore avatar Aug 15 '24 01:08 bdunderscore

なるほどです…! 分かりやすい説明ありがとうございますmm

nekobako avatar Aug 15 '24 02:08 nekobako