oov / aviutl_psdtoolkit

PSDToolKit
https://www.nicovideo.jp/series/436
MIT License
114 stars 11 forks source link

PSD ファイルオブジェクトで AviUtl のエイリアス機能を使えるようにして欲しい #38

Closed oov closed 6 years ago

oov commented 6 years ago

エイリアスとして保存しておいた PSD ファイルオブジェクトを使えるようにしてほしい。

現状でもエイリアスに保存されたファイルを配置すること自体は可能だが、v0.2 系から PSD ファイルを正確に扱うようになり、タイムラインに配置された野良 PSD ファイルだと PSDToolKit ウィンドウに追加されない仕様に変わっているため、エイリアスで配置するとそこからの表情変更が難しい。

oov commented 6 years ago

以前のように PSD ファイルオブジェクトを縦にドラッグするだけでコンボボックス上に大量のアイテムが作成されてしまう状況に戻すことはユーザビリティの観点から望ましくないので、現状のファイル管理方法を継承したままエイリアスで追加されたファイルを適切に扱える状況を実現するのが目指すべきゴールと思われる。

また、この要望はプロジェクトをまたいでエイリアスファイルを流用することを前提としている。

oov commented 6 years ago

タイムラインに PSD ファイルをドロップする時にランダムな ID を振るようにして、その ID に該当するオブジェクトが存在しないときは GUI 側に追加する仕組みを導入すればスムースにいけるかもしれない。 ID が振られていない過去のプロジェクトファイルなどを読み込んだ時は以前と同じ挙動で、ID が振られている場合は新しい挙動が適用されるようにすれば、v0.2 系でも問題なく導入できそうに思える。

oov commented 6 years ago

プロトタイプ実装をしてみた限りでは、プロジェクトファイルからの PSD ファイルリスト読み込みと拡張編集でのレンダリングが同時に走ってしまうために動作順が安定しておらず、この順序を的確に制御できるようにしないとちょっと厳しい。 ここが曖昧のままだとプロジェクト読み込み直後にファイルの登録順が変わってしまったりするため、この問題を確実に解決するための方法について研究が必要。

あとキュー管理部分の処理を適当に済ませている箇所が問題になってきそうなので、ここも作り直さないと処理が重なったときにクラッシュしたりする可能性があってよろしくない。

全体の作業量がかなり多い。

oov commented 6 years ago

プロジェクトファイルからの読み込みと拡張編集でレンダリングされるタイミングのコントロールは実質的にはだいぶ難しいことがわかったので、これに関しては仕様として諦めることにする。

AviUtl でプロジェクトファイルを読み込むと、拡張編集側で必要なデータがロードされた後に数回レンダリング処理が実行されて、その後で func_project_load がコールバックされる。 この順序を正確に行うためにはおそらく exedit.auf が持つ func_project_load/func_project_save をフックして、保存後に独自のデータを後ろに追記、読み込み前に独自データをトリムのような処理を行うぐらいしかなさそうに見えるが、これをやると「PSDToolKit を使って保存したプロジェクトをプラグイン無しで読み込む」というシナリオにおいて問答無用でプロジェクトファイルが破損扱いになるはずなのであまりにもリスクが高すぎる。 WM_FILTER_FILE_OPEN だったら適切なタイミングに来るものの、これだとプロジェクトファイルからは読めないので現行仕様が引き継げない。

oov commented 6 years ago

v0.2beta24 としてリリース。

タグが適切に設定された PSD ファイルオブジェクトは、エイリアスや *.exo 経由で追加されたものでも、描画されるタイミングで PSDToolKit ウィンドウに該当のオブジェクトがなければ自動的に追加される。