SpriteStudio / SS5PlayerForUnity

OPTPiX SpriteStudio 5 Player for Unity
http://www.webtech.co.jp/spritestudio/
MIT License
39 stars 15 forks source link

アニメーションデータ削減処理 #198

Closed omachi closed 7 years ago

omachi commented 7 years ago

 Flyweightパターンを用いてアニメーションデータの削減を行います。

 以下のクラスを対象としています。

 Vector3は要素数が多くなり、ListStatusの上限を超えるおそれがあると判断して除外しました。

MasamiYitsuse commented 7 years ago

omachi様

お世話になっております。 Pull-Requestありがとうございます。 いただいた内容を確認の後、手動にて反映させていただきます。

MasamiYitsuse commented 7 years ago

omachi様 お世話になっております。 ありがとうございます。 いただいたpull-requestについて、(別件と併せ)1.4.10としてマージさせて頂きました。 改修いただいた記述が多いため、手動でマージするのが(私側でのミスが出ると)危険だと判断しましたので、そのままマージした上で、メンテナンス等続けさせていただきたく思います。

また、(まだ入れてはおりませんが) SpriteStudio/ScriptLibrary/Flyweight.cs を追加していただいたのですが、本ソースについて、他のソースのヘッダと同様に弊社のシグネチャを入れさせていただきたくお願い申し上げます。 これは、本プレーヤーの公開においての、責任の所在を明示という意図でございます旨、何卒ご理解の程お願い申し上げます。 もしその点問題等御座いましたら、ご一報頂けますと非常に助かります(その場合においては、私とは別の弊社担当と折衷点ないしは本プルリクエストの扱いなどについてご協議いただくことになると思われます)。

重ねてありがとうございます。

MasamiYitsuse commented 7 years ago

omachi様

お世話になっております。 大変申し訳ございません。 mergeしてから、いただいた本改良で、1.4.8まででインポートしたデータで再生できないものがあることに気がつきました。 そのため、一度1.4.9(別件のGC軽減のMerge)にロールバックさせていただき(ご改良いただいた点は手元で保持してあります)、その上で出来る限り速やかに、過去データ互換性の扱いを弊社内で協議した上で、反映させていただきたくお願い申し上げます。

対応が揺らいでしまい、大変申し訳ございませんが、何卒ご理解とご容赦の程お願い申し上げます。

omachi commented 7 years ago

 お疲れ様です。  シグネチャにつきましては入れていただいて問題ありません。  またロールバックにつきましても了解しました。データ互換性につきましての説明不足につきましてこちらこそ申し訳ありません。反映するかどうかについて是非はあるとおもいますので、判断の程よろしくお願いいたします。

MasamiYitsuse commented 7 years ago

omachi様

お世話になっております。

まず、シグネチャについてご快諾いただき、心から御礼申し上げます。

また、データの互換性については、omachi様の失点は一切ございませんので、ご安心ください。 むしろ、心から御礼申し上げます。

その上で、弊社内で協議いたしました。 頂いたFlyweightパターンでの圧縮率向上措置を反映して、SS5.8への対応で若干の変更を行ったバージョンを SS5PU ver 1.5.0 としてリリースさせていただきたく思います。 過去、ミドルナンバーが上がった場合には大半がデータフォーマットが変更されており、過去バージョンでインポートしたデータとの互換性がないため、1.4系から1.5系となることで、データのフォーマットが変わっても従来のユーザーの皆様の混乱などは少ないと判断いたしました。 また、その旨のアナウンスは、弊社側で本GitHubのwiki等にて行うことを考えております。

一方、Ver.1.4系につきましては、いただいたGCAlloc改善の処置を反映したVer.1.4.11をstableのバージョンとして、しばらくの間1.5系と並行してメンテナンスを行う予定です。

1.5の反映までには、(他の部分の改定があるため)若干のお時間をいただきたく思います。 頂いた改良を即時反映できず、大変申し訳ございませんが、もう少々お待ちいただけますよう、お願い申し上げます。

重ねて御礼申し上げますとともに、今後とも何卒よろしくお願い申し上げます。

MasamiYitsuse commented 7 years ago

omachi 様

お世話になっております。現在の状況を報告させて頂きます。

現在、いただいたFlyweightパターンでの格納と、(そちらとは別に)若干の高速化(プライオリティを事前計算してソート処理を減らす処理等を導入した、Ver.1.5.0の作成とチェックを行っております。

その仮定で、いただいたFlyweightパターンで、適用していない(非圧縮の)場合との症状の違いを見つけましたので、念のためレポートさせて頂きます。 ※本件は、こちらで解消して、1.5.0への反映及びomachi様に原因や対処方法など、別途報告させて頂きますので、omachi様のお手を煩わすことはございませんので、ご安心下さい。

・「Calcurate In Advance」オプションで圧縮される、Fliweight.ListAttributeUVMeshFixのアトリビュートで、途中でのセル変更やUV移動などの動作が異なる(途中でのセル変更やUV移動などが反映されない)ことがあるようです。

------------- また、それと別に(これは障害などの動作ではありません) いただいたFlyweightパターンを反映する上で、現在までの標準のデータなどを再整理した関係から、いただいた実装と1.5.0の実装のクラス名などを変更させて頂きました(旧来のものもあわせ、アトリビュートリストデータなどのクラス定義階層などのリファクタを行っております)。 大変申し訳ございません。 ※こちらも、リファクタは当方の都合ですので、omachi様に何らお手間をおかけしない旨、ご安心下さい。

例: Library_SpriteStudio_Flyweightクラス    → Library_SpriteStudio.Data.Pack.Flyweight Library_SpriteStudio_Flyweight.Flyweight    → Library_SpriteStudio.Data.Pack.Flyweight.Factory Library_SpriteStudio_Flyweight.FlyweightList<>    → Library_SpriteStudio.Data.Pack.Flyweight.ListAttribute_Base<> Library_SpriteStudio_Flyweight.ListAttribute~    → Library_SpriteStudio.Data.Pack.Flyweight.ListAttribute~

また、大元SS5PUに実装されていた、標準形式のListAttribute~クラスなども、下記のクラス実装に変更されました。 Library_SpriteStudio.Data.ListAttribute_Base<>    → Library_SpriteStudio.Data.Pack.Standard.ListAttribute_Base<> Library_SpriteStudio.Data.ListAttribute~    → Library_SpriteStudio.Data.Pack.Standard.ListAttribute~

※各Attributeの格納クラスのLibrary_SpriteStudio.Data.Attribute~については、格納ソースは変更しましたが、クラス位置などの変更はありません。Data.ListAttribute~クラスを「Data.Pack.(格納形式名).ListAttribute~」にクラス区分移動した……という感じです。 ※(Ver.1.5.0では行いませんが)1.5.0以降のどこかでの実装検討中項目のひとつである、ListAttribute~クラスの最基底を抽象orインタフェースクラスにして・多様な圧縮格納形式を実装できるようにするための準備段階での、各圧縮形式の実装平等化……と受け止めて頂けますと助かります。 ※同時に各圧縮形式のListAttribute~クラスに、「KindPack」プロパティを用意して、圧縮形式の連番定数を取得できるようにしてあります。

色々とお手間とpull-requestまでいただいた上で、Ver.1.5.0へのバージョンアップに時間を要してしまっており、大変申し訳ございませんが、何卒ご理解とご容赦の程お願い申し上げます。

MasamiYitsuse commented 7 years ago

omachi様

お世話になっております。 上記のUV0Meshの値が正常な更新がされない場合がある件について、具体的な修正箇所がわかりましたので、報告させていただきます。


Library_SpriteStudio.csの3382行目(UpdateMesh関数内、ラベルUpdateMesh_Fix以下)

DataAnimationParts.DataFix.UV0Mesh.TryGetValue(out UVMeshFix, IndexAttribute, InstanceRoot.DataAnimation.Flyweight);

DataAnimationParts.DataFix.UV0Mesh.TryGetValue(out UVMeshFix, FrameNo, InstanceRoot.DataAnimation.Flyweight);


にご修正頂けますと、上記症状が解消されるかと思われます。 omachi様のお手元にての現状最新版(Ver.1.4.8にFlyweightを実装していただいたもの)の運用上必要があると思われる場合に処置していただけますと、非常に光栄です(Ver.1.5.0の当該箇所修正についてはもちろんGitHubで現状公開最新版の1.4.11はFlyweightは未実装のものですので、そのあたりでomachi様のお手間を頂くには及びませんので、一切お気になされることなきようお願い申し上げます)。

原因としては、圧縮データ自体は完全に正常ですが、再生時にTryGetValue関数の第2引数にFrameNoではなくCoordinateMeshの同フレームでの格納インデックスを与えているため、取り出すデータが目的と異なるデータを取得してしまう……となります。

お忙しい中お手数とは存じますが、何卒ご検討いただけますと幸いです。 また、omachi様が既知でしたら、大変失礼と存じますが、何卒ご容赦の程、お願い申し上げます。

omachi commented 7 years ago

 お疲れ様です。プルリクエストに含まれる不具合につきまして把握いたしました。お手間をとらせてしまい申し訳ありません。  引き続きよろしくお願いいたします。

MasamiYitsuse commented 7 years ago

omachi様

お世話になっております。

お待たせしてしまい申し訳ございません。 いただいたpull-requestについて、反映させて頂いたものを、GitHubのdevelopにVer.1.5.0として反映いたしましたこと、報告させて頂きます。

また、今回のバージョンアップで、(上記の通り)以前から弊社内で懸案していた優先度のソートをインポート時に解決する旨の変更なども入っておりますため、Ver.1.4.11までとはUnityにインポートした後のデータの互換性が失われております旨、お知らせさせて頂きます。

色々とお手間とご尽力をいただき、心から感謝しております。 今後とも何卒宜しくお願い致します。