【macOS 11.0 Big Surへの対応状況について】
現在公開中のCubism Editorは、以下のバージョンではmacOS 11.0 Big Surには対応しておりません。
・Cubism Editor 4.0.07 beta 以前のバージョン
上記バージョンでは正常に動作できない可能性がありますので、OSのアップグレードをお控えいただくか、【Cubism Editor 4.0.07 正式版】をご利用いただきますようお願いいたします。
関連するお問い合わせにつきましては、この文章をもって代えさせていただきます。
Cubism SDKにつきましては、現在公開中の製品全てにおいてmacOS 11.0 Big Surには対応しておりません。
現在対応検討中となりますが、対応バージョンや時期につきましては改めてお知らせいたします。

またApple Sillicon版のmacにつきましても、全てのCubism 製品において対応しておりませんのでこちらも合わせてご了承ください。
Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

AssetBundle化時のメモリリークについて

編集済: 8月 2020 Cubism 4 SDK
Live2DモデルのプレハブをAssetBundle化して使用する時の対応について質問させていただきます。

https://docs.live2d.com/cubism-sdk-tutorials/issue-of-assetbundle/?locale=ja
こちらのマニュアルでは、AssetBundleからモデルを使用するとメモリリークが発生すると書いてありますが、実際にUnityのProfilerを見ると特に発生していないようです。

具体的にはメモリリークの原因と指摘されているGlobalMaskTextureインスタンスの複数生成が発生していないように見えます。シーン内に複数のモデルを生成しても、共通でResources/Live2D/Cubism/GlobalMaskTextureを使用しているようです。UnityのProfilerでもMask用のRenderTextureが1個だけになっております。



ハイライトされているのがMask用のRenderTextureで、上の「live2d_chara_など」はモデルを表示させるために生成したRenderTextureです。

このマニュアルの最終更新日が2017/12/19になっていますが、今でも有効なのでしょうか?
あるいは、マニュアルへの理解にずれがありましたらご教授いただきたいです。

使用しているUnityバージョンは2019.4.1f1で、Live2D SDKはCubism 4 SDK for Unity R1です。
タグ付けされた:

コメント

  • @totoroll さん

    Cubism SDK for Unityのデフォルトの状態では、Prefabの初期化時に動的に参照をセットするようにしているため、メモリリークは発生しません。
    しかし特定の条件では、あらかじめGlobalMaskTextureの参照をセットしたPrefabを使用することがあり、その場合メモリリークが発生するため、ご提示いただいたページの対応が必要になります。
    この状態でAssetBundleからPrefabをロードすると、CubismMaskController.MaskTextureにセットされているGlobalMaskTextureが別のインスタンスとして生成されるため、新たなモデルをロードするたびにRenderTextureの総数が増加します。

    GlobalMaskTextureをセットしたPrefabを使用する例として、マスクで切り取られる輪郭部分の品質を重視する場合が挙げられます。
    GlobalMaskTexture(CubismMaskTextureのインスタンス)は、一枚のRenderTextureにすべてのマスクを描画します。
    その際、それぞれのマスクが重ならないように領域をマス目上に分割し、マスクをリサイズして割り当てますが、分割数はマスクの数によって決められるため、マスクの数が多い場合はマスク一つに対する領域が小さくなるため、輪郭部分の品質が落ちます。
    また、この分割数には上限があり、表示するモデルの数などで上限を超えた場合、クリッピングが正常に表示されないことがあります。
    これは、モデルごとにCubismMaskTextureのインスタンスを用意し、Prefabにセットしておくことで回避が可能です。
  • 編集済: 8月 2020
    @y_a_s_(Dev Staff)

    お返事ありがとうございます。

    Cubism SDK for Unityのデフォルトの状態では、Prefabの初期化時に動的に参照をセットするようにしているため、メモリリークは発生しません。

    これはCubismMaskTexture.GlobalMaskTextureでResources.Loadを使ってCubismMaskController.MaskTextureをセットしているから、AssetBundleからロードされてもGlobalMaskTextureのインスタンスが生成されず、メモリリークが発生しないことでしょうか?

    しかし特定の条件では、あらかじめGlobalMaskTextureの参照をセットしたPrefabを使用することがあり、その場合メモリリークが発生するため、ご提示いただいたページの対応が必要になります。

    これは手動でプレハブ上のCubismMaskControllerコンポーネントのMask Textureの内容を置き換えたら、AssetBundleからロードするとメモリリークが発生することでしょうか?

    もしデフォルトでメモリリークが発生しないようであれば、公式マニュアル上にその旨を記載していただきたいですね。
    マニュアル上では
    Live2Dモデルでクリッピングが設定されたモデルをAssetBundle化した後、そこからモデルをロード・アンロードを行うとメモリリークが発生します。

    と書いてあるため、AssetBundleを使うなら必ず対応する必要があるという理解になっていました。
  • @totoroll さん

    これはCubismMaskTexture.GlobalMaskTextureでResources.Loadを使ってCubismMaskController.MaskTextureをセットしているから、AssetBundleからロードされてもGlobalMaskTextureのインスタンスが生成されず、メモリリークが発生しないことでしょうか?

    はい、AssetBundleからPrefabをロードしてSceneに配置した後にマスク用のテクスチャをセットしているためです。


    これは手動でプレハブ上のCubismMaskControllerコンポーネントのMask Textureの内容を置き換えたら、AssetBundleからロードするとメモリリークが発生することでしょうか?

    もしデフォルトでメモリリークが発生しないようであれば、公式マニュアル上にその旨を記載していただきたいですね。

    ご迷惑をおかけしてしまい誠に申し訳ございません。
    近日中にドキュメントの記述を修正させていただきます。
    totoroll
コメントするにはサインインまたは登録して下さい。