★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
【unity 4.6.4】Android での live2dモデル破棄時のメモリーリークについて
お世話になっております。
live2dを使用して、スマホアプリを作成しているものです。
開発環境は、Unity3d になります。
最近その、unityのVer を 4.5.5 から 4.6.4 へアップしたところ
live2dモデルを破棄した際、テクスチャ関連でメモリの解放漏れを確認しました。
Unity Editor のプロファイラーでも確認しています。
自分の読み込み、破棄の仕方が、おかしいのかもしれませんが。
同じような環境、症状などの方がいらしたら、なにかご情報をいただけたらと思います。
詳しい状況などは、随時追加していきます。
------------------------------
■■ 追記 ■■
------------------------------
▼問題が発生している live2d_SDK
Live2D_SDK_Unity_2.0.07_1_jp
▼問題がなかったころは
unity 4.5.5
live2d_SDK 2.0.01_1
あたりを使用していました。
▼iPhoneでは、発生していません。
------------------------------
■■ 試したこと ■■
------------------------------
・Live2Dモデルの読み込みのなくして、ゲーム進行して、メモリーリークが発生するか?
⇛しない
・Live2Dモデルのテクスチャのみ読み込みをカットして発生するか?
⇛しない
・「Live2Dモデルの読み込み、破棄だけ」のサンプルを作成して、リークが発生するか
⇛した
・破棄関数の確認
Live2D::dispose(); を組み込んでみる
http://sites.cybernoids.jp/cubism2/sdk_tutorial/live2d_library/live2d
⇛効果が見受けられず(組み込みのミスかもしれません)
ALive2DModel::deleteTextures() を使用してみる。
http://doc.live2d.com/api/core/cpp2.0j/a00025.html#acf6a34aae2752526e8e88bf2442cb339
⇛効果受けられず(組み込みのミスかもしれません)
以上になります。
どうか、よろしくお願い致します。(少し、急ぎになります!!
live2dを使用して、スマホアプリを作成しているものです。
開発環境は、Unity3d になります。
最近その、unityのVer を 4.5.5 から 4.6.4 へアップしたところ
live2dモデルを破棄した際、テクスチャ関連でメモリの解放漏れを確認しました。
Unity Editor のプロファイラーでも確認しています。
自分の読み込み、破棄の仕方が、おかしいのかもしれませんが。
同じような環境、症状などの方がいらしたら、なにかご情報をいただけたらと思います。
詳しい状況などは、随時追加していきます。
------------------------------
■■ 追記 ■■
------------------------------
▼問題が発生している live2d_SDK
Live2D_SDK_Unity_2.0.07_1_jp
▼問題がなかったころは
unity 4.5.5
live2d_SDK 2.0.01_1
あたりを使用していました。
▼iPhoneでは、発生していません。
------------------------------
■■ 試したこと ■■
------------------------------
・Live2Dモデルの読み込みのなくして、ゲーム進行して、メモリーリークが発生するか?
⇛しない
・Live2Dモデルのテクスチャのみ読み込みをカットして発生するか?
⇛しない
・「Live2Dモデルの読み込み、破棄だけ」のサンプルを作成して、リークが発生するか
⇛した
・破棄関数の確認
Live2D::dispose(); を組み込んでみる
http://sites.cybernoids.jp/cubism2/sdk_tutorial/live2d_library/live2d
⇛効果が見受けられず(組み込みのミスかもしれません)
ALive2DModel::deleteTextures() を使用してみる。
http://doc.live2d.com/api/core/cpp2.0j/a00025.html#acf6a34aae2752526e8e88bf2442cb339
⇛効果受けられず(組み込みのミスかもしれません)
以上になります。
どうか、よろしくお願い致します。(少し、急ぎになります!!
0
コメント
問題なくご利用、ご設計かと存じますが、「最新SDK,API」で問題なく使えてるよ、という方の
一言をいただければと。
実装は、Sampleのプロジェクトを、改変しています。
特に、テクスチャの読み込み箇所を外部フォルダからの参照型に改造になります。
・生成読み込みは、
LAppModelProxy などが含まれるPrefabをInstantiateしています。
・破棄は、
上の GameObject を Destroy している形になります。
・ほかに
RenderTexture を使用しています。
live2Dモデルを管理するクラスは、インスタンス化しており、シーン毎に破棄しておりません。
■live2Dモデル
テクスチャは4,5枚、モーション、表情、ポーズファイルあり。
■結果起こる症状
※15,6回、読み込み、表示、破棄を繰り返す。
・あるAndroid端末(1年以内の新しい端末)強制終了。
・別のAndroid端末(2年ぐらいの少し古い端末)では、テクスチャが真っ黒になる。(NGUIのテクスチャもおかしくなる)
■次は、サンプルそのままに、生成読み込み、破棄を繰り返すプロジェクトを作って試そうかと思っています。
■なにか、記載すべき情報がありましたらご指摘お願い致します。
一応、Androidの機種など端末情報を教えてもらえますか?
ありがとうございます。
テストに使用したのは
SH-04F [ http://ja.wikipedia.org/wiki/SH-04F ]
OS:4.4.2
HTL21 [ http://ja.wikipedia.org/wiki/HTL21 ]
OS:4.1.1
となります。
SDK 2.007 にて
ALive2DModel::releaseModelTextureNo を追加組み込みすると
メモリーのリーク量が大分減りました。
サンプルには、なかったので行っていなかった処理のものになります。
ただ、まだ、リークは続いて状況になります。
1モデルで 約 4.5MB のリークのようです。
ほかのモーション(mtn)と表情(exp.json)は、問題無いようです。
LoadTexter の実行の有無で、リークのありなしがハッキリでます。
追記
使用テクスチャは4枚 PVRフォーマットになります。
前述した
ALive2DModel::releaseModelTextureNo
と
LAppModel::Draw で使用してる設定している Matrix をクリアする処理を追加する
削除する際に
GetLive2DModelUnity().setMatrix(Matrix4x4.zero);
を行う。
以上の対応で
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
リークが改善
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
したようです。
引き続き、確認と調査しています。
よろしくお願い致します。
一つ前のコメントは、確認ミスだったようです。
リークが完全に改善できておりませんでした。
対応として最終的に
Resources.UnloadUnusedAssets ();
を使いました。
PlatformManager::loadTexture を改良している中で
外部リソースのテクスチャを読み込んで
((Live2DModelUnity)model).setTexture(no, texture);
で引き渡したあと、そのTexture2D のデータが解放されずに残っている状態になりました。
Resources.UnloadUnusedAssets ();
で大分、リークは改善できたのですが、まだリーク(mesh?)があるようです。
おまけですが、
Live2Dのサンプルにて、「破棄のシーケンス」のサンプルを追加
改善してもらえると嬉しいです。
unity プロファイラにて、Meshesのメモリ経過を見ると、読み込み、破棄を繰り返すと
添付画像のように増えていきます。
1.png -> 2.png -> 3.png
Drowすると、現状の状態になります。
開放しきれていないものがあったようで、モデルを作りなおしたらメモリが増えてしまっていました。
先ほどこの問題を修正したSDKを公開いたしました。
そちらにライブラリを差替え、開放時にreleaseModel()を呼び出してください。
y_a_s_(dev staff)様
素早い対応ありがとうございました。
新しいSDKにて、改善を確認いたしました。
本当にありがとうございます。
Ver 2.1 も楽しみにしております。
■■■■■■■■■■■■■■■■■■■■■■■■■■
解決しました!!
■■■■■■■■■■■■■■■■■■■■■■■■■■