質問は基本的に1スレッドにつき1つの内容でお願いします。

お問い合わせの際は下記の情報を明記をお願いいたします。

▼ソフトウェアに関するご質問の場合

・【問題が発生したソフトウェア名とバージョン】(例:Cubism Editor 3.1.02、Euclid Editor 1.2.0 など)
・【ご利用のPC環境】例:Windows10、macOS HighSierra など
・【機種名】:MacBookPro 2017 など
・【グラフィックボード】例:GeForce GTX 950M など
・【メモリ】例:8GB
・【原画(イラスト)を制作したソフトウェア】例:Photoshop , CLIP STUDIO , SAI など
・【問い合わせ内容がわかるスクリーンショットまたは動画】例:パーツの表示状態など、お問い合わせ内容がわかる画像をご用意ください

---------------------------

▼SDKに関するご質問の場合

・現象の再現を行い検証させていただきますので、再現する最小のプロジェクトのご提供か、再現するまでの手順
・使用したSDKのバージョン

【unity 4.6.4】Android での live2dモデル破棄時のメモリーリークについて

edited 4月 2015 in Cubism SDK 2.1
お世話になっております。

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
 ⇛効果受けられず(組み込みのミスかもしれません)

 
以上になります。
どうか、よろしくお願い致します。(少し、急ぎになります!!

コメント

  • edited 4月 2015
    ここまで長々と書きましたが、自分のSDK、APIの使い方を疑っています。
    問題なくご利用、ご設計かと存じますが、「最新SDK,API」で問題なく使えてるよ、という方の
    一言をいただければと。

    実装は、Sampleのプロジェクトを、改変しています。
    特に、テクスチャの読み込み箇所を外部フォルダからの参照型に改造になります。

    ・生成読み込みは、
     LAppModelProxy などが含まれるPrefabをInstantiateしています。

    ・破棄は、
     上の GameObject を Destroy している形になります。

    ・ほかに
     RenderTexture を使用しています。
     live2Dモデルを管理するクラスは、インスタンス化しており、シーン毎に破棄しておりません。

    ■live2Dモデル
      テクスチャは4,5枚、モーション、表情、ポーズファイルあり。

    ■結果起こる症状
    ※15,6回、読み込み、表示、破棄を繰り返す。

    ・あるAndroid端末(1年以内の新しい端末)強制終了。
    ・別のAndroid端末(2年ぐらいの少し古い端末)では、テクスチャが真っ黒になる。(NGUIのテクスチャもおかしくなる)

    ■次は、サンプルそのままに、生成読み込み、破棄を繰り返すプロジェクトを作って試そうかと思っています。

    ■なにか、記載すべき情報がありましたらご指摘お願い致します。

  • edited 4月 2015
    何台かAndroid端末を持っているので、こちらでも検証してみようと思います。
    一応、Androidの機種など端末情報を教えてもらえますか?
  • naotaroさん
    ありがとうございます。

    テストに使用したのは
    SH-04F [ http://ja.wikipedia.org/wiki/SH-04F ]
    OS:4.4.2

    HTL21 [ http://ja.wikipedia.org/wiki/HTL21 ]
    OS:4.1.1

    となります。
  • edited 4月 2015
    検証情報追加になります。

    SDK 2.007 にて

    ALive2DModel::releaseModelTextureNo を追加組み込みすると
    メモリーのリーク量が大分減りました。

    サンプルには、なかったので行っていなかった処理のものになります。
    ただ、まだ、リークは続いて状況になります。

    1モデルで 約 4.5MB のリークのようです。

    ほかのモーション(mtn)と表情(exp.json)は、問題無いようです。

    LoadTexter の実行の有無で、リークのありなしがハッキリでます。

    追記
    使用テクスチャは4枚 PVRフォーマットになります。
  • edited 4月 2015
    検証の追加情報になります。

    前述した
     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すると、現状の状態になります。
    1.png 35.2K
    3.png 38.5K
    2.png 38.9K
  • Live2DModelUnity.releaseModel()でモデルのデータは解放できますが、
    開放しきれていないものがあったようで、モデルを作りなおしたらメモリが増えてしまっていました。

    先ほどこの問題を修正したSDKを公開いたしました。
    そちらにライブラリを差替え、開放時にreleaseModel()を呼び出してください。
  • edited 4月 2015
    ■■ ご対応ありがとうございます。  ■■

    y_a_s_(dev staff)様

    素早い対応ありがとうございました。
    新しいSDKにて、改善を確認いたしました。

    本当にありがとうございます。
    Ver 2.1 も楽しみにしております。

    ■■■■■■■■■■■■■■■■■■■■■■■■■■
      解決しました!!
    ■■■■■■■■■■■■■■■■■■■■■■■■■■
Sign In or Register to comment.