Unity版CubismSDKで実行時にエラーログが出る

報告の際には、必ず以下の項目をご入力ください
【Cubism SDKのバージョン】 4-r.5 - 2022-09-08
【スマートフォンの場合などは端末名】PC
【OS名・バージョン】Windows11
【開発使用ツール】Unity 2021.3.8f1
【不具合の状況】
・SDK4.2で書き出したモデルをUnityにインポートして表示すると発生しました
・自前のモデルを使用
・プロジェクトの最小構成は未確認

[Cubism] Core: [CSM] [W]RotationDeformer: Not found transformed Direction.
.
UnityEngine.Debug:LogFormat (string,object)
Live2D.Cubism.Core.CubismLogging:LogUnmanaged (char*) (at Assets/Live2D/Cubism/Core/CubismLogging.cs:70)
Live2D.Cubism.Core.Unmanaged.CubismUnmanagedModel:Update () (at Assets/Live2D/Cubism/Core/Unmanaged/CubismUnmanagedModel.cs:83)
Live2D.Cubism.Core.CubismTaskableModel:Execute () (at Assets/Live2D/Cubism/Core/CubismTaskableModel.cs:314)
Live2D.Cubism.Core.CubismTaskableModel:Live2D.Cubism.Core.ICubismTask.Execute () (at Assets/Live2D/Cubism/Core/CubismTaskableModel.cs:352)
Live2D.Cubism.Core.CubismTaskQueue:Enqueue (Live2D.Cubism.Core.ICubismTask) (at Assets/Live2D/Cubism/Core/CubismTaskQueue.cs:44)
Live2D.Cubism.Core.CubismTaskableModel:Update () (at Assets/Live2D/Cubism/Core/CubismTaskableModel.cs:246)
Live2D.Cubism.Core.CubismModel:OnModelUpdate () (at Assets/Live2D/Cubism/Core/CubismModel.cs:535)
Live2D.Cubism.Core.CubismModel:OnModelsUpdate () (at Assets/Live2D/Cubism/Core/CubismModel.cs:351)

何が原因でこのエラーが起きるかがわからないので、回避方法が検討できず困っています。

このエラーが出た後にプログラムを変更するなどしてUnityEditor上でコンパイルが実行されると以下のログを出してUnityEditorがクラッシュしました(5回中5回再現)

=================================================================
	Native Crash Reporting
=================================================================
Got a UNKNOWN while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

=================================================================
	Managed Stacktrace:
=================================================================
	  at <unknown> <0xffffffff>
	  at Live2D.Cubism.Core.Unmanaged.CubismCoreDll:InitializeModelInPlace <0x000ef>
	  at Live2D.Cubism.Core.Unmanaged.CubismUnmanagedModel:.ctor <0x00252>
	  at Live2D.Cubism.Core.Unmanaged.CubismUnmanagedModel:FromMoc <0x0012a>
	  at Live2D.Cubism.Core.CubismTaskableModel:.ctor <0x00152>
	  at Live2D.Cubism.Core.CubismModel:Revive <0x001f2>
	  at Live2D.Cubism.Core.CubismModel:OnEnable <0x000c2>
	  at Live2D.Cubism.Core.CubismModel:OnValidate <0x00082>
	  at System.Object:runtime_invoke_void__this__ <0x00187>
=================================================================
Received signal SIGSEGV
Obtained 2 stack frames
RtlLookupFunctionEntry returned NULL function. Aborting stack walk.
<Missing stacktrace information>

@やぶ

弊社製品をご利用いただきまして誠にありがとうございます。
Cubism SDK 開発チームです。

お使いいただいているCubism SDK for Unityですが、GitHubで公開しているCubismUnityComponentsから取得したものでしょうか?
もしそうであれば、公式サイトで公開しているCubism SDK for Unityのパッケージ(.unitypackage)を使用してエラーが発生するかをご確認いただけませんでしょうか?

GitHubに公開しているものには、ライブラリが付属しておりません。
そのため、モデルがプロジェクトにインポートされたときの変換処理が正常に動作しません。

以上、ご確認よろしくお願いいたします。


Cubism SDK for UnityはLive2Dの公式サイトからダウンロードできるunitypackageを使用しました。
バグの原因を特定しました。
モデルの特定のワープデフォーマを倍率を指定して拡大縮小の機能を利用して、倍率0%にしてある状態だと再現しました。
倍率0にしているワープデフォーマの中には回転デフォーマやアートメッシュを入れていました。
このワープデフォーマが物理設定によって動く際に、中身の回転デフォーマの向きを計算をしようとしますが、親のワープデフォーマのスケールが0のため全部の頂点の座標がおなじになってしまい、向きが取れなくなっていると思われます。

こちらの不具合についてアップデートで対応は頂けますでしょうか?

@やぶ
いつも弊社製品をご愛顧のほど誠にありがとうございます。
Live2D スタッフのTakでございます。
onoに代わりましてご連絡差し上げます。

製品のご利用にご不便をおかけし大変申し訳ございません。
また原因の特定にご協力頂いたにも関わらず、返信が遅くなり重ねてお詫び申し上げます。

現象及び再現動画を確認し、修正するべく弊社にて同様のモデルを作成し再現を試みましたが、再現に至りませんでした。
大変お手数ではございますが、詳細な調査のため本現象が発生するモデルをお送りいただけないでしょうか。
アップロードには以下をお使いください。

また本現象について詳細な状況お伺いしたいのですが、

  1. 本現象はCubism SDK for Unityをインポートしたのみの状態でも発生しますでしょうか。

  2. はじめにご報告いただいた

[Cubism] Core: [CSM] [W]RotationDeformer: Not found transformed Direction.

とその後にご報告いただいた SIGSEGV が発生するものは、どちらも環境としては同一で、モデルのインポート後とUnityEditor上でビルドした際とで変化がある、ということでお間違いないでしょうか。

  1. 原因を特定頂いた際に

モデルの特定のワープデフォーマを倍率を指定して拡大縮小の機能を利用して、倍率0%にしてある状態

とございますが、「ワープデフォーマーの倍率を指定して拡大縮小の機能を利用して」と言うのはどのような操作でしょうか。動画内にあるように、手動でバウンディングボックスを使用して極力まで小さくした操作のことを指しますでしょうか。

以上、お手数ではございますがご確認のほどよろしくお願いいたします。

再現するファイルをデータ便にアップしました。

  1. 本現象はCubism SDK for Unityをインポートしたのみの状態でも発生しますでしょうか。
    最新の[2023/01/26] Cubism 4 SDK for Unity R6をインポートしたのみの状態で再現します。
    バグを再現する最小構成のunityプロジェクトをデータ便にアップしました(bugreport.zip)。
    確認お願いします。
  1. はじめにご報告いただいた…

どちらも同一環境で、モデルのインポート後に、UnityEditor上で実行、停止、UnityEditorのコンパイル後再度実行を行うとクラッシュするという問題です。
おそらくDllの中でエラーが出た際、Dll側に不整合が生じ、UnityEditorの停止時に正しくDLL側の内部状態をリセットできていないと思われます。

  1. 原因を特定頂いた際に…
    image
    ワープデフォーマに対して、「モデリング>フォームの編集>倍率を指定して拡大縮小」のメニューから開いたダイアログに0%を入力する操作です。
「いいね!」 1

再現プロジェクトのシーンを保存してなかったので、再現手順を追記します。

  1. SampleSceneを開く
  2. Main Camera直下にAssets/bug/bugreport.prefabを配置
  3. 実行
    これでデバッグログに[Cubism] Core: [CSM] [W]RotationDeformer: Not found transformed Direction.
    が出続けるようになります
  4. 停止
  5. 実行
    これで確定でクラッシュします。
「いいね!」 1

@やぶ

お世話になっております。
Live2D スタッフのTakでございます。

再現プロジェクト及び質問のご回答、再現手順の提示誠にありがとうございました。
弊社でも再現でき、問題の調査をおこないました。

結論としては、ご指摘の通り頂いたモデルの中に拡大率が0%のワープデフォーマが存在することで子の回転デフォーマの計算に影響が出ていることが原因となります。
本現象は拡縮状態と表示状態のパラメータを分け、表示状態を操作する回転デフォーマを作成することにより現象の回避が可能です。回避手順は後述いたします。

Cubism SDKの仕様として、通常回転デフォーマを使用して非表示状態(不透明度を0%にする)にしますが、この方法で表示状態を操作することで非表示時にCubism SDKでは命令が発行されず不要な描画を発生させない仕様となっております。
今回のケースではワープデフォーマの拡大率を0%にすることで非表示状態を表現しておりますが、この方法ですとCubism SDK内では描画命令が発行されてしまい、パフォーマンスに影響が出ます。
これに加えまして毎フレームワーニングメッセージが出力されてしまいます。

以上のことから、大変心苦しいのですがCubism SDKでの表示時にパフォーマンスに影響が出てしまうモデルとなっております。

こちらにつきまして該当部分の作りを変えることでUnityのクラッシュを含めた現象の回避とパフォーマンスの向上が可能です。

  1. 該当ワープデフォーマを選択し、紐づいたパラメータ値を【1.0】にする。アートメッシュが表示状態になると思います。
  2. モデリング>フォームの編集>フォームのコピー でフォームをコピーする
  3. 該当ワープデフォーマのパラメータを【0.0】にする。アートメッシュが非表示状態になると思います。
  4. モデリング>フォームの編集>フォームの貼り付け でフォームを貼り付けする
    この時点でパラメータを操作した際に拡大率が保たれたまま(アートメッシュが表示されたまま)になると思います。
  5. 該当ワープデフォーマを使って、拡大縮小を表現するパラメータを作成する
  6. 該当ワープデフォーマを選択したあとに、「回転デフォーマ」を作成する
    このとき、回転デフォーマは該当ワープデフォーマの中央に中心が設定されます
  7. 回転デフォーマの「不透明度」を使って表示、非表示状態を表現するパラメータを作成する

こちらにて現象の回避をお願いいたします。

長文になってしまい大変恐縮ではございますが、ご確認のほど何卒よろしくお願いいたします。

回答と回避策ありがとうございます。
頂いた回避策ですと該当ワープでフォーマ以下のアートメッシュが、該当ワープデフォーマの親のワープデフォーマの変形の影響を受けなくなってしまうため、回転デフォーマを使用した表示のオンオフですと表現に影響が出てしまいました。
ひとまずサイズを0%ではなく1%にすることで角度計算でエラーが出ない状態にして回避することにしました。

「いいね!」 1

@やぶ

ご確認ありがとうございます。
内容承知いたしました。表現に影響が出るようなご案内になってしまい大変申し訳ございません。
ご提示いただいた内容でも回避は可能ですので、そちらでの運用回避をお願いできればと思います。

その他問題がございましたらご連絡いただければと思います。
今後とも弊社製品をご愛顧のほどよろしくお願いいたします。