vrm-c / UniVRM

UniVRM is a gltf-based VRM format implementation for Unity. English is here https://vrm.dev/en/ . 日本語 はこちら https://vrm.dev/

Home Page:https://vrm.dev/en

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

VRM10ObjectFirstPersonにより生成された一人称用Meshが破棄されずメモリーリークしている

tsgcpp opened this issue · comments

環境情報

  • UniVRM version: v0.116.0
  • Unity version: Unity-2021.3.27f1
  • OS: Windows 10

バグについて

  • バグの内容
    • VRM10ObjectFirstPersonにより生成された一人称用Meshが破棄されずメモリーリークしている
    • BoneMeshEraser.CreateErasedMeshAsync で生成された一人称用のMeshインスタンス (_headless_のprefixがあるもの) が破棄されていないと思われます
  • ConsoleLog
    • 特になし
  • スクリーンショット
    • スクリーンショット 2024-01-06 003806
    • Memory Profilerで 100回 VRMをinstance.Vrm.FirstPerson.SetupAsync有りでロード → 破棄を繰り返した後のスナップショットのスクリーンショットになります
  • 再現方法
    • https://github.com/tsgcpp/UniVRM/releases/tag/report_20240106 をcheckout
    • Assets/Report/Scenes/Report_MemoryLeak_VRM10ObjectFirstPerson.unity を開いてPlayモードに移行
    • アバターが複数回ロードと破棄されるまで待機 (100回ロード後にVrm10LoadMemoryLeakCheck.LoadLoopAsync finishedとコンソールに出すようにしています)
    • その後Memory Profilerを確認すると一人称用のMesh群が破棄されていないことを確認できます
  • エラーの発生するファイル(ここに貼り付けても差し支えの無いもの)
    • 特になし

TODO: RuntimeGltfInstance の管理リストに追加する

vrm-0.x の方は、
VRM.VRMFirstPerson.OnDestroy で素直に Destroy していた。

v0.120 で修正されます。